Allmänt meddelande

Collapse
No announcement yet.

Scripthjälp behövs..

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

  • Scripthjälp behövs..

    Jag vill göra en slags trailing-stoploss och även kunna vinsttesta funktionen...

    Funktionen är följande (för nuvarande, men kan ändras)

    1) Från köpnivån skapas en stoploss -0.5%
    2) När kursen passerat +0.5% börjar stoplossen s.k. flyta med -0.5% från högsta nivån (räknat från tiden för köpet).
    3) När kursen passerar 1% utökas stoplossen med -0.2% (alltså totalt -0.7% från högstanivån)
    4) För varje 1% adderas ytterliggare -0.2% från högsta nivån, så +10% är 0.5%+(0.2%x9)=2.3% från högsta nivån

    Mina stoploss är lite snålt tilltagen men det är en inställningsfråga...
    Jag använder mig av Lastrade och globala minnesceller som känns diffust, eftersom de globala minnescellerna kan bara användas under realtid (hur ska jag veta att mitt script fungerar????)

    -----Scriptet med lite svengelska variabler--------
    nLowPerc:=0.995
    nPercLev1:=1.005
    nPercLev2:=1.01
    nAddPerc:=0.2
    nBuyPrice:=LastTrade(B,P)
    nBuyDate:=LastTrade(B,D)
    nFirst:=MULT(nBuyPrice,nLowPerc)
    {Kollar av close och höjer ribban}
    nPastHigh:=GetGVar(400)
    nHigh:=If(GT(C,nPastHigh),C,nPastHigh)
    SetGVarIf(nHigh,400,1)
    Phase1:=And(GE(nHigh,MULT(nLowPerc,nBuyPrice)),LT(nHigh,MULT(nPercLev1,nBuyPrice)))
    Phase2:=And(GE(nHigh,MULT(nPercLev1,nBuyPrice)),LT(nHigh,MULT(nPercLev2,nBuyPrice)))
    Phase3:=GE(nHigh,MULT(nPercLev2,nBuyPrice))
    nGetOut1:=MULT(nBuyPrice,nLowPerc)
    nGetOut2:=If(Phase2,MULT(nHigh,nLowPerc),nGetOut1)
    { > 1% ökar stopploss nivån 0.2% per 1%, t.ex. +10% fr. köppris ger 0.5%+(0.2*9)= 2.3% från högsta pris}
    {Original (nHigh*(1-(0.005+(nAddPerc*(-0.01+(nHigh/nBuyPrice))))}
    {<10 paranteser (nHigh*(0.995-(nAddPerc*(-0.01+(nHigh/nBuyPrice)))}
    {Autostock style MULT(nHigh,SUB(0.995,MULT(nAddPerc,ADD(-0.01,DIV(nHigh,nBuyPrice)))))}
    nGetOut3:=If(Phase3,MULT(nHigh,SUB(0.995,MULT(nAddPerc,ADD(-0.01,DIV(nHigh,nBuyPrice))))),nGetOut2)
    nSell:=LE(C,nGetOut3)

    I1(
    nSell
    )
    -----------------------------------------------------------

    1) Jag behöver veta/förstå hur lagras köp resp sälj i minnescellerna (minnescell=inget vinsttest=Funkar inte i diagrammet).
    2) Lagra variabel för högstanivå (om jag vet klockslag och datum för köpet kan jag räkna antal steg till köpet från nutid och mäta högsta nivån, iallafall 9999 minuter hoppas jag).

    Det vore bra om om jag fick hjälp på vägen eftersom köpscriptet är iallafall färdigt...
    Last edited by niclas_gbg; 2009-08-12, 20:18.
    NiclasGBG

  • #2
    Här kommer lite matnyttigt om backtestning med flytande stoploss:

    http://www.autostock.se/vbulletin/showthread.php?t=1848

    Comment


    • #3
      Finns ingen möjlighet p.g.a. 10 paranteser

      Jag kan inte inkl. köpscriptet i säljscriptet eftersom båda ligger på 10 parantesers djup, (säljscriptet kan kanske gå att optimera)...

      Hur kan man minska parantesdjup om minnescellerna inte får användas????

      Registreras ingenstans köp resp. sälj, pris, volym och datum som i funktionen "LastTrade"????

      Idéer gärna...
      NiclasGBG

      Comment


      • #4
        Det är inga problem att bygga ihop scripten. Men får göra minnesreferenser av de sista raderna, eller så många som behövs, för att inte överskrida antalet parenteser. Exempel:

        botten1:=Lt(l,Aref(l,3))
        kursL:=Find(botten1,3,l,1)
        kursH:=Find(botten1,3,h,1)
        högreH:=Hhv(Gt(h,kursH),4)
        högreL:=Hhv(Gt(l,kursL),4)
        i15(
        korrektion=And(Hhv(botten1,4),And(högreH,högreL))
        stigande1=And(Gt(kursL,Find(botten1,3,l,2)),Hhv(botten1,1))
        stigande2=And(stigande1,Gt(l,Aref(l,1)))
        buy=And(Hhv(stigande2,3),Gt(h,kursH))
        Mult(buy,8)
        )

        Här syns hur de första variablerna (tilldelade namn) skrivs med := och de inom intraday-prefixet skrivs med bara =

        Allt inom intraday-parenteserna kan i princip göras om till minnesreferenser. Det betyder att varje minnesreferens exekveras utan att bygga parentesdjup, och det blir helt plötsligt ganska enkelt att göra längre script, baka in köpsignalscript i ett säljscript etc.

        Kodexemplena i tråden om flytande stoppar fungerar exakt likadant.

        Comment


        • #5
          Förstår inte riktigt

          Menar du om jag använder enl. mitt script pekare till minnet inanför intraday så funkar det med backtest:
          ---------------------
          I1(
          nPastHigh=GetGVar(400)
          SetGVarIf(nHigh,400,1)
          )
          ----------------------

          Alternativt kan jag bygga mitt säljscript genom att lägga köpscriptet utanför intraday och sälj innanför????

          -Varför kan jag inte göra hela scriptet inanför intradayprefixet, går det? och varför gör man inte alltid detta (något stort har jag nog missat)?

          Enl. länken du skickade skiver du inte ut intradayprefixet, utan börjar använda "=" (likamed) efter ":=" (tilldela), varför och vilken tid blir det, dagskurser eller?:
          flytnivå:=1.05 {$opt(1.01,1.08,0.01)}
          bakåt1:=480
          köpentry=And(köp1,tidsignal)




          Hoppas att du har tålamod med mig ;-)
          Last edited by niclas_gbg; 2009-08-12, 21:34.
          NiclasGBG

          Comment


          • #6
            Tilldelade namn måste ligga ovanför den punkt där man börjar använda minnesreferenser. Referenserna exekveras lite speciellt av kompilatorn. Viktigt är också att man inte får stoppa in något tilldelat namn bland minnesreferenserna. Har man väl börjat använda dessa måste man fortsätta resten av scriptet.

            Tanken med stoploss i simulering är att helt enkelt använda signalen från tex köpscriptet och beräkna stoppen på det. Det görs med hänsyn till den prisnivå som köpet gjordes på, och därefter mäta om kursen ökar så att stoppen följer med. Lite knöligt sätt att jobba på, men det är enda chansen att simulera flytande stoppar. Live är det mycket enklare, men det är alltid intressant att se hur en strategi fungerar bakåt för att inte säga helt nödvändigt.


            m1:=mov(c,5,s)
            m2:=Mov(c,100,e)
            stigande:=gt(m1,aref(m1,3))
            köpentry:=and(cross(m1,m2),stigande)


            om du vill använda minnesreferenser redan i köpscriptet går det fint, men då måste man lägga dessa under de tilldelade namnen för stoppen - alltså efter "bakåt1:=480"

            { STOPLOSS }
            flytnivå:=0.98 {opt(0.92,0.99,0.01)}
            bakåt1:=480
            ---här kan ev minnesreferenser ligga från köpscriptet ---
            lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
            efterinköp=if(ge(d,getval(3)),h,0)
            highlevelb=hhv(efterinköp,bakåt1)
            stoppok=gt(getval(3),getval(4))
            köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
            stoppkurva=mult(highlevelb,flytnivå)
            stoppsälj=and(stoppok,le(l,stoppkurva))
            lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
            draw(if(stoppok,stoppkurva,0),2,rqb)
            mult(stoppsälj,25)

            Comment


            • #7
              Börjar trippa frammåt

              Tackar tackar, det hjälpte en del (mycket)... från 10 till 6 i parantesdjup

              Jag är inte riktigt med på var gränsen går mer än att om jag tilldelar te.x.

              "Skräp1:=1" så får den inte vara innanför intradayprefixet.

              Men "Skräp2=Mult(1,1)" funkar det eller måste jag skriva:

              "Skräp1:=1
              Skräp2=Mult(Skräp1,Skräp1)"

              Är det tilldelande konstanter "Skräp1:=1" som måste stå utanför eller alla konstanter, även i en del funktioner "Skräp2=Mult(1,1)"...
              Funkar "nC=Ref(C,1)"????

              Jag såg enl. länken du skickade minnes referenser "GetVal" och "RetVal" kan dessa variabler användas för att kommunicera mellan "2 OLIKA SCRIPT", eller bara för att minimera parantesdjupet innuti ett script, framförallt funkar dessa innanför intraday prefixet (såg att du använde nr. 3 och 4)????

              Minskade parantesdjup gjorde även att hela Autostock programmet fick raketfart ;-)
              Last edited by niclas_gbg; 2009-08-12, 22:51.
              NiclasGBG

              Comment


              • #8
                Trevligt! Minnesreferenser går betydligt snabbare att exekvera. Det är värt en hel del när man backtestar en modell flera år tillbaka i tiden. Man kan tjäna en kvart per körning på det! En annan sak som väldigt många missar:

                Starta programmet med KlientServer istället för Börsmodul. Det gör att två processer körs, där den ena tar hand om API "utåt" mot nätet och Nordnet, medan den andra tar hand om användargränssnittet. Allt flyter mycket bättre då. Kör man Börsmodul får en enda process ta hand om rubbet, och då vill det gärna "frysa" under kursinsamling osv.


                "Skräp1:=1" så får den inte vara innanför intradayprefixet.

                Men "Skräp2=Mult(1,1)" funkar det eller måste jag skriva:

                "Skräp1:=1
                Skräp2=Mult(Skräp1,Skräp1)"
                Svar: Det här är den lösning jag brukar använda själv så blir det inga tveksamheter i kompilatorn.

                Är det tilldelande konstanter "Skräp1:=1" som måste stå utanför eller alla konstanter, även i en del funktioner "Skräp2=Mult(1,1)"...
                Funkar "nC=Ref(C,1)"????
                Svar: Stämmer, men returer av logiska operationer kan stå som referens, så i ditt fall är det egentligen inte en logisk operation utan bara ett värde förskjutet en period, så det bör stå som tilldelat namn.

                Jag såg enl. länken du skickade minnes referenser "GetVal" och "RetVal" kan dessa variabler användas för att kommunicera mellan "2 OLIKA SCRIPT", eller bara för att minimera parantesdjupet innuti ett script, framförallt funkar dessa innanför intraday prefixet (såg att du använde nr. 3 och 4)????
                Svar: GetVal och RetVal kom till före de andra kommandona för globala minnesceller. GetVal och RetVal används för de första 10 "flyktiga" minnescellerna. Dessa kan bara användas inom ett script. Livslängden är bara en cykel in körningen, men man kan använda dem för att skicka värden inom ett script, kanske inte så vanligt men ändå. Exemplet med cell 3 och 4 betyder inget speciellt.

                Comment


                • #9
                  Trailing stoploss.....

                  Hej!


                  Jag försöker att få en flytande stoploss, men det tycks gå åt he###te...
                  Troligtvis begriper jag inte programmeringsspråket...
                  Jag skulle bli mycket glad om någon kunde hjälpa mig frammåt....
                  Min stoploss utlöser samma dag som köp erhålls...

                  Funktion:

                  Vid köpsignal lagras: köpvärdet, datumet och signalen sätts.
                  Från köpvärdet sätts stoploss 0.5% under köpvärdet och stoploss ligger kvar upp till +0.5% fr. köpvärdet (-0.5% fr. köpvärdet).
                  Från +0.5% till 1% fr. köpvärdet ligger stoploss 0.5% under högsta värdet.
                  Från 1% och uppåt ligger stoploss 0.5% under högsta värdet fast för varje +1% utökas stoploss 0.2%. (t.ex. +10% = 0.5% + (0.2%x9) = stoploss 2.3% fr. högsta värdet)…




                  sl) TrailingStopLoss

                  -----------------------
                  {SÄLJSCRIPT}
                  nLowPerc:=0.995
                  nPercLev1:=1.005
                  nPercLev2:=1.01
                  nAddPerc:=0.2
                  nHalfPerc:=0.005
                  nDecrOnePerc:=0.01
                  {nBval:=4}
                  {nSval:=5}
                  nZero:=0
                  nOne:=1


                  I1(
                  nBuy=----Köpsignal blir sann eller inte, alltså köpscript är inbakat i stoploss-----
                  {Lagra undan köppris i minnescell 3}
                  nStore1=retval(if(And(nBuy,Not(getval(5))),C,getval(3)),3)
                  {Lagra undan datum för köp i minnescell 4}
                  nStore2=retval(if(And(nBuy,Not(getval(5))),D,getval(4)),4)
                  {Lagra undan köpsignal i minnescell 5......GT(1,0) ser skumt ut men vill skicka sant}
                  nStore3=retval(if(nBuy,GT(1,0),getval(5)),5)
                  {Sätter högstanivå i minnescell 6}
                  nStore4=retval(if(And(getval(5),GT(C,getval(6))),C,getval(6)),6)
                  {Byter höjd på högstanivå vid ny köpsignal och lagrar i minnescell 6}
                  nStore5=retval(if(And(Eqv(D,getval(4)),getval(5)),C,getval(6)),6)
                  {SÄLJSCRIPT}
                  {Sätter köppris i variabel nBuyPrice}
                  nBuyPrice=getval(3)
                  {Sätter högsta nivå sedan köp i variabel nHigh}
                  nHigh=getval(6)
                  {Testar vilken fas jag befinner mig i}
                  nPhase1=And(GE(nHigh,MULT(nLowPerc,nBuyPrice)),LT(nHigh,MULT(nPercLev1,nBuyPrice)))
                  nPhase2=And(GE(nHigh,MULT(nPercLev1,nBuyPrice)),LT(nHigh,MULT(nPercLev2,nBuyPrice)))
                  nPhase3=GE(nHigh,MULT(nPercLev2,nBuyPrice))
                  {Justerar stoplossnivå beroende på fas}
                  nGetOut1=If(And(nPhase1,getval(5)),MULT(nBuyPrice,nLowPerc),0)
                  nGetOut2=If(And(nPhase2,getval(5)),MULT(nHigh,nLowPerc),nGetOut1)
                  nGetOut3=If(And(nPhase3,getval(5)),MULT(nHigh,SUB(1,ADD(nHalfPerc,MULT(nAddPerc,SUB(DIV(nBuyPrice,SUB(nHigh,nBuyPrice)),nDecrOnePerc))))),nGetOut2)
                  {Testar om close är under stoplossnivå och att tidigare faktiskt köpt}
                  nSell=And(LT(C,nGetOut3),getval(5))
                  {Lagra undan säljsignal i minnescell 5......GT(0,1) ser skumt ut men vill skicka falskt}
                  nStore6=retval(if(nSell,GT(0,1),getval(5)),5)
                  {Skriver ut sälj}
                  nSell
                  )
                  -------------------------------------------
                  Last edited by niclas_gbg; 2009-08-20, 10:53.
                  NiclasGBG

                  Comment


                  • #10
                    Förklaring till ditt script...

                    Jag har kollat på ditt script Ricard, där du skapat en stoploss...
                    Emellertid har jag mycket svårt att använda något som jag inte riktigt förstår, eftersom jag måste kunna korrigera scriptet själv...

                    Här är ditt script som jag stulit på forumet
                    -------------------
                    sl) Flytande köpstopp inkl entry

                    m1:=mov(c,5,s)
                    m2:=Mov(c,100,e)
                    stigande:=gt(m1,aref(m1,3))
                    köpentry:=and(cross(m1,m2),stigande)

                    { STOPLOSS }
                    flytnivå:=0.98 {opt(0.92,0.99,0.01)}
                    bakåt1:=480
                    lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
                    efterinköp=if(ge(d,getval(3)),h,0)
                    highlevelb=hhv(efterinköp,bakåt1)
                    stoppok=gt(getval(3),getval(4))
                    köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
                    stoppkurva=mult(highlevelb,flytnivå)
                    stoppsälj=and(stoppok,le(l,stoppkurva))
                    lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
                    draw(if(stoppok,stoppkurva,0),2,rqb)
                    mult(stoppsälj,25)
                    --------------------------------

                    Varför använder du 480 perioder bakåt (bakåt1:=480), jag ser inte sambandet, men gissar att det är fråga om 1 dags börshandel med minutkurser...
                    Men börsen är öppen 8,5h inte 8h????

                    Du lagrar datum i minnescell 3 och 4... I minnecell 3 lagrar du datum för köpsignal... I nr 4 datum för säljsignal...

                    Eftersom du bara kan gå bakåt 480 perioder, är detta script gjort för daytrading????

                    Vad är datum i programmet, endast en tid på dygnet eller med årtal-månad-dag:tid????

                    Verkar som du hela tiden söker bakåt för köppris och högsta nivå, varför inte lagra i minnesceller när det sker?

                    Oj, väldigt många frågor. Det kanske räcker med lite förklaringar runt scriptet du gjorde så kanske detta kan lösa mina problem i mitt script (ovan)....
                    NiclasGBG

                    Comment


                    • #11
                      Ursprungligen postat av niclas_gbg Visa inlägg
                      Hej!


                      Jag försöker att få en flytande stoploss, men det tycks gå åt he###te...
                      Troligtvis begriper jag inte programmeringsspråket...
                      Jag skulle bli mycket glad om någon kunde hjälpa mig frammåt....
                      Min stoploss utlöser samma dag som köp erhålls...

                      Funktion:

                      Vid köpsignal lagras: köpvärdet, datumet och signalen sätts.
                      Från köpvärdet sätts stoploss 0.5% under köpvärdet och stoploss ligger kvar upp till +0.5% fr. köpvärdet (-0.5% fr. köpvärdet).
                      Från +0.5% till 1% fr. köpvärdet ligger stoploss 0.5% under högsta värdet.
                      Från 1% och uppåt ligger stoploss 0.5% under högsta värdet fast för varje +1% utökas stoploss 0.2%. (t.ex. +10% = 0.5% + (0.2%x9) = stoploss 2.3% fr. högsta värdet)…




                      sl) TrailingStopLoss

                      -----------------------
                      {SÄLJSCRIPT}
                      nLowPerc:=0.995
                      nPercLev1:=1.005
                      nPercLev2:=1.01
                      nAddPerc:=0.2
                      nHalfPerc:=0.005
                      nDecrOnePerc:=0.01
                      {nBval:=4}
                      {nSval:=5}
                      nZero:=0
                      nOne:=1


                      I1(
                      nBuy=----Köpsignal blir sann eller inte, alltså köpscript är inbakat i stoploss-----
                      {Lagra undan köppris i minnescell 3}
                      nStore1=retval(if(And(nBuy,Not(getval(5))),C,getval(3)),3)
                      {Lagra undan datum för köp i minnescell 4}
                      nStore2=retval(if(And(nBuy,Not(getval(5))),D,getval(4)),4)
                      {Lagra undan köpsignal i minnescell 5......GT(1,0) ser skumt ut men vill skicka sant}
                      nStore3=retval(if(nBuy,GT(1,0),getval(5)),5)
                      {Sätter högstanivå i minnescell 6}
                      nStore4=retval(if(And(getval(5),GT(C,getval(6))),C,getval(6)),6)
                      {Byter höjd på högstanivå vid ny köpsignal och lagrar i minnescell 6}
                      nStore5=retval(if(And(Eqv(D,getval(4)),getval(5)),C,getval(6)),6)
                      {SÄLJSCRIPT}
                      {Sätter köppris i variabel nBuyPrice}
                      nBuyPrice=getval(3)
                      {Sätter högsta nivå sedan köp i variabel nHigh}
                      nHigh=getval(6)
                      {Testar vilken fas jag befinner mig i}
                      nPhase1=And(GE(nHigh,MULT(nLowPerc,nBuyPrice)),LT(nHigh,MULT(nPercLev1,nBuyPrice)))
                      nPhase2=And(GE(nHigh,MULT(nPercLev1,nBuyPrice)),LT(nHigh,MULT(nPercLev2,nBuyPrice)))
                      nPhase3=GE(nHigh,MULT(nPercLev2,nBuyPrice))
                      {Justerar stoplossnivå beroende på fas}
                      nGetOut1=If(And(nPhase1,getval(5)),MULT(nBuyPrice,nLowPerc),0)
                      nGetOut2=If(And(nPhase2,getval(5)),MULT(nHigh,nLowPerc),nGetOut1)
                      nGetOut3=If(And(nPhase3,getval(5)),MULT(nHigh,SUB(1,ADD(nHalfPerc,MULT(nAddPerc,SUB(DIV(nBuyPrice,SUB(nHigh,nBuyPrice)),nDecrOnePerc))))),nGetOut2)
                      {Testar om close är under stoplossnivå och att tidigare faktiskt köpt}
                      nSell=And(LT(C,nGetOut3),getval(5))
                      {Lagra undan säljsignal i minnescell 5......GT(0,1) ser skumt ut men vill skicka falskt}
                      nStore6=retval(if(nSell,GT(0,1),getval(5)),5)
                      {Skriver ut sälj}
                      nSell
                      )
                      -------------------------------------------
                      "nBuy" funkar inte eftersom det ingår i "nBuyPrice".
                      Du kan kalla "nBuy" för "nBuySignal" i stället, eller något annat .............

                      Comment


                      • #12
                        Ursprungligen postat av niclas_gbg Visa inlägg
                        Jag har kollat på ditt script Ricard, där du skapat en stoploss...
                        Emellertid har jag mycket svårt att använda något som jag inte riktigt förstår, eftersom jag måste kunna korrigera scriptet själv...

                        Här är ditt script som jag stulit på forumet
                        -------------------
                        sl) Flytande köpstopp inkl entry

                        m1:=mov(c,5,s)
                        m2:=Mov(c,100,e)
                        stigande:=gt(m1,aref(m1,3))
                        köpentry:=and(cross(m1,m2),stigande)

                        { STOPLOSS }
                        flytnivå:=0.98 {opt(0.92,0.99,0.01)}
                        bakåt1:=480
                        lasttradek=Retval(if(And(köpentry,or(ge(getval(4),getval(3)),eqv(getval(4),0))),D,Getval(3)),3)
                        efterinköp=if(ge(d,getval(3)),h,0)
                        highlevelb=hhv(efterinköp,bakåt1)
                        stoppok=gt(getval(3),getval(4))
                        köppris=find(And(ge(d,getval(3)),lt(ref(d,1),getval(3))),bakåt1,c,1)
                        stoppkurva=mult(highlevelb,flytnivå)
                        stoppsälj=and(stoppok,le(l,stoppkurva))
                        lasttrades=Retval(if(And(stoppsälj,gt(getval(3),getval(4))),D,Getval(4)),4)
                        draw(if(stoppok,stoppkurva,0),2,rqb)
                        mult(stoppsälj,25)
                        --------------------------------

                        Varför använder du 480 perioder bakåt (bakåt1:=480), jag ser inte sambandet, men gissar att det är fråga om 1 dags börshandel med minutkurser...
                        Men börsen är öppen 8,5h inte 8h????
                        Svar: 480 perioder är bara ett exempel, en kvarleva från gamla tider tror jag. Inget speciellt, det går att öka upp siffran ganska mycket, men då blir hela scriptet tyngre att exekvera osv.

                        Du lagrar datum i minnescell 3 och 4... I minnecell 3 lagrar du datum för köpsignal... I nr 4 datum för säljsignal...
                        Svar: Det stämmer, då hålls båda separerade.

                        Eftersom du bara kan gå bakåt 480 perioder, är detta script gjort för daytrading????
                        Svar: Ursprungligen ja, men det går även att köra längre tider om man ökar antalet perioder.

                        Vad är datum i programmet, endast en tid på dygnet eller med årtal-månad-dag:tid????
                        Svar: Date() returnerar en tidstämpel som man kan använda för att tester i script. Jag får kolla upp vilket format den använder.

                        Verkar som du hela tiden söker bakåt för köppris och högsta nivå, varför inte lagra i minnesceller när det sker?
                        Svar: Jag tycker den här metoden är enklare, och dessutom går det att backtesta.

                        Oj, väldigt många frågor. Det kanske räcker med lite förklaringar runt scriptet du gjorde så kanske detta kan lösa mina problem i mitt script (ovan)....

                        Angående ditt första script, jag kollade med Lasse som utvecklat scriptspråket. Här är hans svar:


                        "Det sista nCell följer inte syntaxen för minnesreferenser. Om det varit := så hade ju texten ersatts med något, men nu försöker kompilatorn kompilera något den inte förstår på sista raden som aldrig blir en funktion och resultatet är osäkert vad det blir...och dessutom försöker den plocka returvärdet för scriptet från detta osäkra."

                        Add(nCell,0)


                        Alltså, sista raden måste ändras så att den blir ett resultat av en funktion.

                        Comment


                        • #13
                          Bra svarat

                          Jag stångas fortfarande med mitt script och det fungerar bara ibland. Vid vissa köpsignaler fungerar inte stoploss...

                          Hursomhelst, tror jag att det är lättast att attackera problemet via tid...

                          Beträffande tidsstämpeln "Date" spänner den över flera dagar????

                          Är det teoretiskt möjligt att få samma "date" 2 olika dagar?

                          Om det är timmar vi mäter får jag skaffa en variabel som kommer ihåg start och sedan loopar via ret- och getval och adderar varje minut...
                          NiclasGBG

                          Comment


                          • #14
                            Date() returnerar en heltalsdel för dagar och en decimaldel för intraday.

                            igår:=sub(int(Date()),1)
                            förrgår:=sub(int(Date()),2)

                            Medan intraday-tidpunkten kan tas fram så här:



                            tidnu:=Frac(Date())

                            där "tidnu" får ett värde mellan 0 och 1 där 0 motsvarar kl 00:00 och 1 motsvarar kl 24:00 innevarande dag.

                            Comment


                            • #15
                              Tack Rickard för hjälpen!!!

                              Jag löste det emellertid utan datum, eftersom jag inte riktigt visste vad jag gjorde med den funktionen...

                              Jag är fortfarande lite/mycket osäker på olika saker i uppställning inför komplieringen som sker, så en del kan se lite lustigt ut... Det går säkert att rationallisera betydligt...

                              Tack Rickard för hjälpen och tyvärr kommer jag säkert att plåga dig med frågor inför sjösättning av min modell...

                              De som är intresserade kan gärna testa min stoploss och komma med konstruktiv kritik...

                              Funktion:
                              1) Från köpnivån skapas en stoploss -0.5%
                              2) När kursen passerat +0.5% börjar stoplossen s.k. flyta med -0.5% från högsta nivån (räknat från tiden för köpet).
                              3) När kursen passerar 1% utökas stoplossen med -0.2% (alltså totalt -0.7% från högstanivån)
                              4) För varje 1% adderas ytterliggare -0.2% från högsta nivån, så +10% är 0.5%+(0.2%x9)=2.3% från högsta nivån


                              --------------------------------
                              sl) TrailingStopLoss

                              {Variabler för stoploss}
                              {2=Säljpris}
                              {3=Köppris}
                              {4=Datum för köp, ej med}
                              {5=Köpsignal. Är 1 under köpperiod}
                              {6=Högsta värdet under köpperiod}
                              {7=Datum för sälj, ej med}
                              {8=Säljsignal. Är 1 efter stoploss löst ut}
                              {9=Aktuell Stoplossnivå}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {SÄLJSCRIPT}
                              nLowPerc:=0.995
                              nPercLev1:=1.005
                              nPercLev2:=1.01
                              {nAddPerc reglerar hur många proc som ska adderas}
                              nAddPerc:=0.2
                              nHalfPerc:=0.005
                              nDecrOnePerc:=0.01
                              nZero:=0
                              nOne:=1

                              I1(
                              {KöpScript inbakat}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {KÖPSCRIPT}
                              {Köp scriptet resulterar i variabeln "nBuySignal"}
                              {nBuySignal=And(And(And(And(And(And(nTest1,nTest2),nTest3),nTest4),nTest5),nTest6),nTest7)}
                              {KöpScript slut}
                              {Säljscript och stoploss börjar här}
                              nFirstBuy=And(nBuySignal,Or(Eqv(getval(8),1),And(Eqv(getval(5),0),Eqv(getval(8),0))))
                              {Lagra Köp}
                              nStore3=retval(if(nFirstBuy,C,getval(3)),3)
                              nStore5=retval(if(nFirstBuy,nOne,getval(5)),5)
                              nStore6=retval(if(nFirstBuy,C,getval(6)),6)
                              {Nolla Sälj}
                              nStore8=retval(if(nFirstBuy,nZero,getval(8)),8)
                              {Lagra högstavärdet}
                              nStore16=retval(if(And(Eqv(getval(5),1),GT(C,getval(6))),L,getval(6)),6)
                              {Säljscript}
                              nVal3BuyPrice=getval(3)
                              nVal6BuyHigh=getval(6)
                              nVal5BuySig=Eqv(getval(5),1)
                              {Start speciell funktion av stoploss}
                              nPhase1=LT(nVal6BuyHigh,MULT(nLowPerc,nVal3BuyPrice))
                              nPhase2=And(GE(nVal6BuyHigh,MULT(nLowPerc,nVal3BuyPrice)),LT(nVal6BuyHigh,MULT(nPercLev1,nVal3BuyPrice)))
                              nPhase3=And(GE(nVal6BuyHigh,MULT(nPercLev1,nVal3BuyPrice)),LT(nVal6BuyHigh,MULT(nPercLev2,nVal3BuyPrice)))
                              nPhase4=GE(nVal6BuyHigh,MULT(nPercLev2,nVal3BuyPrice))
                              nStopLevel1=If(And(nPhase1,nVal5BuySig),MULT(C,100),0)
                              nStopLevel2=If(And(nPhase2,nVal5BuySig),MULT(nVal3BuyPrice,nLowPerc),nStopLevel1)
                              nStopLevel3=If(And(nPhase3,nVal5BuySig),MULT(nVal6BuyHigh,nLowPerc),nStopLevel2)
                              nStopLevel4=If(And(nPhase4,nVal5BuySig),Mult(nVal6BuyHigh,Sub(nOne,Add(Mult(Sub(Div(Sub(nVal6BuyHigh,nVal3BuyPrice),nVal3BuyPrice),nDecrOnePerc),nAddP erc),nHalfPerc))),nStopLevel3)
                              {Slut stoploss funktion}
                              {Sätter Stoploss nivå}
                              nStore19=retval(if(nVal5BuySig,nStopLevel4,getval(9)),9)
                              {Sätter ev. säljsignal}
                              nSellSignal=And(LT(C,getval(9)),nVal5BuySig)
                              {Lagra Sälj}
                              nStore22=retval(if(nSellSignal,L,getval(2)),2)
                              {Nolla Köp variab.}
                              nStore23=retval(if(nSellSignal,nZero,getval(3)),3)
                              nStore25=retval(if(nSellSignal,nZero,getval(5)),5)
                              nStore26=retval(if(nSellSignal,nZero,getval(6)),6)
                              {Ifall det skenar...}
                              nStore35=retval(if(LT(getval(9),MULT(nVal3BuyPrice,nLowPerc)),nZero,getval(5)),5)
                              {Lagra Sälj}
                              nStore28=retval(if(nSellSignal,nOne,getval(8)),8)
                              {Skriver ut graf och flagga}
                              draw(if(nVal5BuySig,getval(9),nZero),2,rqb)
                              Mult(getval(8),5)
                              )
                              Last edited by niclas_gbg; 2009-08-23, 17:54.
                              NiclasGBG

                              Comment

                              Working...
                              X