Allmänt meddelande

Collapse
No announcement yet.

Scriptfrågor

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

  • Scriptfrågor

    En fråga som jag inte lyckats luska ut:
    Jag ser att vissa variabler är tilldelade med operatorn ":="
    medans andra är tilldelade med bara "="

    Varför är det så och vad är skillnaden?

  • #2
    Finns en förklaring här:

    http://www.autostock.se/vbulletin/sh...nnesreferenser

    Comment


    • #3
      Tack, så i princip kan hela scriptet bestå av ":=" utan problem?

      Jag har en sak till som jag tycker är lite förbryllande:
      Script brukar ju avslutas med antingen "Sant" eller "Falskt" dvs. 1 eller 0.

      Men det verkar isället vara legio att man isället avslutar med ett "mult(buyx,y)" eller "add(,)"
      Dvs man får scriptet att avsutas med ett 0 eller y. Vad är anledningen till detta?
      Agerar scriptet på något speciellt sätt när det avslutas med ett tal större än 1?

      Comment


      • #4
        Jag flyttar frågorna till en egen tråd.

        := används när man vill tilldela en variabel ett värde, tex:

        värde:=90

        Det går också att använda vid returvärden från funktioner:

        värde:=add(90,c)

        där Close adderas med 90 tex. Det är helt rätt som du säger att man kan skriva ett helt script med tilldelade namn, men det finns en begränsning i parentesdjupet som växer för varje rad man använder tidigare funktioner i. Vi kan ha maximalt 10 parentesdjupsnivåer.

        För att komma runt det problemet använder man minnesreferenser längst ner i scriptet. Dessa körs som separata kompilerade scriptrader och bygger inte parentesdjup på samma sätt. Begränsningar för minnesreferenser är maximalt 512 st. Och de måste vara returvärden från en eller flera funktioner. Det fungerar alltså inte att skriva:

        värde=90

        eftersom det är ett tilldelat namn.

        Om man använder intradayprefix måste det omsluta samtliga minnesreferenser i ett script:

        vinst:=lt(c,sub(lasttrade(s,p),2))
        i30(
        draw(sub(lasttrade(s,p),tplevel),2,mqb2)
        draw(lasttrade(s,p),3,rqb)
        cover1=or(or(takeprofit,condition1),and(vinst,gt(mval,triglevel)))
        cover2=and(and(and(and(cover1,datum_ok),inpådagen),öppet),innehav_ok)
        mult(cover2,5)

        )


        Och slutligen, din fråga om sista raden och mult()-satsen som ofta används, den finns där för att scriptet ska returnera tex 0 för falskt och 10 för sant. Då kan man rita flaggor med höjden 10% i område=kursstaplar. Så det är en rent "estetisk" fråga. Alla värden högre än 0 räknas som SANT.

        Comment


        • #5
          Tackar så mycket för denna förklaring Rikard.

          Har tre frågor till:

          1) När man låter ett script larma och har satt en bock i "Larmbevakat" får man ju ett meddelande i "Larm/Meddelande"-fönstret att även GSM är sänt.
          Jag trodde då att om man också bockar för "Lokalt bara" så skall larmet synas i larmfönstret men inte skicka något GSM. Snopen blev jag när ingenting alls syntes i larmfönstret när båda förvalen var ibockade. Varför?

          2) Funktionen "portfolio(VP)" hämtar den värden från Nordnet eller hanteras den av NAT internt med minne för de senast bekräftade innehavet?
          Varför jag frågar är att om Nordnet börjar strula och tillfälligt skickar fel värden (vilket hänt förr) kan scripten börja löpa amok.

          3) Samma fråga som ovan har jag också om Lasttrade(,)

          Comment


          • #6
            1. Det borde fungera som du beskriver, men jag har inte kollat själv faktiskt. Får göra ett test på fredag när jag är tillbaka från Oslo.

            2 och 3. Portfolio() och LastTrade() hämtar direkt från Nordnet vid varje trade samt varje synkning som görs i programmet, tex när du byter konto i Orderdialogen eller refreshar en arbetsyta osv eller i händelse av någon form av omstart - det finns ett stort antal olika saker som kan startas om ifall recovery-systemet detekterar en misstänkt störning. Om Nordnet skickar fel värden är det självklart risk att det blir tokigt. Men vi har börjat bygga in olika rutiner för att reducera den risken, bla kan man med få viss kontroll att kommunikationen fungerar med tex:

            not(eqv(portfolio(d),0))

            not(eqv(cash(d),0))


            För att minska risken för problem kan man också bygga in fördröjningar så att order inte kan skickas flera gånger hur snabbt som helst. Det går också att bygga feedback-loopar som detekterar eventuella "överskott" i positionsstorlek och säljer av det så fort kontakt med depån är återupprättad osv.

            Comment


            • #7
              Tack för den infon.
              Då förstår jag scriptraderna i Raptorn lite bättre.

              Comment

              Working...
              X