Allmänt meddelande

Collapse
No announcement yet.

Fusion MultiStrategy

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

  • Fusion MultiStrategy

    Har meckat vidare för att få ordning på positionsbyten så snyggt som möjligt, nu vägs positionen från Legato och Coda ihop så att simuleringen kan hamna på -2 indexandelar om båda ligger Shrt, -1 om den ena är Shrt och den andra exit, noll om båda är exit eller om de går åt varsitt håll. Det blir +1 om ena ligger Long och andra exit, och +2 om båda ligger Long. Strategierna ligger i samma script, så nu finns bara ett Long och ett Shrt-script för index. Varje strategis position lagras i en global cell, och de adderas ihop för att ett par minuter innan stängning ta position. Det som återstår är att fixa slavmodellerna, men nu går det i alla fall att simulera på index. Notera också hur avkastningsgrafens branthet blir en funktion av vollan....

    Scripten ser ut så här just nu:


    { Fusion OMX index long 160414 }

    $par1:=10 {0-30}
    dagar:=20
    advance:=5
    pred1=find(lt(d,sub(const(d),30)),25,c,1)
    pred2=find(lt(d,sub(const(d),60)),50,c,1)
    pred3=find(lt(d,sub(const(d),90)),75,c,1)
    pred4=find(lt(d,sub(const(d),120)),100,c,1)
    pred5=find(lt(d,sub(const(d),150)),125,c,1)

    steg=sub(23,mx(mn(advance,22),1))
    år2=aref(c,236)
    år3=aref(c,476)
    år4=aref(c,729)
    år5=aref(c,982)
    år6=aref(c,1234)
    medel=mov(aref(div(add(add(add(add(år2,år3),år4),år5),år6),6),steg:22),5,s)
    pred_tot=aref(div(add(pred1,add(pred2,add(pred3,add(pred4,pred5)))),5),mx(1,$par1):35)

    p1=gt(roc(add(medel,pred_tot),5,%),0)

    v2=and(lt(dayofmonth(),if(p1,19,14)),gt(dayofmonth(),if(p1,7,6)))
    v4=and(lt(dayofmonth(),if(p1,32,31)),gt(dayofmonth(),if(p1,19,27)))

    stängning=le(mult(1440,sub(market(c),frac(date()))),10)
    öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
    dagen_efter=gt(int(d),lasttrade(s,d))
    hist=sub(macd2(n),macd2(t))
    extremt=lt(hist,-5)

    ma100=mov(c,150,s)
    över=or(extremt,gt(c,ma100))
    longL1a=and(and(lt(c,hhv(aref(c,1),2)),v2),över)
    longL1b=and(lt(c,hhv(aref(c,1),3)),v4)
    longL2=and(or(longL1a,longL1b),le(getgvar(854),0))
    longL3=and(and(longL2,and(öppet,stängning)),dagen_efter)
    setgvarif(1,854,longL3)


    måndag=eqv(dayofweek(),1)
    tisdag=eqv(dayofweek(),2)
    ej_fredag=lt(dayofweek(),5)
    under=lt(c,mov(c,100,s))
    days=if(under,6,3)
    köpC1=and(måndag,lt(l,llv(aref(l,1),2)))
    köpC2=and(tisdag,lt(l,llv(aref(l,1),2)))
    köpC3=and(or(or(köpC1,köpC2),and(lt(l,llv(aref(l,1),days:10)),ej_fredag)),le(innehavC,0))
    köpC4=and(and(köpC3,and(öppet,stängning)),dagen_efter)
    setgvarif(1,855,köpC4)

    lägsta=llv(aref(c,1),dagar)
    stoploss=gt(c,add(lasttrade(s,p),mult(3,atr(10))))

    coverL1=lt(c,lägsta)
    coverL2=and(or(stoploss,coverL1),and(or(stoploss,stängning),öppet))
    coverL3=and(coverL2,lt(getgvar(855),0))

    setgvarif(0,854,coverL3)
    setgvarif(0,855,coverL3)

    fusion_pos=add(getgvar(854),getgvar(855))
    trade_time=le(mult(1440,sub(market(c),frac(date()))),7)
    and(lt(portfolio(v),fusion_pos),trade_time)





    { Fusion OMX index shrt 160414 }

    $par1:=10 {0-30}
    advance:=5
    pred1=find(lt(d,sub(const(d),30)),25,c,1)
    pred2=find(lt(d,sub(const(d),60)),50,c,1)
    pred3=find(lt(d,sub(const(d),90)),75,c,1)
    pred4=find(lt(d,sub(const(d),120)),100,c,1)
    pred5=find(lt(d,sub(const(d),150)),125,c,1)

    steg=sub(23,mx(mn(advance,22),1))
    år2=aref(c,236)
    år3=aref(c,476)
    år4=aref(c,729)
    år5=aref(c,982)
    år6=aref(c,1234)
    medel=mov(aref(div(add(add(add(add(år2,år3),år4),år5),år6),6),steg:22),5,s)
    pred_tot=aref(div(add(pred1,add(pred2,add(pred3,add(pred4,pred5)))),5),mx(1,$par1):35)

    p1=lt(roc(add(medel,pred_tot),5,%),0)

    v1=or(lt(dayofmonth(),if(p1,8,7)),gt(dayofmonth(),if(p1,30,31)))
    v3=and(lt(dayofmonth(),if(p1,23,20)),gt(dayofmonth(),if(p1,10,13)))

    stängning=le(mult(1440,sub(market(c),frac(date()))),8)
    öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
    dagen_efter=gt(int(d),lasttrade(b,d))

    ma200=mov(c,200,s)
    under=lt(c,ma200)
    ej_extremt=gt(macd2(n),-50)

    shrtL1=and(lt(c,aref(c,1)),under)
    shrtL2=and(and(and(shrtL1,or(v1,v3)),ge(innehavL,0)),ej_extremt)
    shrtL3=and(and(shrtL2,and(öppet,stängning)),dagen_efter)
    setgvarif(-1,854,shrtL3)

    ej_onsdag=not(eqv(dayofweek(),3))
    shrtC1=and(ej_onsdag,gt(c,hhv(aref(c,1),2)))
    shrtC2=and(shrtC1,lt(c,mov(c,150,s)))
    shrtC3=and(shrtC2,ge(getgvar(855),0))
    shrtC4=and(and(shrtC3,and(öppet,stängning)),dagen_efter)
    setgvarif(-1,855,shrtC4)

    ve1=or(lt(dayofmonth(),if(p1,8,6)),gt(dayofmonth(),if(p1,31,30)))
    ve3=and(lt(dayofmonth(),if(p1,18,22)),gt(dayofmonth(),if(p1,17,17)))
    lägre=lt(c,aref(c,1))
    rättd=ge(dayofweek(),2)
    stoploss=lt(c,sub(lasttrade(b,p),mult(3,atr(10))))
    sellL1=lt(c,llv(aref(c,1),2))
    sellL2=and(and(sellL1,or(stoploss,or(ve1,ve3))),gt(getgvar(854),0))
    sellL3=and(and(and(sellL2,and(or(lägre,stängning),öppet)),rättd),dagen_efter)
    setgvarif(0,854,sellL3)

    xhi=hhv(aref(c,1),2)
    ma1=mov(c,100,s)
    high=and(gt(c,xhi),lt(c,ma1))
    fredag=eqv(dayofweek(),5)
    säljC1=or(stoploss,or(high,fredag))
    säljC2=and(säljC1,gt(getgvar(855),0))
    säljC3=and(and(säljC2,and(öppet,stängning)),dagen_efter)
    setgvarif(0,855,säljC3)

    fusion_pos=add(getgvar(855),getgvar(854))
    trade_time=le(mult(1440,sub(market(c),frac(date()))),7)
    and(gt(portfolio(v),fusion_pos),trade_time)
    Attached Files

  • #2
    Modellen är inte en kombination av två oberoende modeller då exit, lasttrade, etc blir beroende av varandra. Det kanske är bättre. Jag har tidigare kört en oberoende. Den är dock utan hävstång. Jag ska jämföra nästa vecka. Även för att jämföra mot singelmodellerna borde analysen ske utan hävstång, dvs varje modell har en vikt om 0,5.
    Inget fel i sig att analysera med häv. Sedan beror det på vad man är ute efter genom att köra en kombo.

    Edit: InnehavC är inte definierad, men kanske inte påverkar?
    Last edited by Henric; 2016-04-16, 11:09.

    Comment


    • #3
      Lite sent igår så säkert en del buggar,

      Comment


      • #4
        Då har jag analyserat resultatfilen i inlägg 1. Jag har räknat på handel med minifutures (eller motsvarande), gearing 3x och 0,25% i spread och slippage per position (entry+exit). Respektive modell handlar med 50% så att full exponering nås då båda modellerna tar position i samma riktning.

        CAGR 85%

        Average drawdown -9,9%

        Top-10 drawdowns
        Drawdown 1 -39,5%
        Drawdown 2 -30,3%
        Drawdown 3 -28,5%
        Drawdown 4 -28,3%
        Drawdown 5 -26,5%
        Drawdown 6 -24,4%
        Drawdown 7 -23,6%
        Drawdown 8 -21,5%
        Drawdown 9 -19,8%
        Drawdown 10 -17,1%
        Attached Files
        Last edited by Christer; 2016-04-19, 08:43.

        Comment


        • #5
          Rättat felen med odefinierade varabler, det påverkade faktiskt inte av någon anledning. Lagt till utkast på kod för simulering med återinvestering. Får en del konstiga avslut så något är nog fel, det blir 1-2 andelar som handlas ibland. Kontovärdet sätts i cell 856 när inget innehav finns, så slipper man böket med att beräkna värdet på testkonto vid blankade positioner osv.





          { Fusion OMX index long 160414 }

          $par1:=10 {0-30}
          dagar:=20
          advance:=5
          pred1=find(lt(d,sub(const(d),30)),25,c,1)
          pred2=find(lt(d,sub(const(d),60)),50,c,1)
          pred3=find(lt(d,sub(const(d),90)),75,c,1)
          pred4=find(lt(d,sub(const(d),120)),100,c,1)
          pred5=find(lt(d,sub(const(d),150)),125,c,1)

          steg=sub(23,mx(mn(advance,22),1))
          år2=aref(c,236)
          år3=aref(c,476)
          år4=aref(c,729)
          år5=aref(c,982)
          år6=aref(c,1234)
          medel=mov(aref(div(add(add(add(add(år2,år3),år4),år5),år6),6),steg:22),5,s)
          pred_tot=aref(div(add(pred1,add(pred2,add(pred3,add(pred4,pred5)))),5),mx(1,$par1):35)

          p1=gt(roc(add(medel,pred_tot),5,%),0)

          v2=and(lt(dayofmonth(),if(p1,19,14)),gt(dayofmonth(),if(p1,7,6)))
          v4=and(lt(dayofmonth(),if(p1,32,31)),gt(dayofmonth(),if(p1,19,27)))

          stängning=le(mult(1440,sub(market(c),frac(date()))),10)
          öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
          dagen_efter=gt(int(d),lasttrade(s,d))
          trade_time=le(mult(1440,sub(market(c),frac(date()))),7)
          hist=sub(macd2(n),macd2(t))
          extremt=lt(hist,-5)

          ma100=mov(c,150,s)
          över=or(extremt,gt(c,ma100))
          longL1a=and(and(lt(c,hhv(aref(c,1),2)),v2),över)
          longL1b=and(lt(c,hhv(aref(c,1),3)),v4)
          longL2=and(or(longL1a,longL1b),le(getgvar(854),0))
          longL3=and(and(longL2,and(öppet,stängning)),dagen_efter)
          setgvarif(1,854,longL3)


          måndag=eqv(dayofweek(),1)
          tisdag=eqv(dayofweek(),2)
          ej_fredag=lt(dayofweek(),5)
          under=lt(c,mov(c,100,s))
          days=if(under,6,3)
          köpC1=and(måndag,lt(l,llv(aref(l,1),2)))
          köpC2=and(tisdag,lt(l,llv(aref(l,1),2)))
          köpC3=and(or(or(köpC1,köpC2),and(lt(l,llv(aref(l,1),days:10)),ej_fredag)),le(getgvar(855),0))
          köpC4=and(and(köpC3,and(öppet,stängning)),dagen_efter)
          setgvarif(1,855,köpC4)

          lägsta=llv(aref(c,1),dagar)
          stoploss=gt(c,add(lasttrade(s,p),mult(3,atr(10))))

          coverL1=lt(c,lägsta)
          coverL2=and(or(stoploss,coverL1),and(or(stoploss,stängning),öppet))
          coverL3=and(coverL2,lt(getgvar(855),0))

          setgvarif(0,854,coverL3)
          setgvarif(0,855,coverL3)
          setgvarif(cash(n),856,eqv(portfolio(v),0))

          fusion_pos=add(getgvar(854),getgvar(855))

          konto=getgvar(856)
          maxantal=div(konto,c)
          målantal=int(mult(div(fusion_pos,2),maxantal))

          and(lt(mult(0.7,portfolio(v)),målantal),trade_time)





          { Fusion OMX index shrt 160414 }

          $par1:=10 {0-30}
          advance:=5
          pred1=find(lt(d,sub(const(d),30)),25,c,1)
          pred2=find(lt(d,sub(const(d),60)),50,c,1)
          pred3=find(lt(d,sub(const(d),90)),75,c,1)
          pred4=find(lt(d,sub(const(d),120)),100,c,1)
          pred5=find(lt(d,sub(const(d),150)),125,c,1)

          steg=sub(23,mx(mn(advance,22),1))
          år2=aref(c,236)
          år3=aref(c,476)
          år4=aref(c,729)
          år5=aref(c,982)
          år6=aref(c,1234)
          medel=mov(aref(div(add(add(add(add(år2,år3),år4),år5),år6),6),steg:22),5,s)
          pred_tot=aref(div(add(pred1,add(pred2,add(pred3,add(pred4,pred5)))),5),mx(1,$par1):35)

          p1=lt(roc(add(medel,pred_tot),5,%),0)

          v1=or(lt(dayofmonth(),if(p1,8,7)),gt(dayofmonth(),if(p1,30,31)))
          v3=and(lt(dayofmonth(),if(p1,23,20)),gt(dayofmonth(),if(p1,10,13)))

          stängning=le(mult(1440,sub(market(c),frac(date()))),8)
          öppet=ge(mult(1440,sub(market(c),frac(date()))),6)
          dagen_efter=gt(int(d),lasttrade(b,d))
          trade_time=le(mult(1440,sub(market(c),frac(date()))),7)

          ma200=mov(c,200,s)
          under=lt(c,ma200)
          ej_extremt=gt(macd2(n),-50)

          shrtL1=and(lt(c,aref(c,1)),under)
          shrtL2=and(and(and(shrtL1,or(v1,v3)),ge(getgvar(854),0)),ej_extremt)
          shrtL3=and(and(shrtL2,and(öppet,stängning)),dagen_efter)
          setgvarif(-1,854,shrtL3)

          ej_onsdag=not(eqv(dayofweek(),3))
          shrtC1=and(ej_onsdag,gt(c,hhv(aref(c,1),2)))
          shrtC2=and(shrtC1,lt(c,mov(c,150,s)))
          shrtC3=and(shrtC2,ge(getgvar(855),0))
          shrtC4=and(and(shrtC3,and(öppet,stängning)),dagen_efter)
          setgvarif(-1,855,shrtC4)

          ve1=or(lt(dayofmonth(),if(p1,8,6)),gt(dayofmonth(),if(p1,31,30)))
          ve3=and(lt(dayofmonth(),if(p1,18,22)),gt(dayofmonth(),if(p1,17,17)))
          lägre=lt(c,aref(c,1))
          rättd=ge(dayofweek(),2)
          stoploss=lt(c,sub(lasttrade(b,p),mult(3,atr(10))))
          sellL1=lt(c,llv(aref(c,1),2))
          sellL2=and(and(sellL1,or(stoploss,or(ve1,ve3))),gt(getgvar(854),0))
          sellL3=and(and(and(sellL2,and(or(lägre,stängning),öppet)),rättd),dagen_efter)
          setgvarif(0,854,sellL3)

          xhi=hhv(aref(c,1),2)
          ma1=mov(c,100,s)
          high=and(gt(c,xhi),lt(c,ma1))
          fredag=eqv(dayofweek(),5)
          säljC1=or(stoploss,or(high,fredag))
          säljC2=and(säljC1,gt(getgvar(855),0))
          säljC3=and(and(säljC2,and(öppet,stängning)),dagen_efter)
          setgvarif(0,855,säljC3)

          fusion_pos=add(getgvar(855),getgvar(854))

          konto=getgvar(856)
          maxantal=div(konto,c)
          målantal=int(mult(div(fusion_pos,2),maxantal))
          and(gt(portfolio(v),mult(1.5,målantal)),trade_time)




          Antalscript:

          i1(
          fusion_pos=add(getgvar(855),getgvar(854))
          konto=getgvar(856)
          maxantal=div(konto,c)
          målantal=int(mult(div(fusion_pos,2),maxantal))
          sub(målantal,portfolio(v))
          )



          i1(
          fusion_pos=add(getgvar(855),getgvar(854))
          konto=getgvar(856)
          maxantal=div(konto,c)
          målantal=int(mult(div(fusion_pos,2),maxantal))

          sub(portfolio(v),målantal)
          )

          Comment


          • #6
            Har lagt Fusion-innehållet i en egen tråd. Här är senaste simuleringen, nu gjord med 5 sek-animering för exaktast möjliga resultat.

            Avkastning 5934.70 kr 0.73% på 797 affärer under 21627:38:41 tim
            Av dessa blankat 217 st med avkastning 2035.69 kr 0.93%
            Innehav 376 st med vinst 7821.02 kr 2.08%
            Innehav 204 st med förlust -3922.01 kr -1.84%
            Blankning 154 st med vinst 2922.64 kr 1.90%
            Blankning 63 st med förlust -886.95 kr -1.36%

            Attached Files
            Last edited by Rikard Autostock; 2016-04-17, 18:39.

            Comment


            • #7
              Jag tror det går att få bort situationer då endast några få andelar handlas. Detta genom att bara handla då summan av strategierna ändras. Dessutom blir det lite fel då konto bara sätts vid cash(a)=0. Strategin kan gå från tex 100% till 50% ganska länge. Då endast index analyseras brukar jag simulera konto med add(cash(t),mult(portfolio(v),c))

              Comment


              • #8
                Jo det går säkert att fixa, jag får inte det problemet när jag simulerar 1 "kontrakt" per strategi. Hade varit kul att se din variant! Jag förenklade stoppen tex.

                Last edited by Rikard Autostock; 2016-04-17, 21:24.

                Comment


                • #9
                  Mitt upplägg behåller de enskilda ordermodellerna och en fördel är att det går att få samma signaler som originalmodellerna. Vet ej om resultatet blir bättre eller sämre. Jag har testat och gjort lite ändringar och måste ladda originalet och kopiera in. Kör nästa vecka.

                  Edit: Det är uppenbart att coda historiskt har presterat bättre när det är volatilt och bearmarket och samtidigt har Legato störst drawdown när det är volatilt. Jag labbar med en switch så att endast en modell signalerar. Det blir ju inte multistrategi med dess fördelar, men bättre resultat.
                  Last edited by Henric; 2016-04-17, 20:55.

                  Comment


                  • #10
                    Intressant! Jag är inne på att låta vollan styra parameterinställningen för Coda, så kanske man kan vässa den under lugnare perioder. En variant är att kanske väga in även Crescendo, så har man tre delstrategier i helt olika tidsperspektiv.

                    Comment


                    • #11
                      Är det inte bättre att ha Coda på ett simuleringskonto och Legato på ett annat simuleringskonto. Sedan simulerar man mot index, terminen eller annat instrument på ett tredje simuleringskonto. Gör man så blir det ju mycket enklare att ändra i modellerna. Antag tex att man vill lägga till en Take Profit på Coda men inte på Legato, går ju inte om man gör en Fusion.

                      Med vänlig hälsning
                      Bertil

                      Comment


                      • #12
                        Går inte att simulera flera testkonton samtidigt i bänken, så jag har lagt en global cell per strategi som får lagra positionen. Då går det ändå att köra dem helt separat om man vill. Men jag förenklade en aning och lade en gemensam stoploss, det påverkar ändå bara marginellt.

                        Comment


                        • #13
                          Ursprungligen postat av Bertil Visa inlägg
                          Är det inte bättre att ha Coda på ett simuleringskonto och Legato på ett annat simuleringskonto. Sedan simulerar man mot index, terminen eller annat instrument på ett tredje simuleringskonto. Gör man så blir det ju mycket enklare att ändra i modellerna. Antag tex att man vill lägga till en Take Profit på Coda men inte på Legato, går ju inte om man gör en Fusion.

                          Med vänlig hälsning
                          Bertil
                          Jag hänger inte med. Det är ju så originalmodellerna simuleras. För att analysera en multistrategi måste allt simuleras tillsammans. Praktiskt när man kör live går det att göra så. Det förutsätter dock att modellerna i multistrategin signalerar oberoende av varandra. Annars kommer resultatet att avvika från simuleringen. Det är så jag gör. Sedan ändrar man ju inte live på resans gång.
                          Last edited by Henric; 2016-04-17, 22:04.

                          Comment


                          • #14
                            Ursprungligen postat av Rikard Nilsson Visa inlägg
                            Går inte att simulera flera testkonton samtidigt i bänken, så jag har lagt en global cell per strategi som får lagra positionen. Då går det ändå att köra dem helt separat om man vill. Men jag förenklade en aning och lade en gemensam stoploss, det påverkar ändå bara marginellt.

                            Tänkte inte på det.
                            Men skarpt kan man ju köra flera simuleringskonton samtidigt.

                            Med vänlig hälsning
                            Bertil

                            Comment


                            • #15
                              Kämpa på med multistrategy :-) Ser fram emot resultatet men kan tyvärr inte bidraga med annat än hejarop!

                              Comment

                              Working...
                              X