Allmänt meddelande

Collapse
No announcement yet.

Simulera flytande stoploss

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

  • #16
    Kul Berra! Ser riktigt bra ut, kanske bör prova på några fler terminer. Det stämmer att den första affären kan bli fel när stoppen räknar på ett värde som inte har med verkligheten att göra.

    För skarp körning är det bäst att skriva om stoppen så att den kollar innehav etc istället för att "gissa" om det finns ett innehav eller ej.

    { STOPLOSS }
    flytnivå:=0.99
    bakåt1:=480
    efterinköp=if(ge(d,lasttrade(b,d)),h,0)
    highlevelb=hhv(efterinköp,bakåt1)
    stoppok=gt(portfolio(v),0)
    stoppkurva=mult(highlevelb,flytnivå)
    stoppsälj=and(stoppok,le(l,stoppkurva))
    draw(if(stoppok,stoppkurva,0),2,rqb)
    mult(stoppsälj,25)

    Comment


    • #17
      Jag lade till några dagar för att se om det hände något på 26 dagar +303,75 och -136.25 =+167.50 på 20 affärer. Men 6/11 ger ett minus på -118.25 det är ju nästan hela minus posten på ett bräde varför 6 nov blir så konstig ?? Det var en jojo dag det är kanske felet.
      Berra

      Comment


      • #18
        Det låter skumt, den dagen kan omöjligt ge 118 pkt förlust. Har du laddat data från Kundservice för den dagen? Annars kan du ju prova det och ersätta just den dagen.

        Kolla i listan för avslut från Analysbänken vad som händer, om det är en position tagen dagen innan kanske eller liknande.

        Comment


        • #19
          2008-10-24 09:56:00 OMXS308L S 603,50 0,00 0,00 00:42:00
          2008-10-27 09:14:00 OMXS308L K 564,50 39,00 6,46 07:48:00
          2008-10-27 09:56:00 OMXS308L S 564,25 -0,25 -0,04 00:42:00
          2008-11-06 09:02:00 OMXS308L K 684,75 -120,50 -21,36 62:36:00
          2008-11-06 09:56:00 OMXS308L S 680,00 -4,75 -0,69 00:54:00
          2008-11-06 17:10:00 OMXS308L K 660,50 19,50 2,87 07:14:00

          Av någon konstig anledning gör den inte affärer mellan 27/10 och 6/11
          det är vädigt korsande med signalerna men det bord blivit någon förändring.
          Och från 9.56 står den kort i hela uppresan till den 6/11 lite pyrt men ?
          Berra

          Comment


          • #20
            Kort? Vi testar ju bara köp och stopploss nu, så den ska bara kunna hamna på noll eller i köp. Kolla så att du har valt rätt strategi i Analysbänken, Innehav - Kontant - Innehav

            Det borde göra susen.....

            Comment


            • #21
              Det fungerar men jag skall alltså använda 0,99 i flyt och 15 i limit ?
              Med blankning borde det gett minst det dubbla.

              Köpscript: sl) Omvänd Stoch/Bollspärr Köp
              kurva2:=20


              Säljscript: sl) Omvänd Stoch/Bollspärr Sälj
              kurva2:=70


              2008-11-13 15:29:00 OMXS308L K 641,00 31,75 4,72 22:44:00
              2008-11-14 14:19:00 OMXS308L S 641,75 0,75 0,12 07:20:00
              2008-11-18 16:28:00 OMXS308L K 631,25 10,50 1,64 19:09:00
              2008-11-19 10:15:00 OMXS308L S 610,25 -21,00 -3,33 02:17:00
              2008-11-20 17:28:00 OMXS308L K 592,25 18,00 2,95 15:43:00
              2008-11-21 13:59:00 OMXS308L S 581,50 -10,75 -1,82 05:01:00
              2008-11-24 10:28:00 OMXS308L K 589,25 -7,75 -1,33 04:59:00
              2008-11-11 09:45 - 2008-11-24 00:00 OMXS308L 2,95% 14:38:00 62:35:00 77:13:00 07:47:00 17,22 73,63 90,84 9,16
              --------------------------------
              Totalt Avkastning 21.50 kr 2.95% på 7 affärer under 77:13:00 timmar
              Av dessa blankat 4 st med avkastning 52.50 kr 7.97%
              Innehav 1 st med vinst 0.75 kr 0.12%
              Innehav 2 st med förlust -31.75 kr -5.14%
              Blankning 3 st med vinst 60.25 kr 9.31%
              Blankning 1 st med förlust -7.75 kr -1.33%

              Courtage 0.000% Blankning 0.000%

              2008-11-11 09:45 - 2008-11-24 16:59 OMXS308L 2.95% 14:38:00 62:35:00 77:13:00 07:47:00 17.22 73.63 90.84 9.16



              Köpscript: sl) Omvänd Stoch/Bollspärr Köp
              kurva2:=20


              Säljscript: sl) Flytande köpstopp inkl entry
              kurva2:=20
              flytnivå:=0,9900 {$opt(0,90,0,995,0,005)}
              nödstopp:=15,0000 {$opt(1,15,1)}
              bakåt1:=480


              2008-11-13 15:29:00 OMXS308L K 641,00 Innehav
              2008-11-13 15:41:00 OMXS308L S 638,75 -2,25 -0,35 00:12:00
              2008-11-13 16:28:00 OMXS308L K 642,00 Innehav
              2008-11-13 16:28:00 OMXS308L S 641,25 -0,75 -0,12 00:00:00
              2008-11-13 16:29:00 OMXS308L K 641,50 Innehav
              2008-11-14 09:29:00 OMXS308L S 655,00 13,50 2,10 01:30:00
              2008-11-18 16:28:00 OMXS308L K 631,25 Innehav
              2008-11-19 09:11:00 OMXS308L S 627,50 -3,75 -0,59 01:13:00
              2008-11-20 17:28:00 OMXS308L K 592,25 Innehav
              2008-11-20 17:28:00 OMXS308L S 591,75 -0,50 -0,08 00:00:00
              2008-11-21 10:29:00 OMXS308L K 592,25 Innehav
              2008-11-21 11:11:00 OMXS308L S 595,75 3,50 0,59 00:42:00
              2008-11-21 11:28:00 OMXS308L K 595,00 Innehav
              2008-11-21 11:53:00 OMXS308L S 591,25 -3,75 -0,63 00:25:00
              2008-11-24 10:28:00 OMXS308L K 589,25 Innehav
              2008-11-24 10:28:00 OMXS308L S 589,00 -0,25 -0,04 00:00:00
              2008-11-24 10:29:00 OMXS308L K 589,50 Innehav
              2008-11-24 15:22:00 OMXS308L S 599,50 10,00 1,70 04:53:00
              2008-11-24 15:29:00 OMXS308L K 600,50 Innehav
              2008-11-24 15:58:00 OMXS308L S 598,75 -1,75 -0,29 00:29:00
              2008-11-24 15:59:00 OMXS308L K 599,75 Innehav
              2008-11-24 16:19:00 OMXS308L S 605,25 5,50 0,92 00:20:00
              2008-11-24 16:28:00 OMXS308L K 608,75 Innehav
              2008-11-24 16:59:00 OMXS308L S 622,00 13,25 2,18 00:31:00
              2008-11-13 15:29 - 2008-11-24 00:00 OMXS308L 5,37% 10:15:00 00:00:00 10:15:00 57:45:00 15,07 0,00 15,07 84,93
              --------------------------------
              Totalt Avkastning 32.75 kr 5.37% på 12 affärer under 10:15:00 timmar
              Av dessa blankat 0 st med avkastning 0.00 kr 0.00%
              Innehav 5 st med vinst 45.75 kr 7.49%
              Innehav 7 st med förlust -13.00 kr -2.11%
              Blankning 0 st med vinst 0.00 kr 0.00%
              Blankning 0 st med förlust 0.00 kr 0.00%

              Courtage 0.000% Blankning 0.000%

              2008-11-13 15:29 - 2008-11-24 16:59 OMXS308L 5.37% 10:15:00 00:00:00 10:15:00 57:45:00 15.07

              Comment


              • #22
                Ursprungligen postat av Rikard Nilsson Visa inlägg
                Kul Berra! Ser riktigt bra ut, kanske bör prova på några fler terminer. Det stämmer att den första affären kan bli fel när stoppen räknar på ett värde som inte har med verkligheten att göra.

                För skarp körning är det bäst att skriva om stoppen så att den kollar innehav etc istället för att "gissa" om det finns ett innehav eller ej.

                { STOPLOSS }
                flytnivå:=0.99
                bakåt1:=480
                efterinköp=if(ge(d,lasttrade(b,d)),h,0)
                highlevelb=hhv(efterinköp,bakåt1)
                stoppok=gt(Gt(portfolio(v),0)
                stoppkurva=mult(highlevelb,flytnivå)
                stoppsälj=and(stoppok,le(l,stoppkurva))
                draw(if(stoppok,stoppkurva,0),2,rqb)
                mult(stoppsälj,25)
                Jag får error på detta

                Comment


                • #23
                  Det hade smugit sig in ett fel på en rad. Nedanstående funkar.

                  { STOPLOSS }
                  flytnivå:=0.99
                  bakåt1:=480
                  efterinköp=if(ge(d,lasttrade(b,d)),h,0)
                  highlevelb=hhv(efterinköp,bakåt1)
                  stoppok=gt(portfolio(v),0)
                  stoppkurva=mult(highlevelb,flytnivå)
                  stoppsälj=and(stoppok,le(l,stoppkurva))
                  draw(if(stoppok,stoppkurva,0),2,rqb)
                  mult(stoppsälj,25)

                  Vad menade du med 0.99 och 15 ? Optimerade värden?

                  Jag la dit så att Optimeringsbänken provar alla värden mellan 1 och 15 i steg om 1 för nödstoppen. Ingen aning om vilket som blir bäst.

                  Comment


                  • #24
                    Jag trodde att detta var det rekommenderade värdet, hur skall man få reda på vilket värde som är det optimala.
                    flytnivå:=0,9900 {$opt(0,90,0,995,0,005)}
                    nödstopp:=15,0000 {$opt(1,15,1)}

                    Comment


                    • #25
                      Nja, det är det som är finessen, man låter Optimeringbänken testa alla värdena inom det område man specat:

                      flytnivå:=0,9900 {$opt(0,90,0,995,0,005)} testa värden mellan 0.90-0.995 i steg om 0.005
                      nödstopp:=15,0000 {$opt(1,15,1)} testa alla värden mellan 1-15 i steg om 1

                      Det blir en ackumulerad avkastningskurva för varje kombination, dessa kan man bläddra igenom och se vilken som blev bäst. Värdena för just den kurvan syns nere till vänster.

                      Comment


                      • #26
                        Ursprungligen postat av Rikard Nilsson Visa inlägg
                        Det hade smugit sig in ett fel på en rad. Nedanstående funkar.

                        { STOPLOSS }
                        flytnivå:=0.99
                        bakåt1:=480
                        efterinköp=if(ge(d,lasttrade(b,d)),h,0)
                        highlevelb=hhv(efterinköp,bakåt1)
                        stoppok=gt(portfolio(v),0)
                        stoppkurva=mult(highlevelb,flytnivå)
                        stoppsälj=and(stoppok,le(l,stoppkurva))
                        draw(if(stoppok,stoppkurva,0),2,rqb)
                        mult(stoppsälj,25)

                        Vad menade du med 0.99 och 15 ? Optimerade värden?

                        Jag la dit så att Optimeringsbänken provar alla värden mellan 1 och 15 i steg om 1 för nödstoppen. Ingen aning om vilket som blir bäst.
                        När jag lägger in detta i en ordermodell och försöker ansluta kommer det upp att det redan är sant men jag köpte på 626,75 och linjen ser normal ut.

                        Comment


                        • #27
                          Här kommer "komplementära" script för att simulera både köpta och blankade positioner. Tanken är att man ska kunna köra så att man simulerar signal enligt följande:

                          Köp
                          Stoploss eller blankning
                          Blankning
                          Stoploss eller köp

                          I Analysbänken använder man alltså följande på köpsidan:


                          { 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)



                          .....följande på säljsidan:

                          { 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å:=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)


                          OBS! Viktigt att tänka på för att det ska fungera är att man väljder Handlarstrategi = Innehav - Kontant - Blankning - Kontant

                          Raden som börjar med "lagra" längst ner i stoplossen talar om för Analysbänken om det är en entry-signal eller exitsignal. Det beror i sin tur på om det är stoppen som löst eller motsatta entryscriptet som vill ta position.


                          En annan väldigt viktig sak: Om man ändrar något i köp- resp blankscripten måste man göra exakt samma ändringar i motsatta stoppen, så att alla entryscript alltid ser likadana ut. Annars får man fel resultat i backtestingen. Däremot går det fint att tex optimera fram olika stoplossparametrar för köp- och säljsidan.


                          Attached Files

                          Comment


                          • #28
                            Ursprungligen postat av Rikard Nilsson Visa inlägg
                            Lägger upp ett par exempel på hur resultat från Optimeringsbänken presenteras grafiskt. Här är ett par månaders simulering från ABB där flytnivåerna för stoploss optimerats individuellt för köp- och blanksidan. Ena bilden visar samtliga avkastningsgrafer ( i det här fallet 56 körningar), mest för att man ska få en uppfattning om spridningen som parametrarna ger. Genom att hålla nere Ctrl kan man bläddra bland de olika körningarnas unika avkastningsgrafer med Pil upp och Pil ner. Samtidigt syns aktuella parametervärden för just den körningen, och körningens löpnummer. Den totala avkastningen ligger längst upp till höger i det här fallet, där kurvan slutar.

                            Ganska kraftfullt!

                            Det har var otroligt bra! Inte fel att se det grafiskt och samtidigt kunna se inställningarna som varit!

                            Blir lite mycket att ge igenom ibland bara, plus att en del kombinationer inte är användbara.
                            "Nothing noble is done without risk." - André Gide

                            Comment


                            • #29
                              Intressant det här med flytande stoploss, speciellt om man på ett rättvisande sätt kan bakåttesta. Har ju tidigare mixtrat lite med stoploss och har lite frågor för att uppdatera mig.

                              1.
                              Stoplossen i denna tråd använder sig ju av minnesreferenser, men används de på rätt sätt? Har för mig att jag läst att de ska eller bör vara inom intradayklammer? Vad gäller? Olika regler vid simulering och skarp körning?
                              Mitt köpscript i sig självt kräver minnesreferenser för att funka. Stoplossen jag jobbat med likaså. När köpscriptet klistras in i Stoplossen blir det rätt många, finns det nån begränsning där?

                              2.
                              Visst är det så att avkastningskurvan (med animering på) och dess redovisade affärer visar det "sanna" resultatet. Det visuella stoppkurvorna man ser när scriptet är påkopplat i Fx dialogen blir väl inte riktigt sant eftersom de signaler som kommit inom stapeln, men ej vid fullbordad, inte syns? Köpkursen, som kurvan ritar utifrån, är väl också stapelns slutkurs, hänsyn tas väl inte till var inom stapeln köpet verkligen skett?

                              3.
                              Kan man använda tidsscript enligt nedan i köpscriptet när det bakas in i stoploss för simulering?

                              tid1:=10 {minuter på morgonen innnan signal tillåts}
                              tid2:=10 {minuter innan stängning då signal inte tillåts}
                              morgon:=mult(frac(Market(o)),1440)
                              inom1:=GE(mult(frac(date()),1440),add(morgon,tid1))
                              kväll:=mult(Market(c),1440)
                              inom2:=LE(mult(frac(date()),1440),sub(kväll,tid2))
                              orderok:=And(inom1,inom2)
                              {ger sant om tidsintervallet är inom det godkända området}

                              4.
                              Bra med ett skal 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?
                              Skulle dock vilja kunna köra "Blanka - Kontant - Blanka" separat i analysbänken också! Är det något som skulle gå att ordna?
                              Kunde man göra nåt med "Innehav - Kontant - Innehav" och alltså försöka uppnå så stor "förlust" som möjligt? Hur i såna fall?

                              5.
                              Mitt köpscript arbetar i i60(). Vid simulering med stoploss så arbetar ju även den i i60(). Antar att detta gör att jag inte helt rättvist kan simulera mina script såsom det skulle ha agerat skarpt?
                              Så här menar jag:
                              Har en rätt tajt absolut stoppnivå under köpkursen som ofta kan lösa ut kort efter köp, alltså ofta i samma stapel som köpet skedde i. Om jag minns rätt så är det inte förrän stapeln efter köp som stoplossen kickar in?
                              Kan man i såna fall komma runt detta på nåt sätt?

                              Mvh Emil

                              Comment


                              • #30
                                Kul med lite rejäla inlägg i forumet!

                                Då ska vi se:

                                1.
                                Stoplossen i denna tråd använder sig ju av minnesreferenser, men används de på rätt sätt? Har för mig att jag läst att de ska eller bör vara inom intradayklammer? Vad gäller? Olika regler vid simulering och skarp körning?
                                Mitt köpscript i sig självt kräver minnesreferenser för att funka. Stoplossen jag jobbat med likaså. När köpscriptet klistras in i Stoplossen blir det rätt många, finns det nån begränsning där?

                                Svar: Minnesreferenser behöver inte ligga inom intraday-prefix, men däremot är det viktigt att de ligger samlade. Dvs, det får inte finnas tilldelade namn nedanför den första minnesreferensen. Så om du har script med minnesrefar måste stoppens tilldelade namn flyttas upp så att de ligger ovanför. Det är samma regler vid simulering och skarp körning. Begränsningen är 512 minnesrefar i samma script, så det ska inte vara några problem.


                                2.
                                Visst är det så att avkastningskurvan (med animering på) och dess redovisade affärer visar det "sanna" resultatet. Det visuella stoppkurvorna man ser när scriptet är påkopplat i Fx dialogen blir väl inte riktigt sant eftersom de signaler som kommit inom stapeln, men ej vid fullbordad, inte syns? Köpkursen, som kurvan ritar utifrån, är väl också stapelns slutkurs, hänsyn tas väl inte till var inom stapeln köpet verkligen skett?

                                Svar: Om man simulerar med Animering påkopplad får man värdet från den minut då signalen löste ut, så det blir väldigt likt verkligheten.

                                3.
                                Kan man använda tidsscript enligt nedan i köpscriptet när det bakas in i stoploss för simulering?

                                tid1:=10 {minuter på morgonen innnan signal tillåts}
                                tid2:=10 {minuter innan stängning då signal inte tillåts}
                                morgon:=mult(frac(Market(o)),1440)
                                inom1:=GE(mult(frac(date()),1440),add(morgon,tid1))
                                kväll:=mult(Market(c),1440)
                                inom2:=LE(mult(frac(date()),1440),sub(kväll,tid2))
                                orderok:=And(inom1,inom2)
                                {ger sant om tidsintervallet är inom det godkända området}

                                Svar: Absolut, det går fint att simulera minutfilter.


                                4.
                                Bra med ett skal 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?
                                Skulle dock vilja kunna köra "Blanka - Kontant - Blanka" separat i analysbänken också! Är det något som skulle gå att ordna?
                                Kunde man göra nåt med "Innehav - Kontant - Innehav" och alltså försöka uppnå så stor "förlust" som möjligt? Hur i såna fall?

                                Svar: Att simulera endast blankning - kontant - blankning görs bäst som du beskriver, leta efter största förlust i Innehav - kontant - Innehav. I princip tror jag det är bättre att simulera "ena sidan" åt gången, alltså inte köra både köp och blankning i samma simulering. Det är väldigt lätt att gå i någon fälla eftersom simuleringsmiljön blir ganska komplex. Lägg hellre Köp-script som entry, och blankscript eller stoploss som villkor för exit. Alltså, gör vanlig exit till "kontant" om blankscriptet eller stoppen löser. Och vice versa för blanksidan. Då gör man två enklare simuleringar och det är bara att addera ihop resultatet efter.



                                5.
                                Mitt köpscript arbetar i i60(). Vid simulering med stoploss så arbetar ju även den i i60(). Antar att detta gör att jag inte helt rättvist kan simulera mina script såsom det skulle ha agerat skarpt?
                                Så här menar jag:
                                Har en rätt tajt absolut stoppnivå under köpkursen som ofta kan lösa ut kort efter köp, alltså ofta i samma stapel som köpet skedde i. Om jag minns rätt så är det inte förrän stapeln efter köp som stoplossen kickar in?
                                Kan man i såna fall komma runt detta på nåt sätt?

                                Svar: Här har du en poäng! Det stämmer att stoppen inte bevakar "signalperioden", så om det är väldigt nära till stoppnivå kan man få felvisande resultat just i den perioden. Finns ingen enkel lösning på det, utan man får kolla misstänkta situationer manuellt.

                                Comment

                                Working...
                                X