Allmänt meddelande

Collapse
No announcement yet.

Simulera flytande stoploss

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

  • #31
    Tack för svaret! Tänkte att du skulle få lite rejäla inlägg så du får göra rätt för serviceavtalsavgiften...

    4.
    Skalet för "Innehav - Kontant - Blankning - Kontant".
    Klarar det av om signalerna blir i annan ordning t.ex "Innehav - Kontant - Innehav - Kontant - Blankning" o.s.v? Eller kan det bara simulera enligt ordningen "Innehav - Kontant - Blankning - Kontant"?

    Mvh Emil

    Comment


    • #32
      Vad är det som är fel?

      Rikard jag har försökt att ändra och lägga in mina script men det är fel någonstans det första köpscriptet är så som du ändrade det och det har fungerat men jag försökte ändra blank så som du ändrat i köp och nu är det error i båda, ser du vad som är fel?
      Om det nu skulle se väldigt bra ut med dessa, vad ska ändras för att köras skarpt mot NN?


      { DITT KÖPSCRIPT }
      oscillator:=Osc(c,3,20,s)
      oscupp:=Lt(HhvBars(oscillator,2),1)
      momentum:=Mo(14)
      momupp:=Lt(HhvBars(momentum,2),1)
      ejlång:=Le(Portfolio(v),0)
      släpporder:=Eqv(GetGVar(500),0)
      köp1:=And(And(And(oscupp,momupp),ejlång),släpporder)

      {Minutfilter}
      tidnu:=Frac(DATE())
      totalt:=Mult(tidnu,1440)
      rest:=Int(Mod(totalt,60))
      tidsignal:={Gt(rest,55)}1
      draw(mult(köp,20),3,gsbF)
      köpentry:=And(köp1,tidsignal)

      { DITT BLANKSCRIPT }
      oscillator:=Osc(c,3,20,s)
      oscner:=Lt(LlvBars(oscillator,2),1)
      momentum:=Mo(14)
      momner:=Lt(LlvBars(momentum,2),1)
      ejkort:=Ge(Portfolio(v),0)
      släpporder:=Eqv(GetGVar(500),0)
      blank1:=And(And(And(oscner,momner),ejkort),släpporder)

      {Minutfilter}
      tidnu:=Frac(DATE())
      totalt:=Mult(tidnu,1440)
      rest:=Int(Mod(totalt,90))
      tidsignal:{=Gt(rest,85)}1
      draw(mult(blank,20),3,rsbF)
      blankentry:=and(blank1,tidsignal)

      { STOPLOSS }
      flytnivå:=1.05 {$opt(1.01,1.08,0.01)}
      bakåt1:=480
      lasttrades=Retval(if(And(blankentry,or(ge(getval(3),getval(4)),eqv(getval(3),0))),D,Getval(4)),4)
      efterblank=if(ge(d,getval(4)),l,9999)
      lowlevels=llv(efterblank,bakåt1)
      stoppok=gt(getval(4),getval(3))
      blankpris=find(And(ge(d,getval(4)),lt(ref(d,1),getval(4))),bakåt1,c,1)
      stoppkurva=mult(lowlevels,flytnivå)
      stoppcover=and(stoppok,ge(h,stoppkurva))
      lasttradek=Retval(if(And(Or(köpentry,stoppcover),gt(getval(4),getval(3))),D,Getval(3)),3)
      draw(if(stoppok,stoppkurva,9999),2,gqb)
      lagra=RetVal(if(köpentry,1,0),1)
      mult(Or(köpentry,stoppcover),25)

      { DITT KÖPSCRIPT }
      oscillator:=Osc(c,3,20,s)
      oscupp:=Lt(HhvBars(oscillator,2),1)
      momentum:=Mo(14)
      momupp:=Lt(HhvBars(momentum,2),1)
      ejlång:=Le(Portfolio(v),0)
      släpporder:=Eqv(GetGVar(500),0)
      köp1:=And(And(And(oscupp,momupp),ejlång),släpporder)

      {Minutfilter}
      tidnu:=Frac(DATE())
      totalt:=Mult(tidnu,1440)
      rest:=Int(Mod(totalt,60))
      tidsignal:={Gt(rest,55)}1
      draw(mult(köp,20),3,gsbF)
      köpentry:=And(köp1,tidsignal)

      { DITT BLANKSCRIPT }
      oscillator:=Osc(c,3,20,s)
      oscner:=Lt(LlvBars(oscillator,2),1)
      momentum:=Mo(14)
      momner:=Lt(LlvBars(momentum,2),1)
      ejkort:=Ge(Portfolio(v),0)
      släpporder:=Eqv(GetGVar(500),0)
      blank1:=And(And(And(oscner,momner),ejkort),släpporder)

      {Minutfilter}
      tidnu:=Frac(DATE())
      totalt:=Mult(tidnu,1440)
      rest:=Int(Mod(totalt,90))
      tidsignal:{=Gt(rest,85)}1
      draw(mult(blank,20),3,rsbF)
      blankentry:=and(blank1,tidsignal)

      { STOPLOSS }
      flytnivå:=0.95 {$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(Or(blankentry,stoppsälj),gt(getval(3),getval(4))),D,Getval(4)),4)
      draw(if(stoppok,stoppkurva,0),2,rqb)
      lagra=RetVal(if(blankentry,1,0),1)
      mult(Or(blankentry,stoppsälj),25)

      Berra

      Comment


      • #33
        Lite problem eftersom samma variabelnamn förekommer flera gånger, man måste rensa bort andra definitionen av tex "tidsignal", annars får kompilatorn krupp.

        Alla variabler som förekommer två gånger bör döpas om så att det blir unika namn.

        Vidare blev parentesdjupet 11 nivåer som värst, och därför flyttade jag ner köpentry och blankentry till den punkten där de kan räknas som minnesreferenser istället för tilldelade namn. Då gick det igenom utan problem:

        { DITT KÖPSCRIPT }
        oscillator:=Osc(c,3,20,s)
        oscupp:=Lt(HhvBars(oscillator,2),1)
        momentum:=Mo(14)
        momupp:=Lt(HhvBars(momentum,2),1)
        ejlång:=Le(Portfolio(v),0)
        släpporder1:=Eqv(GetGVar(500),0)
        köp1:=And(And(And(oscupp,momupp),ejlång),släpporder1)

        {Minutfilter}
        tidnu:=Frac(DATE())
        totalt:=Mult(tidnu,1440)
        rest:=Int(Mod(totalt,60))
        tidsignal:={Gt(rest,55)}1
        {draw(mult(köp,20),3,gsbF)}


        { DITT BLANKSCRIPT }
        {oscillator:=Osc(c,3,20,s)}
        oscner:=Lt(LlvBars(oscillator,2),1)
        {momentum:=Mo(14)}
        momner:=Lt(LlvBars(momentum,2),1)
        ejkort:=Ge(Portfolio(v),0)
        släpporder2:=Eqv(GetGVar(500),0)
        blank1:=And(And(And(oscner,momner),ejkort),släpporder2)

        {draw(mult(blank,20),3,rsbF)}


        { STOPLOSS }
        flytnivå:=1.05 {$opt(1.01,1.08,0.01)}
        bakåt1:=480
        köpentry=And(köp1,tidsignal)
        blankentry=and(blank1,tidsignal)
        lasttrades=Retval(if(And(blankentry,or(ge(getval(3),getval(4)),eqv(getval(3),0))),D,Getval(4)),4)
        efterblank=if(ge(d,getval(4)),l,9999)
        lowlevels=llv(efterblank,bakåt1)
        stoppok=gt(getval(4),getval(3))
        blankpris=find(And(ge(d,getval(4)),lt(ref(d,1),getval(4))),bakåt1,c,1)
        stoppkurva=mult(lowlevels,flytnivå)
        stoppcover=and(stoppok,ge(h,stoppkurva))
        lasttradek=Retval(if(And(Or(köpentry,stoppcover),gt(getval(4),getval(3))),D,Getval(3)),3)
        draw(if(stoppok,stoppkurva,9999),2,gqb)
        lagra=RetVal(if(köpentry,1,0),1)
        mult(Or(köpentry,stoppcover),25)


        Och för säljsidan:

        { DITT KÖPSCRIPT }
        oscillator:=Osc(c,3,20,s)
        oscupp:=Lt(HhvBars(oscillator,2),1)
        momentum:=Mo(14)
        momupp:=Lt(HhvBars(momentum,2),1)
        ejlång:=Le(Portfolio(v),0)
        släpporder:=Eqv(GetGVar(500),0)
        köp1:=And(And(And(oscupp,momupp),ejlång),släpporder)

        {Minutfilter}
        tidnu:=Frac(DATE())
        totalt:=Mult(tidnu,1440)
        rest:=Int(Mod(totalt,60))
        tidsignal:={Gt(rest,55)}1
        draw(mult(köp,20),3,gsbF)


        { DITT BLANKSCRIPT }
        {oscillator:=Osc(c,3,20,s)}
        oscner:=Lt(LlvBars(oscillator,2),1)
        {momentum:=Mo(14)}
        momner:=Lt(LlvBars(momentum,2),1)
        ejkort:=Ge(Portfolio(v),0)
        {släpporder:=Eqv(GetGVar(500),0)}
        blank1:=And(And(And(oscner,momner),ejkort),släpporder)



        { STOPLOSS }
        flytnivå:=0.95 {$opt(0.92,0.99,0.01)}
        bakåt1:=480
        köpentry=And(köp1,tidsignal)
        blankentry=and(blank1,tidsignal)
        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(Or(blankentry,stoppsälj),gt(getval(3),getval(4))),D,Getval(4)),4)
        draw(if(stoppok,stoppkurva,0),2,rqb)
        lagra=RetVal(if(blankentry,1,0),1)
        mult(Or(blankentry,stoppsälj),25)

        Comment


        • #34
          Oj Rikard nu är vi något på spåren, Tack

          Har testat 20 dagar bakåtoch fick ett kanon res speciellt 25 i nov som var en katastrofdag som en jojo. Vad måste ändras för att köra mot NN? Jag ska även testa med lite andra stopploss tider.

          Köpscript: sl) Flytande köpstopp inkl entry
          tidsignal:={Gt(rest,55)}1
          flytnivå:=1,0800 {$opt(1,01,1,08,0,01)}
          bakåt1:=480


          Säljscript: sl) Flytande säljstopp pls entry
          tidsignal:={Gt(rest,55)}1
          flytnivå:=0,9800 {$opt(0,92,0,99,0,01)}
          bakåt1:=480


          --------------------------------
          Totalt Avkastning 143.00 pt 22.57% på 84 affärer under 159:29:00 timmar
          Av dessa blankat 42 st med avkastning 41.75 pt 6.29%
          Innehav 18 st med vinst 198.50 pt 31.78%
          Innehav 24 st med förlust -97.25 pt -15.50%
          Blankning 17 st med vinst 142.75 pt 22.42%
          Blankning 25 st med förlust -101.00 pt -16.13%

          Courtage 0.000% Blankning 0.000%

          Berra

          Comment


          • #35
            ...ner som en pankaka

            Hej Rikard
            Jag har testkört flytstopp köp o sälj men resultatet om det nu går att lita på är nedslående
            i +6,75 j -58,75 k -318,75 L+48,75 FÖFÄRLIGT.
            Jag har gjort såhär jag har tagit ex. OMXS308i backat så jag fått fram tiden juli-aug i day-fönstret laddat scripten kört bänken med optimering och fått ut detta resultatet. Är det rätt att göra så?

            /Berra
            Berra

            Comment


            • #36
              Jag tror vi ska vara försiktiga med "dubbelsidig" simulering, det är bättre att backtesta varje halva för sig. Då kan man vara ganska säker på att resultatet stämmer.

              Comment


              • #37
                innebär det då

                att köra blank för sig och låta köp vara tom och tvärt om för köp?
                och hur bedömer jag om det ska vara 1,08 eller någon av de andra möjliga procentsatserna, är det som står på första raderna att tyda till det som optimerats fram som bäst?
                Berra

                Comment


                • #38
                  Njä, tanken var alltså att låta köpsidan bestå av ditt köpscript endast. Säljsidan består av stoplossen plus säljscriptet, men man väljer strategi Innehav - Kontant - innehav, så får man bara exit när stoppen eller blankscriptet slår till, inte blankning.

                  Då kan man testa köp - exit som det blir i verkligeten. Det blir bara 1 parameter att optimera i stoppen, och möjligen en i blankscriptet. men jag skulle nog börjat med bara flytnivån i optimeringen.

                  Comment


                  • #39
                    Nya "problem"... Nu vart parentesdjup/tilldelade namn för mycket tillsammans med stoppen. Försökt ta bort kollon men efter det fungerar inte stoppen. Kan man inte göra så eller vad är fel?
                    "Nothing noble is done without risk." - André Gide

                    Comment


                    • #40
                      Svårt att säga vad som är fel utan att se scripten, men generellt är det man behöver tänka på att alla minnesreferenser (utan kolon alltså) ska vara samlade i en klump. Man får alltså inte ha minnesreferenser och därefter stoppa in något tilldelat namn mitt ibland dessa.

                      Om du inte vill skylta med scripten på forumet går det ju fint att maila mig så kan jag rätta dem.

                      Comment


                      • #41
                        Förstår inte hur sista raden fungerar "mult(Or(köpentry,stoppcover),25)". I den första utgåvan kollades att senaste entry var av rätt typ ,köp eller sälj, och därmed inga falska signaler. Fungerar det med köpentry här?

                        { DITT KÖPSCRIPT }
                        m1:=mov(c,5,s)
                        m2:=Mov(c,100,e)
                        stigande:=gt(m1,aref(m1,3))
                        köpentry:=and(cross(m1,m2),stigande)

                        { DITT BLANKSCRIPT }
                        {m1:=mov(c,5,s)}
                        {m2:=Mov(c,100,e)}
                        fallande:=Lt(m1,aref(m1,3))
                        blankentry:=and(cross(m1,m2),fallande)

                        { STOPLOSS }
                        flytnivå:=1.05 {$opt(1.01,1.08,0.01)}
                        bakåt1:=480
                        lasttrades=Retval(if(And(blankentry,or(ge(getval(3),getval(4)),eqv(getval(3),0))),D,Getval(4)),4)
                        efterblank=if(ge(d,getval(4)),l,9999)
                        lowlevels=llv(efterblank,bakåt1)
                        stoppok=gt(getval(4),getval(3))
                        blankpris=find(And(ge(d,getval(4)),lt(ref(d,1),getval(4))),bakåt1,c,1)
                        stoppkurva=mult(lowlevels,flytnivå)
                        stoppcover=and(stoppok,ge(h,stoppkurva))
                        lasttradek=Retval(if(And(Or(köpentry,stoppcover),gt(getval(4),getval(3))),D,Getval(3)),3)
                        draw(if(stoppok,stoppkurva,9999),2,gqb)
                        lagra=RetVal(if(köpentry,1,0),1)
                        mult(Or(köpentry,stoppcover),25)

                        Comment


                        • #42
                          Tanken är i det här fallet att man simulerar vad som händer med blankade positioner antingen om den flytande stoplossen löser ut (stoppcover) eller om man får en köpsignal. En köpsignal stänger blankningen i den här simuleringen (köpentry).

                          Comment

                          Working...
                          X