Allmänt meddelande

Collapse
No announcement yet.

Diverse script-frågor från en ny användare

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

  • Diverse script-frågor från en ny användare

    Hej,

    Har precis börjat labba lite med scriptning i NAT och har några funderingar som någon rutinerad scriptare kanske vill hjälpa mig med?

    1. Hur långt får ett variabelnamn vara, och vilka tecken får det innehålla?

    2. Hur många tecken identifierar variabelnamnet? (Ex: Om teckenlängden är 3 räknas ABCDEF som samma variabel som ABC123.)

    3. Finns det någon begränsning i antalet minnesreferenser och tilldelningar, och vad händer om de överskrids?

    4. Räknar Mov() endast på avslutade staplar (d.v.s. ej den innevarande), och är det samma för dagsupplösning och intraday?

    5. Om man har ett skript som enbart kollar om en close-kurs överskrider ett visst värde, spelar det då någon roll för resultatet om skriptet körs i dagsupplösning eller intraday? Finns det någon fördel att ändå använda det ena eller andra sättet, t.ex. snabbhet eller minnesanvändning?

  • #2
    Hej! Välkommen till forumet!

    Försöker svara efter bästa förmåga med risk/förhoppning att någon rättar ev fel:

    1. Tror inte det finns någon begränsning på längden. Tecken kan vara både bokstäver och siffror, men en mycket viktig detalj är att variabelnamn som är delnamn av andra variabler lätt ställer till problem i scriptkompilatorn. Tex:

    var:=10
    var2:=20

    här blir det garanterat fel. Rätt sätt är:

    var1:=10
    var2:=20


    2. Allt från två tecken och uppåt. Använd inte variabelnamn som kan förväxlas med en funktion, tex:

    rsi:=rsi(14)


    det kan lätt bli knas. Bättre att skriva rs1:=rsi(14)


    3. Man kan använda upp till 512 minnesrefar i varje script. Den totala längden begränsas av reserverat utrymme i stacken vilket går att ändra i en ini-fil. Normalt skriver man dock inte riktigt så långa script kanske. Överskrids utrymmet får man felkoder när man försöker köra scriptet, eller vid syntaxkontroll.

    4. Mov() räknar precis som i princip alla andra funktioner även på innevarande stapel. Vill man inte ha det så kan man tex förskjuta hela dataserien ett steg med Aref():

    mov(aref(c,1),3,s)

    bildar medelvärde från förra stapeln och bakåt 3 perioder. Dvs, det ändrar sig inte under innevarande stapel. Det blir alltså samma om man kör scriptet på 1 minut, 5 minuter eller dagsstaplar, det enda som skiljer är hur lång tid en stapel avser.

    5. Inte i det fallet, är tittar man ju inte på någon specifik upplösning och man kan alltså välja vilken upplösning man vill i scriptet. Det påverkar inte snabbheten. Däremot, om man kör väldigt långa medelvärden och långa dataserier med HHV() och liknande så kan det bli märkbart långsamt. Minnesreferenser är något som hjälper till att snabba upp scriptkörningen för övrigt.

    Comment


    • #3
      Tack för tydligt och snabbt svar!

      Comment


      • #4
        Jag kan lägga till en sak på fråga tre.
        Du frågade om minnesreferenser och tilldelade namn. Rickard svarade på minnesreferenser "=".

        När det gäller tilldelade namn ":=" finns ingen begränsning av hur många sådana du kan ha. Scripet betraktar dem bara som ren text till dess att någon av dem finns med i en beräkning längre ned i scriptet. Dvs. när det tilldelade namnet finns med som parameter i någon NAT-funktion.

        Det finns en begränsning av parentesdjupet för att det tilldelade namnet ska kunna exekveras. Det får vara ett parentesdjup av max 10 för att det tilldelade namnet ska kunna exekveras.

        Comment


        • #5
          Tack LillWicke! Det var ytterligare bra info.

          Comment

          Working...
          X