Allmänt meddelande

Collapse
No announcement yet.

Studsa - att ta fram en daytradingstrategi

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

  • Studsa - att ta fram en daytradingstrategi

    Halloj!
    Idag öppnade börsen över 2 procent minus så då kan det ha sina fördelar att daytrada jämfört med att ligga felpositionerad.
    I tråden Flytande stop loss - script hjälpte jag greolo (Greger) att ta fram triggerscript för att köpa på uppstuds.
    I denna tråd presenterar jag hela strategin.

    Strategin fungerar på många instrument och ger jämn vinst över tid, men antalet affärer är högt i förhållande till vinsten. I mina simuleringar nedan så har jag simulerat från 2017-12-13 till 2019-08-01 på index utan spread eller courtage.

    Mot OMXS30
    Avkastning 512.02 kr 0.03% på 934 affärer under 1186:00:03 tim
    Av dessa blankat 473 st med avkastning 186.47 kr 0.03%
    Innehav 257 st med vinst 896.21 kr 0.22%
    Innehav 204 st med förlust -570.66 kr -0.18%
    Blankning 219 st med vinst 646.06 kr 0.19%
    Blankning 254 st med förlust -459.59 kr -0.12%

    Mot DAX
    Avkastning 2465.06 kr 0.01% på 1713 affärer under 2099:01:54 tim
    Av dessa blankat 813 st med avkastning 2012.81 kr 0.02%
    Innehav 448 st med vinst 10397.41 kr 0.19%
    Innehav 452 st med förlust -9945.16 kr -0.18%
    Blankning 297 st med vinst 10083.73 kr 0.28%
    Blankning 516 st med förlust -8070.92 kr -0.13%

    mvh
    Bertil
    Attached Files
    Last edited by Bertil; 2019-08-02, 08:41.

  • #2
    { Studsa köp }
    { 190809 }
    innehav:=Portfolio(v)
    ok_att_handla:=Eqv(innehav,0)
    { OBS funkar på alla instrument }
    triggvinst:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),8.1)
    stoppgränsa:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),12)
    maxis:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),2)

    step1:=5
    step2:=82

    tidspärr1:=510
    lt1:=LastTrade(B,D)
    minSedanKöp:=Mult(Sub(Date(),lt1),1440)
    delay_ok:=gt(minSedanKöp,tidspärr1)


    i1(
    tid1=gt(int(mult(frac(d),1440)),600)
    tid2=lt(int(mult(frac(d),1440)),900)

    perioder01=Sub(int(mult(frac(d),1440)),542)

    antal02=sum(if(ge(c,aref(c,1)),1,-1),perioder01:510)

    maxhittills=hhv(H,perioder01:510)
    Tidpunktmax=hhvbars(H,perioder01:510)

    minhittills=Llv(L,tidpunktmax)
    högstav=Sub(maxhittills,minhittills)

    stoppgräns3=ADD(Div(Sub(högstav,triggvinst),2),stoppgränsa)
    stoppgräns2=IF(GE(stoppgräns3,maxis),maxis,stoppgräns3)
    stoppgräns1=IF(GE(stoppgräns2,stoppgränsa),stoppgräns2,stoppgränsa)

    tillåt=ge(högstav,triggvinst)
    level1=Add(minhittills,stoppgräns1)
    villkor006=Gt(div(sub(cmpref(H,1,a),cmpref(L,1,a)),cmpref(L,1,a)),0.003)
    villkor007=And(Gt(cmpref(c,0,a),cmpref(L,1,a)),Gt(cmpref(c,0,a),cmpref(L,1,a)))
    Villkor98=Not(or(EQV(DayOfWeek(),5),EQV(DayOfWeek(),5)))
    villkor010=And(Ge(antal02,-4),Lt(antal02,10))

    { kurva01=median(c,perioder01:510)
    draw(kurva01,1,kqb0)
    villkor011=or(and(Gt(c,kurva01),Gt(antal02,0)),and(Lt(c,kurva01),Lt(antal02,0))) }

    hjälp01=div(sub(c,aref(c,step1)),step1)
    signum=if(gt(hjälp01,0),1,-1)
    hjälp02=mult(mult(hjälp01,hjälp01),signum)
    kurva44=add(sum(hjälp01,step2),c)
    villkor130=And(Gt(sub(kurva44,c),-0.2),Lt(sub(kurva44,c),9))


    köpa=And(And(And(And(Ge(c,level1),tillåt),villkor006),villkor010),villkor130)
    ditt_köpscript=And(And(And(köpa,tid1),tid2),delay_ok)
    köpsignal=And(ditt_köpscript,ok_att_handla)
    setGVarif(antal02,4600,köpsignal)
    setGVarif(kurva01,4602,köpsignal)
    setGVarif(sub(kurva44,c),4603,köpsignal)
    Mult(köpsignal,25)
    )

    {@A(0,)}
    Last edited by Bertil; 2019-08-09, 18:14.

    Comment


    • #3
      { Studsa köp vänd }
      { 190808 }
      innehav:=Portfolio(v)
      ok_att_handla:=Lt(innehav,0)
      { OBS funkar på alla instrument }
      triggvinst:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),8)
      stoppgränsa:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),12)
      maxis:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),2)

      step1:=5
      step2:=82

      tidspärr1:=10
      lt1:=LastTrade(S,D)
      minSedanSälj:=Int(Mult(Sub(Date(),lt1),1440))
      delay_ok:=gt(minSedanSälj,tidspärr1)


      i1(
      tid1=gt(int(mult(frac(d),1440)),550)
      tid2=lt(int(mult(frac(d),1440)),1020)

      perioder01=Sub(int(mult(frac(d),1440)),542)
      perioder02=int(mult(frac(sub(d,lasttrade(s,d))),1440))
      antal02=sum(if(ge(c,aref(c,1)),1,-1),perioder02:510)

      minförstahittills=LLv(L,perioder01)
      Tidpunktförstamin=LLvbars(L,perioder01)


      { start=if(ge(d,LastTrade(s,d)),H,0)
      maxhittills=HHv(start,510)
      Tidpunktmax=hhvbars(start,510) }

      maxhittills=HHv(H,perioder01)
      Tidpunktmax=hhvbars(H,perioder01)


      minhittills=Llv(L,tidpunktmax)
      högstav=Sub(maxhittills,minhittills)

      stoppgräns3=ADD(Div(Sub(högstav,triggvinst),2),stoppgränsa)
      stoppgräns2=IF(GE(stoppgräns3,maxis),maxis,stoppgräns3)
      stoppgräns1=IF(GE(stoppgräns2,stoppgränsa),stoppgräns2,stoppgränsa)

      tillåt=ge(högstav,triggvinst)
      level1=Add(minhittills,stoppgräns1)
      villkor006=Gt(div(sub(cmpref(H,1,a),cmpref(L,1,a)),cmpref(L,1,a)),0.003)
      villkor007=And(Gt(cmpref(c,0,a),cmpref(L,1,a)),Gt(cmpref(c,0,a),cmpref(L,1,a)))
      Villkor98=Not(or(EQV(DayOfWeek(),1),EQV(DayOfWeek(),5)))
      antal03=Sub(GetGVar(4601),antal02)
      villkor010=And(And(Ge(antal02,-11),Lt(antal02,29)),Gt(abs(antal03),2))
      { kurva01=median(c,perioder02:510)
      villkor011=or(and(Gt(c,kurva01),Gt(antal03,0)),and(Lt(c,kurva01),Lt(antal03,0)))
      villkor012=and(Lt(sub(LastTrade(s,p),c),0),Gt(sub(LastTrade(s,p),c),-2))
      villkor013=if(villkor012,villkor011,1) }

      hjälp01=div(sub(c,aref(c,step1)),step1)
      signum=if(gt(hjälp01,0),1,-1)
      hjälp02=mult(mult(hjälp01,hjälp01),signum)
      kurva44=add(sum(hjälp01,step2),c)
      villkor130=And(Gt(sub(kurva44,c),5),Lt(sub(kurva44,c),6))

      köpa=And(And(And(And(Ge(c,level1),tillåt),villkor006),villkor010),villkor130)
      ditt_köpscript=And(And(And(köpa,tid1),tid2),delay_ok)
      köpsignal=And(ditt_köpscript,ok_att_handla)
      setGVarif(antal03,4600,köpsignal)
      setGVarif(antal02,4602,köpsignal)
      setGVarif(sub(kurva44,c),4603,köpsignal)
      Mult(köpsignal,25)
      )

      {@A(0,)}
      Last edited by Bertil; 2019-08-09, 18:14.

      Comment


      • #4
        { Studsa sälj }
        { 190809 }
        innehav:=Portfolio(v)
        ok_att_handla:=Eqv(innehav,0)
        { OBS funkar på alla instrument }
        triggvinst:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),4)
        stoppgränsa:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),12)
        maxis:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),2)

        step1:=5
        step2:=75

        tidspärr1:=510
        lt1:=LastTrade(B,D)
        minSedanKöp:=Mult(Sub(Date(),lt1),1440)
        delay_ok:=gt(minSedanKöp,tidspärr1)


        i1(
        tid1=gt(int(mult(frac(d),1440)),550)
        tid2=lt(int(mult(frac(d),1440)),850)

        perioder01=Sub(int(mult(frac(d),1440)),542)

        antal02=sum(if(ge(c,aref(c,1)),1,-1),perioder01:510)


        minhittills=LLv(L,perioder01)
        Tidpunktmin=LLvbars(L,perioder01)

        maxhittills=HHv(H,tidpunktmin)
        högstav=Sub(maxhittills,minhittills)

        stoppgräns3=ADD(Div(Sub(högstav,triggvinst),2),stoppgränsa)
        stoppgräns2=IF(GE(stoppgräns3,maxis),maxis,stoppgräns3)
        stoppgräns1=IF(GE(stoppgräns2,stoppgränsa),stoppgräns2,stoppgränsa)

        tillåt=ge(högstav,triggvinst)
        level1=Sub(maxhittills,stoppgräns1)
        villkor006=Gt(div(sub(cmpref(H,1,a),cmpref(L,1,a)),cmpref(L,1,a)),0.003)
        villkor007=And(Gt(cmpref(c,0,a),cmpref(L,1,a)),Gt(cmpref(c,0,a),cmpref(L,1,a)))
        villkor010=And(Le(antal02,5),Gt(antal02,-10))
        { kurva01=median(c,perioder01:510)
        villkor011=or(and(Gt(c,kurva01),Gt(antal02,0)),and(Lt(c,kurva01),Lt(antal02,0))) }

        hjälp01=div(sub(c,aref(c,step1)),step1)
        signum=if(gt(hjälp01,0),1,-1)
        hjälp02=mult(mult(hjälp01,hjälp01),signum)
        kurva44=add(sum(hjälp01,step2),c)
        villkor130=And(Lt(sub(kurva44,c),-1.8),Gt(sub(kurva44,c),-5))

        Villkor98=Not(or(EQV(DayOfWeek(),1),EQV(DayOfWeek(),5)))

        draw(minhittills,3,kqb0)
        draw(maxhittills,2,rqb0)


        sälja=And(And(And(And(And(Le(c,level1),tillåt),villkor006),villkor98),villkor010),villkor130)
        ditt_säljscript=And(And(And(sälja,tid1),tid2),delay_ok)
        säljsignal=And(ditt_säljscript,ok_att_handla)
        SetGVarIf(antal02,4601,säljsignal)
        setGVarif(kurva01,4602,säljsignal)
        setGVarif(sub(kurva44,c),4603,säljsignal)
        Mult(säljsignal,25)
        )

        {@A(0,)}
        Last edited by Bertil; 2019-08-09, 18:15.

        Comment


        • #5
          {Studsa sälj vänd }
          { 190808 }
          innehav:=Portfolio(v)
          ok_att_handla:=Gt(innehav,0)
          { OBS funkar på alla instrument }
          statistik:=div(add(sub(cmpref(H,1,a),cmpref(L,1,a)),sub(cmpref(H,2,a),cmpref(L,2,a))),2)
          { triggvinst:=div(statistik,4)
          stoppgränsa:=div(statistik,12) }

          triggvinst:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),4)
          stoppgränsa:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),12)

          maxis:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),2)

          step1:=5
          step2:=81

          tidspärr1:=10
          lt1:=LastTrade(B,D)
          minSedanKöp:=Mult(Sub(Date(),lt1),1440)
          delay_ok:=gt(minSedanKöp,tidspärr1)


          i1(
          tid1=gt(int(mult(frac(d),1440)),550)
          tid2=lt(int(mult(frac(d),1440)),960)

          perioder01=Sub(int(mult(frac(d),1440)),542)
          perioder02=int(mult(frac(sub(d,lasttrade(b,d))),1440))
          antal02=sum(if(ge(c,aref(c,1)),1,-1),perioder02:510)

          { maxförstahittills=HHv(H,perioder01)
          Tidpunktförstamax=HHvbars(H,perioder01)
          minhittills=LLv(L,Tidpunktförstamax)
          Tidpunktmin=LLvbars(L,Tidpunktförstamax) }


          start=if(ge(d,LastTrade(b,d)),L,99999)
          minhittills=LLv(start,510)
          Tidpunktmin=hhvbars(start,510)


          maxhittills=HHv(H,tidpunktmin)
          högstav=Sub(maxhittills,minhittills)

          stoppgräns3=ADD(Div(Sub(högstav,triggvinst),2),stoppgränsa)
          stoppgräns2=IF(GE(stoppgräns3,maxis),maxis,stoppgräns3)
          stoppgräns1=IF(GE(stoppgräns2,stoppgränsa),stoppgräns2,stoppgränsa)

          antal03=Sub(GetGVar(4600),antal02)

          tillåt=ge(högstav,triggvinst)
          level1=Sub(maxhittills,stoppgräns1)
          villkor006=Gt(div(sub(cmpref(H,1,a),cmpref(L,1,a)),cmpref(L,1,a)),0.003)
          villkor007=And(Gt(cmpref(c,0,a),cmpref(L,1,a)),Gt(cmpref(c,0,a),cmpref(L,1,a)))
          villkor010=And(Gt(abs(antal03),2),Gt(antal03,-16))
          { kurva01=median(c,perioder02:510)
          villkor011=or(and(Gt(c,kurva01),Gt(antal03,0)),and(Lt(c,kurva01),Lt(antal03,0)))
          villkor012=and(Lt(sub(c,LastTrade(b,p)),0),Gt(sub(c,LastTrade(b,p)),-2))
          villkor013=if(villkor012,villkor011,1) }

          hjälp01=div(sub(c,aref(c,step1)),step1)
          signum=if(gt(hjälp01,0),1,-1)
          hjälp02=mult(mult(hjälp01,hjälp01),signum)
          kurva44=add(sum(hjälp01,step2),c)
          villkor130=And(Lt(sub(kurva44,c),-2.5),Gt(sub(kurva44,c),-7.8))


          Villkor98=Not(or(EQV(DayOfWeek(),1),EQV(DayOfWeek(),5)))

          draw(minhittills,3,kqb0)
          draw(maxhittills,2,rqb0)


          sälja=And(And(And(And(Le(c,level1),tillåt),villkor006),villkor010),villkor130)
          ditt_säljscript=And(And(And(sälja,tid1),tid2),delay_ok)
          säljsignal=And(ditt_säljscript,ok_att_handla)
          SetGVarIf(antal03,4601,säljsignal)
          setGVarif(kurva01,4602,säljsignal)
          setGVarif(sub(kurva44,c),4603,säljsignal)
          Mult(säljsignal,25)
          )

          {@A(0,)}
          Last edited by Bertil; 2019-08-08, 20:52.

          Comment


          • #6
            { TP kort }
            { 190730 }
            innehav:=Portfolio(v)
            ok_att_handla:=Lt(innehav,0)

            { triggvinst:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),5)
            stoppgränsa:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),11)
            maxis:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),1) }

            steg04:=Mult(Div(c,1600),6)
            steg05:=Mult(Div(c,1600),2)
            steg06:=Mult(Div(c,1600),6)
            triggvinst:=steg04
            stoppgränsa:=steg05
            maxis:=steg06



            tidspärr1:=1

            Lastsell:=LastTrade(S,P)
            lt1:=LastTrade(S,D)
            minSedanKöp:=Mult(Sub(Date(),lt1),1440)
            delay_ok:=gt(minSedanKöp,tidspärr1)



            i1(
            tid1=gt(int(mult(frac(d),1440)),550)
            tid2=lt(int(mult(frac(d),1440)),1035)


            start=if(ge(d,LastTrade(s,d)),c,9999)
            minhittills=Llv(start,510)
            högstav=Sub(lastsell,minhittills)

            stoppgräns3=ADD(Div(Sub(högstav,triggvinst),2),stoppgränsa)
            stoppgräns2=IF(GE(stoppgräns3,maxis),maxis,stoppgräns3)
            stoppgräns1=IF(GE(stoppgräns2,stoppgränsa),stoppgräns2,stoppgränsa)

            tillåt=ge(högstav,triggvinst)
            level1=Add(minhittills,stoppgräns1)

            Förlust=Gt(sub(c,Lastsell),maxis)

            köpa=or(And(Le(c,level1),tillåt),0)

            ditt_köpscript=And(And(And(köpa,tid1),tid2),delay_ok)
            köpsignal=And(ditt_köpscript,ok_att_handla)

            Mult(köpsignal,25)
            )

            {@A(0,)}
            Last edited by Bertil; 2019-08-03, 13:39.

            Comment


            • #7
              { Studsa TP lång }
              { 190730 }

              innehav:=Portfolio(v)
              ok_att_handla:=Gt(innehav,0)

              { triggvinst:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),5)
              stoppgränsa:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),11)
              maxis:=div(sub(cmpref(H,1,a),cmpref(L,1,a)),2) }

              steg04:=Mult(Div(c,1600),7)
              steg05:=Mult(Div(c,1600),2)
              steg06:=Mult(Div(c,1600),6)
              triggvinst:=steg04
              stoppgränsa:=steg05
              maxis:=steg06


              tidspärr1:=1

              Lastbuy:=LastTrade(B,P)
              lt1:=LastTrade(B,D)
              minSedanKöp:=Mult(Sub(Date(),lt1),1440)
              delay_ok:=gt(minSedanKöp,tidspärr1)



              i1(
              tid1=gt(int(mult(frac(d),1440)),550)
              tid2=lt(int(mult(frac(d),1440)),1035)


              start=if(ge(d,LastTrade(b,d)),c,0)
              maxhittills=hhv(start,510)
              högstav=Sub(maxhittills,lastbuy)

              stoppgräns3=ADD(Div(Sub(högstav,triggvinst),2),stoppgränsa)
              stoppgräns2=IF(GE(stoppgräns3,maxis),maxis,stoppgräns3)
              stoppgräns1=IF(GE(stoppgräns2,stoppgränsa),stoppgräns2,stoppgränsa)

              tillåt=ge(högstav,triggvinst)
              level1=Sub(maxhittills,stoppgräns1)

              Förlust=Gt(sub(Lastbuy,c),maxis)

              sälja=or(And(Le(c,level1),tillåt),0)

              ditt_säljscript=And(And(And(sälja,tid1),tid2),delay_ok)
              säljsignal=And(ditt_säljscript,ok_att_handla)

              Mult(säljsignal,25)
              )

              {@A(0,)}
              Last edited by Bertil; 2019-08-03, 13:38.

              Comment


              • #8
                { 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)
                )

                Comment


                • #9
                  { Cover blankning 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(Lt(Portfolio(v),0),stängning)
                  Mult(signal,10)
                  )

                  Comment


                  • #10
                    Har du simulerat inkl spread? Har du testat mot terminen om det ger liknande resultat?

                    Comment


                    • #11
                      Ursprungligen postat av walle Visa inlägg
                      Har du simulerat inkl spread? Har du testat mot terminen om det ger liknande resultat?
                      Om man räknar med en spread på 0.6 punkter per affär så blir vinsten väldigt liten. Nix har inte testat mot terminen.
                      Tänkte att någon annan här på forumet kanske kunde vara intresserad att testa strategin och komma med förbättringsförslag.
                      Hela strategin är som sagt en spinn off av Gregers önskemål i en annan tråd.
                      mvh
                      Bertil

                      Comment


                      • #12
                        Gött initiativ Jag personligen hade försökt att stretcha villkoren kanske och få ned antalet affärer. Rent spontant alltså utan att ens att kikat igenom logiken.

                        Comment


                        • #13
                          Ursprungligen postat av walle Visa inlägg
                          Gött initiativ Jag personligen hade försökt att stretcha villkoren kanske och få ned antalet affärer. Rent spontant alltså utan att ens att kikat igenom logiken.
                          Har nog redan gjort ett 20 tal körningar med lite olika värden på villkoren.
                          Behövs nog lite andra villkor, typ något medelvärde som man måste vara en viss bit under för att kunna studsa upp. Det här spända gummibandet som Tobbe Rosén brukar tala om. Du får gärna testa!
                          mvh
                          Bertil

                          Comment


                          • #14
                            Fina jämna kurvor, men kanske en för låg avg-trade för att kunna köra den skarpt med slipp/spread/courtage ?

                            Återkopplar med simulering på måndag, då jag moddat den på samma sätt som trendig och simulerat för att mäta cagr, dd och tid i marknaden.

                            En tanke är att ändra bet-size beroende på volla. Om avg-trade är större under vissa förhållanden. Tex vid volla > X, eller stigande volla.
                            Short-modellerna brukar kunna må bra av högre volla, (tex i Galaxy) så går säkert att testa lite filter för att få upp resultatet.

                            Comment


                            • #15
                              OBS! Har ändrat TP lång och TP kort till absoluta värden. Det förbättrar vinsten.

                              Avkastning 283.81 kr 0.01% på 1248 affärer under 1661:29:23 tim
                              Av dessa blankat 625 st med avkastning 66.03 kr 0.01%
                              Innehav 322 st med vinst 1031.48 kr 0.20%
                              Innehav 301 st med förlust -813.70 kr -0.17%
                              Blankning 214 st med vinst 847.72 kr 0.25%
                              Blankning 411 st med förlust -781.69 kr -0.12%
                              Har tagit bort 0.30 kr per avslut.

                              mvh
                              Bertil

                              Comment

                              Working...
                              X