Allmänt meddelande

Collapse
No announcement yet.

Globala variabler

Collapse
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Globala variabler

    Hej,
    Jag har aldrig fått kläm på hur globala variabler i NAT språket fungerar.
    Alltså, så här uppfattar jag det hela:
    1. Globala variabler globala inom det enskilda scriptet ’name space’.
    2. Alltså, när scriptet exekveras så är det bara detta script som kan läsa sina globala variabler.
    3. Också, varje ordermodell med tillhörande script har egen ’run time environment’ som är separerat från andra.
    Om allt detta ovan är sant så det fungerar i praktiken så här:
    1. Order modell ’THE HOLY GRAIL’ har ett köp script som heter ’sl) the grail buy’. Detta script använder t.ex. RetVal( aref(L,2),2). Värden läses senare av samma script genom att anropa GetVal(2).
    2. Nu är modellen kopplad till säg ABB, BOL, ERIC, m.fl. Dessa instrument har samtliga olika värden på det jag vill lagra i en global cell 2 för att senare läsa av cellen.
    3. För att det skall fungera så måste ABB-THE HOLY GRAIL, BOL- THE HOLY GRAIL och ERIC- THE HOLY GRAIL exekvera i sina respektive run-time miljöer.
    Är det rätt uppfattat?
    Tack på förhand!
    Mvh
    Thomas

  • #2
    Globala variabler är minnesceller som kan läsas och skrivas i av samtliga script i samtliga konton därav namnet global. Jag använder mig av SetGVarIf för att skriva till någon av de 10000 minnesplatserna och GetGvar för att läsa.
    RetVal och GetVal fungerar på lite annat sätt (de brukar inte jag använda, men de kan ha sina fördelar ibland).
    mvh
    Bertil

    Comment


    • #3
      Hej Bertil, tack för svaret.

      Men kan du besvara frågor om hur ordermodeller med tillhörande script beter sig I run-time miljö?

      1. Order modell ’THE HOLY GRAIL’ har ett köp script som heter ’sl) the grail buy’. Detta script använder t.ex. RetVal( aref(L,2),2). Värden läses senare av samma script genom att anropa GetVal(2).
      2. Nu är modellen kopplad till säg ABB, BOL, ERIC, m.fl. Dessa instrument har samtliga olika värden på det jag vill lagra i en global cell 2 för att senare läsa av cellen.
      3. För att det skall fungera så måste ABB-THE HOLY GRAIL, BOL- THE HOLY GRAIL och ERIC- THE HOLY GRAIL exekvera i sina respektive run-time miljöer.

      Comment


      • #4
        1) Vet ej. "GetVal() hämtar värdet från senaste affären som tidigare undanlagrats med RetVal()." Det står att dessa variabler använder minnesplatserna 0 till 9 av de globala variablerna. Om du nu gör affärer med flera instrument med samma script så har jag ingen aning om hur detta hanteras. Antagligen är det den senaste affären som gör override på vad tidigare lagrats, men vad vet jag.
        2) Jag vet inte hur man skall hålla reda på för vilket instrument scriptet skrivet till cellen. Antagligen måste du lägga in crcid i någon cell så du vet vilket instrument som avses.
        3) ?

        Någon annan får försöka att svara på dina frågor.
        mvh
        Bertil

        Comment


        • #5
          Det finns tre sorters celler:

          Globala celler, som skrivs med setgvarif() och läses med getgvar(). Numrerade 10-899 samt 1001 - 9999

          Globala celler som lagras i ini-fil: setiniif() och läses med getini(). Numrerade 10-65534


          Båda celltyperna ovan är globala, dvs inte instrument- eller kontounika.


          Lokala celler, 0-9 som kan läsas och skrivas med retval() och getval(). Dessa har livslängd under 1 scriptkörningscykel och kan användas för att flytta värden intern i ett och samma script. De är instrumentunika och kan därför användas med samma kod till många olika instrument. Det går att lagra värde från lokala celler 0-4 i Loggade Lokala ordertransaktioner. Tex:


          stoplossnivå=xxxxx

          retval(stoplossnivå,4) {skriver en uträknad stoplossnivå till cell 4 som lagras vid tex en köptransaktion}

          Värdet syns därefter i Loggade lokala ordertransaktioner och kan läsas ut senare med


          lasttrade(b,4)


          tex i säljscriptet som då vet var stoplossnivån ska vara. Det är instrument- och kontounikt så att man kan använda samma kod för mängder av instrument.


          Comment


          • #6
            Bra!
            Då är det som jag trodde, minnescellerna 0-9 är lokala för scriptet och den lokala exekveringsmiljö som ett instrument har med sin ordermodell.
            Nu kommer nästa fråga.
            Är konstanterna H,L,B,S alltid realtid?
            Säg att jag exekverar ett script som körs i dagstaplar.
            Villkoret talar om för scriptet att trigga signal säg mellan 9:30 och 17:22.
            Själva triggern är framräknad på dagstaplar och använder t.ex. ma100=MOV(C,100,E).
            Säg att det är onsdag man exekverar scriptet och då är aref(ma100,1) värdet som ma100 hade igår, tisdag. Alltså, då måste vara värdet av aref(ma100,0) eller ma100 det momentana värdet som ma100 har just i detta ögonblick det exekverar. Alltså, onsdagens samtliga C ticks mellan 9:30 och 17:22.
            Likaså, om det finns i scriptet t.ex. villkor99=GT(B,ma100) eller villkor98=LT(S,ma100) så använder scriptet de momentana värden av BUY och SELL. Dessutom ma100 använder det momentana värdet av C för att räkna fram sitt värde.
            Stämmer resonemanget?
            Mvh
            Thomas

            Comment


            • #7
              H,L,B och S samt C uppdateras i realtid oavsett upplösning.

              Det medför att även medelvärden i tex dagsupplösning baserat på C får nytt värde sekundvis i takt med att nytt kursdata kommer in. En korsning:

              lt(c,mov(c,100,s))

              kan alltså slå till när som helst under dagen.

              Comment

              Working...
              X