Allmänt meddelande

Collapse
No announcement yet.

Flytande stop loss - script

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

  • #31
    jag har testat/lekt och försökt att modifiera flytande stoploss scriptet som jag fick från Rikard men lyckas inte få signal i bänken. Har inte ändrat stoploss inställningarna så den är inte optimal i en strategi men den borde ändå ge en köpsignal, tycker jag. Mest troligt gör jag nått fel....
    Så här har jag modifierat:

    { Köp flytande Long mod }
    { 190730 }

    tid_innan_stäng:=4 { minuter innan stängning }
    max_spread_procent:=4 { max tillåten spread i procent }
    tidspärr1:=0.33 { minuter mellan orderförsök }
    målantal:=0 {tidigare ScrPar(2) och i indata script är värdet 0}
    stoppgräns1:=2 {tidigare ScrPar(1) men ville bara testa att lägga den i scriptet}
    { }

    i1(
    öppet=ge(mult(1440,sub(market(c),frac(d))),tid_innan_stäng)
    stoppgräns2=sub(1,div(abs(stoppgräns1),100))
    innehav=Portfolio(v)
    kl10=and(eqv(xtime(d,h),10),eqv(xtime(d,m),0)) {tidigare lt1=Lasttrade(B,D) men vill att denna ska köpa kl 10}


    minSedanKöp=Mult(Sub(d,kl10),1440) {tidigare var kl10=lt1}
    delay_ok=gt(minSedanKöp,tidspärr1)
    inpådagen=gt(frac(date()),0.376)
    spreadcheck1=lt(div(s,b),add(1,div(max_spread_procent,100)))
    spreadcheck2=and(and(spreadcheck1,gt(s,b)),gt(b,0))



    start=if(and(öppet,ge(d,kl10)),if(spreadcheck2,b,0),0)
    lookback=if(le(innehav,0),1000,20) {ändrat gt=le}
    maxhittills=hhv(start,lookback:1000)



    level1=Sub(maxhittills,stoppgräns1)
    level2=Mult(maxhittills,stoppgräns2)
    level3=if(lt(scrpar(1),0),level2,level1)



    flytstopp=Lt(b,level3)


    Draw(If(and(delay_ok,le(innehav,målantal)),level3,0),9,rqb) {ändrat gt=le}

    signal1=And(And(flytstopp,le(innehav,målantal)),le(innehav,0)) {ändrat gt=le}
    signal2=And(And(signal1,xor(stoppgräns1,0)),delay_ok)
    signal3=and(and(and(and(signal2,inpådagen),öppet),spreadcheck2),gt(b,0))


    Mult(signal3,10)
    )


    Kanske går det inte att byta ut Lasttrade(b,d) med kl10 utan måste returnera ett D värde.

    Tacksam för guidning, det är kul men svårt att bygga script har jag insett...

    Comment


    • #32
      Jag gjorde några förenklingar. Får sedan bygga på om konceptet är ok. Två saker kommer upp direkt. Jag har lagt in en spärr för en trade per dag, sista villkoret. Annars behövs ytterligare villkor/hantering av flera möjliga positioner per dag. Svårt att veta då ingen exit finns ännu. 1000 perioder används, det innebär att maxhittills kan innehålla värden från gårdagen. Kanske ok för dig. Du får titta om detta är något att bygga vidare på.



      tid_innan_stäng:=4
      tidspärr1:=0.33
      målantal:=0
      stoppgräns1:=-1

      i1(
      öppet=ge(mult(1440,sub(market(c),frac(d))),tid_innan_stäng)
      stoppgräns2=sub(1,div(abs(stoppgräns1),100))
      innehav=Portfolio(v)
      kl10=ge(mult(frac(d),1440),600)

      delay_ok=gt(mult(sub(d,lasttrade(b,d)),1440),tidspärr1) {bör vara date() om spärren är så liten}

      start=if(and(öppet,kl10),c,0)
      lookback=if(le(innehav,0),1000,20)
      maxhittills=hhv(start,lookback:1000)

      level1=Sub(maxhittills,stoppgräns1)
      level2=Mult(maxhittills,stoppgräns2)
      level3=if(lt(stoppgräns1,0),level2,level1)

      flytstopp=lt(c,level3)

      draw(if(kl10,level3,0),3,rqb)

      signal1=And(And(flytstopp,le(innehav,målantal)),le(innehav,0))
      signal2=and(And(And(signal1,xor(stoppgräns1,0)),delay_ok),kl10)
      signal3=and(and(signal2,öppet),gt(int(d),int(lasttrade(b,d))))
      draw(mult(signal3,10),4,gsbF)
      mult(signal3,10)
      )

      Comment


      • #33
        Ursprungligen postat av Henric Visa inlägg
        Jag gjorde några förenklingar. Får sedan bygga på om konceptet är ok. Två saker kommer upp direkt. Jag har lagt in en spärr för en trade per dag, sista villkoret. Annars behövs ytterligare villkor/hantering av flera möjliga positioner per dag. Svårt att veta då ingen exit finns ännu. 1000 perioder används, det innebär att maxhittills kan innehålla värden från gårdagen. Kanske ok för dig. Du får titta om detta är något att bygga vidare på.



        tid_innan_stäng:=4
        tidspärr1:=0.33
        målantal:=0
        stoppgräns1:=-1

        i1(
        öppet=ge(mult(1440,sub(market(c),frac(d))),tid_innan_stäng)
        stoppgräns2=sub(1,div(abs(stoppgräns1),100))
        innehav=Portfolio(v)
        kl10=ge(mult(frac(d),1440),600)

        delay_ok=gt(mult(sub(d,lasttrade(b,d)),1440),tidspärr1) {bör vara date() om spärren är så liten}

        start=if(and(öppet,kl10),c,0)
        lookback=if(le(innehav,0),1000,20)
        maxhittills=hhv(start,lookback:1000)

        level1=Sub(maxhittills,stoppgräns1)
        level2=Mult(maxhittills,stoppgräns2)
        level3=if(lt(stoppgräns1,0),level2,level1)

        flytstopp=lt(c,level3)

        draw(if(kl10,level3,0),3,rqb)

        signal1=And(And(flytstopp,le(innehav,målantal)),le(innehav,0))
        signal2=and(And(And(signal1,xor(stoppgräns1,0)),delay_ok),kl10)
        signal3=and(and(signal2,öppet),gt(int(d),int(lasttrade(b,d))))
        draw(mult(signal3,10),4,gsbF)
        mult(signal3,10)
        )
        Tack, testade denna i bänken men den ger ingen köpsignal men gissar att det beror på lasttrade i scripten då det inte finns några. Några förslag på vad som kan ersätta lasttrade så det triggas en signal? Find()?

        Comment


        • #34
          lasttrade är inget problem i detta fall. Jag får signal på index. Antingen inställning eller instrument som strular. Tänk på att det bara kan bli en signal då ingen exit finns.

          Comment


          • #35
            Ursprungligen postat av Henric Visa inlägg
            lasttrade är inget problem i detta fall. Jag får signal på index. Antingen inställning eller instrument som strular. Tänk på att det bara kan bli en signal då ingen exit finns.
            Du har helt rätt det funkar, får en köpsignal kl 10 och köp utförs i bänken. Jag var tvungen att starta om och gå igenom så allt såg rätt ut efter alla tester fram och tillbaka. Tack Henric

            Comment


            • #36
              Hej igen,
              Jag har nu kommit en bit på vägen men fastnat igen. Tyvärr glömde jag min dator med scriptet (frugan håller på att bli vansinnig ) men egentligen kan vi använda nedan script som Rikard gav till mig på en flytande stopploss.
              Så min fråga:
              Om jag vill att detta script nedan ska jobba tvärtemot, alltså signal om kursen går upp och ingen signal så länge kursen går ner vad ändrar jag? Jag har provat med negativt ScrPar(1) värde, lt till gt och vice versa hhv till llv osv i många olika versioner men inte lyckats. i mitt script som jag tyvärr glömt hemma har jag lyckats att justera så den ger signal om jag ej har innehav osv men köpen blir som en flytande stopploss i bänken vilket inte blir så bra affär .
              Hoppas jag gjorde detta någorlunda begripligt.
              Tack på förhand! Mvh Greger

              { Stoploss Mini Long mod }
              { 190725 }

              tid_innan_stäng:=4 { minuter innan stängning }
              max_spread_procent:=4 { max tillåten spread i procent }
              tidspärr1:=0.33 { minuter mellan orderförsök }
              { }
              i1(
              öppet=ge(mult(1440,sub(market(c),frac(d))),tid_innan_stäng)
              stoppgräns1=ScrPar(1)
              stoppgräns2=sub(1,div(abs(stoppgräns1),100))
              målantal=ScrPar(2)
              lastbuy=LastTrade(B,P)
              innehav=Portfolio(v)

              lt1=LastTrade(B,D)
              minSedanKöp=Mult(Sub(d,lt1),1440)
              delay_ok=gt(minSedanKöp,tidspärr1)
              inpådagen=gt(frac(date()),0.376)
              spreadcheck1=lt(div(s,b),add(1,div(max_spread_procent,100)))
              spreadcheck2=and(and(spreadcheck1,gt(s,b)),gt(b,0))

              start=if(and(öppet,ge(d,lasttrade(b,d))),if(spreadcheck2,b,0),0)
              lookback=if(gt(innehav,0),1000,20)
              maxhittills=hhv(start,lookback:1000)

              level1=Sub(maxhittills,stoppgräns1)
              level2=Mult(maxhittills,stoppgräns2)
              level3=if(lt(scrpar(1),0),level2,level1)

              flytstopp=Lt(b,level3)

              Draw(If(and(delay_ok,Gt(innehav,målantal)),level3,0),9,rqb)
              signal1=And(And(flytstopp,Gt(innehav,målantal)),Gt(innehav,0))
              signal2=And(And(signal1,xor(stoppgräns1,0)),delay_ok)
              signal3=and(and(and(and(signal2,inpådagen),öppet),spreadcheck2),gt(b,0))
              Mult(signal3,10)
              )

              Comment


              • #37
                Har du provat använda kommandot NOT? Du kan då vända på ett antagande så att det blir spegelvänt.

                http://www.autostock.se/NATscriptref/index.html?NOT___

                Sen bör du lämpligen lägga in ett villkor som blockar signal vid stillastående kurs OM du bara vill ha signal vid stigande kurs.

                Comment


                • #38
                  Med hänvisning till inlägg #36 blir det lite konstigt och svårbegripligt för mig. Vad menar du med signal. Trigger eller flytsopp, lång eller kort. Om det är lång som ska fungerar tvärtom är det ingen mening att använda detta script(vilket blir stoppen du vill ha). Om det är för blankningar borde det gå att vända på villkoren. Även ändra, lasttrade(b,x), innehav, etc. Tänk på att kursen aldrig kommer under nollvärdet i start som får ändras till något högre som kursen aldrig kan nå.

                  Comment


                  • #39
                    Jag ska försöka förklara vad jag vill åstadkomma.

                    1. Säljursen kl 9:05 är den kurs jag vill starta mot, om den stiger med 1% vill jag skapa en köpsignal, går den ner så vill jag följa den till den börja stiga. Exempel kl 9:05 säljkurs 100:00kr, 9:10 säljkurs 95:00 kr, 9:15 säljkurs 95:95 kr, då vill jag trigga en köpsignal eftersom den stigit med 1%
                    2. Sen går flytande stopp lossen in och säljer om den når villkoret, om inte säljer den 17:25 vare sig det är vinst eller ej så ingen position över natten.
                    3.Stopp lossen går in kl 12:00 och säljer för 98:00 då vill jag att steg 1 upprepas men med säljkursen vid det tillfället som affären gjordes alltså 98:00 kr kl 12:00, 12:05 säljkurs 97, 12.10 säljkurs 98, signal igen

                    Sen börjar den om dag 2, 9:05 osv

                    Så därför har jag modifierat flytande stop loss men eftersom den signalerar tvärtemot och jag har inte lyckats ändra villkoren som gör att den triggar "bakvänt"

                    Har testat och ändrat i:
                    Stoppgränsserna, maxhittills osv men får då inga signaler alls, jag får signaler då jag modifierat innehav osv men signalerna beter sig som en flytande stopp loss, som den ska men jag vill ändra den tvärtemot.
                    Hoppas det blev begripligt?

                    Comment


                    • #40
                      Då man börjar att scripta är det väldigt svårt att utgå från en idé och få till den direkt till 100%. Det är mycket enklare att börja med färdiga script och lära sig hur de fungera, hur man skall tolka varje rad, vad som händer då man modifierar dem.
                      Jag tycker att du skall börja med scripten i #27 som är ett triggerscript som köper då kursen dalar och går upp som du önskar.
                      #28 är ett Take Profit script som tar hem vinsten.
                      Du får göra ordermodeller på dessa script.

                      Scripten jobbar inte med procentsatser utan med vilken range max-min kurs som instrumentet hade föregående dag dvs vad man har att röra sig med.

                      mvh
                      Bertil

                      Comment


                      • #41
                        Att gå från 0 till 100% brukar vara svårt. Titta på färdiga script eller ta ett steg i taget. "Try an error" med lite hjälp på vägen kan fungera.

                        Här ett förslag på punkt 1 i inlägg #39. Om det är på rätt väg kan du själv prova att utveckla vidare.

                        reverse:=1.005 {här stiger 0,5%}
                        i1(
                        flytEntry1=and(eqv(int(d),int(const(d))),or(ge(xtime(d,h),10),ge(xtime(d,m),5)))
                        flytEntry2=mult(llv(if(flytEntry1,c,mult(h,2)),500),reverse)
                        draw(flytEntry2,3,rqb)
                        and(0,0)
                        )

                        Comment


                        • #42
                          Sedan måste man även göra en ordermodell som har detta script:

                          -----------------------------------

                          { Stäng köp innan stängning }
                          { ange antal minuter innan stängning du vill att scriptet ska slå till }
                          minuter:=5.25

                          stängning:=le(mult(1440,sub(market(c),frac(date()))),minuter)


                          i1(
                          signal=And(Gt(Portfolio(v),0),stängning)
                          Mult(signal,10)
                          )

                          -------------------------------------

                          I ordermodellen skall va) scriptet vara Allt innehav av aktuell aktie
                          VL) scriptet sätts lämpligen till Aktuell köpkurs -0.5%
                          Men om du simulerar mot index skall istället VL) scriptet vara Senast betalt

                          mvh
                          Bertil

                          Comment


                          • #43
                            Nu har jag gjort en körning med mina script med små justeringar från 2017-12-13 till 2019-08-01 på omxs30

                            Avkastning 293.68 kr 0.06% på 326 affärer under 1331:27:53 tim
                            Av dessa blankat 0 st med avkastning 0.00 kr 0.00%
                            Innehav 236 st med vinst 927.39 kr 0.25%
                            Innehav 90 st med förlust -633.71 kr -0.45%

                            mvh
                            Bertil

                            Comment

                            Working...
                            X