Allmänt meddelande

Collapse
No announcement yet.

ROC and Roll

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

  • #61
    bug i ROC - tillåter fler än 10 innehav

    Hej,

    Jag upptäckte en bugg som jag är tacksam för att få hjälp med.

    Jag vill kunna ha andra innehav på samma konto. DVS ROC ska inte köpa för hela kontot.

    När jag ställer ned belopp att handla för i antalskriptet så det inte är 9.9% per position som är originalvärde, då börjar ROC inneha fler än 10 aktier. T.ex. 14 aktier.

    Jag antar att det ska vara möjligt och är tänkt design att RANKA och köpa top 10 aktier.

    EDIT:
    När jag tittar nogare på en körning i bänken så köper den första dagen 10 st, en dag senare 2 st, 3 dagar senare ytterligare 2 st, 10 dagar senare ytterligare 2 st, 24 dagar senare ytterligare 1 st. Sedan säljs det vid nästa månadsskifte. Jag misstänker att den vid varje daglig ny ranking köper på sig det den inte har så länge det finns pengar och finns en förändring av nya kandidater i top 10 RANK.

    Jag har tänkt att kunna köra köp och sälj i annat intervall än en månad, så en lösning är önskvärd där ny_mån variabeln fortfarande kan ändras.



    MVH
    Last edited by jimmy; 2020-05-16, 22:16.

    Comment


    • #62
      Ursprungligen postat av jimmy Visa inlägg
      Hej,

      Jag upptäckte en bugg som jag är tacksam för att få hjälp med.

      Jag vill kunna ha andra innehav på samma konto. DVS ROC ska inte köpa för hela kontot.

      När jag ställer ned belopp att handla för i antalskriptet så det inte är 9.9% per position som är originalvärde, då börjar ROC inneha fler än 10 aktier. T.ex. 14 aktier.

      Jag antar att det ska vara möjligt och är tänkt design att RANKA och köpa top 10 aktier.

      EDIT:
      När jag tittar nogare på en körning i bänken så köper den första dagen 10 st, en dag senare 2 st, 3 dagar senare ytterligare 2 st, 10 dagar senare ytterligare 2 st, 24 dagar senare ytterligare 1 st. Sedan säljs det vid nästa månadsskifte. Jag misstänker att den vid varje daglig ny ranking köper på sig det den inte har så länge det finns pengar och finns en förändring av nya kandidater i top 10 RANK.

      Jag har tänkt att kunna köra köp och sälj i annat intervall än en månad, så en lösning är önskvärd där ny_mån variabeln fortfarande kan ändras.



      MVH
      Hittade felet. Är nog Rikards som testat att köpa varje dag istället för ny_mån är sant. Har markerat felet med färg nedan.

      Om detta inte är avsikten, så skulle det vara bra att få in en ny version för nedladdning.

      { ROC and Roll Investor buy ver 1.1 200223 }



      weight_q:=2 {2}
      weight_y:=1 {1}
      weight_m:=-1 {-1}
      hysteres1:=1.02
      hysteres2:=0.98
      min_avg_daily_oms:=200000
      hävstång:=1


      datesame=eqv(int(d),int(ref(d,1)))
      dagar_data=sum(not(datesame),250)

      no_split=llv(lt(div(abs(sub(c,ref(c,1))),c),0.3),250)
      samma_dag=ge(int(d),sub(int(date()),2))
      avg_oms_daily=div(sum(mult(c,v),250),250)
      data_ok=and(and(and(gt(avg_oms_daily,min_avg_daily_oms),samma_dag),no_split),gt(dagar_data,240))

      rc_y=roc(c,250,%)
      rc_q=roc(c,63,%)
      rc_m=roc(c,21,%)
      tot=add(add(mult(weight_q,rc_q),mult(weight_m,rc_m)),mult(weight_y,rc_y))
      poäng_tt=mult(tot,data_ok)
      draw(poäng_tt,1,dwaaw)

      setgvarif(hävstång,9800,1)
      best=getgvar(9885)
      id1=getgvar(9875)
      id2=getgvar(9876)
      id3=getgvar(9877)
      id4=getgvar(9878)
      id5=getgvar(9879)

      id6=getgvar(9880)
      id7=getgvar(9881)
      id8=getgvar(9882)
      id9=getgvar(9883)
      idx=getgvar(9884)


      abb=eqv(crcid(),3588324501)

      konto=sub(add(cash(t),cash(a)),mult(2,abs(cash(s))))
      pengarfinns=lt(cash(a),mult(hävstång,mult(konto,0.9)))
      ingen_pos=eqv(cash(a),0)

      ny_mån=or(not(eqv(aref(monthnumber(),1),monthnumber())),ingen_pos)
      ej_innehav=le(portfolio(v),0)
      innan1720=ge(mult(1440,sub(market(c),frac(date()))),8)
      stängning=le(mult(1440,sub(market(c),frac(date()))),12)
      2tim_innan=le(mult(1440,sub(market(c),frac(date()))),140)
      2_tim_innan=gt(mult(1440,sub(market(c),frac(date()))),140)
      write=and(data_ok,and(and(not(abb),{ny_mån}1),and(2tim_innan,and(and(innan1720,gt(poäng_tt,mult(best,hysteres1))),gt(tot,0)))))
      setgvarif(poäng_tt,9885,write)
      setgvarif(crcid(),9884,write)


      nollställ=and(or(2_tim_innan,eqv(xtime(date(),h),15)),1)
      setgvarif(-1,9885,nollställ)
      setgvarif(-1,9884,nollställ)
      setgvarif(-1,9883,nollställ)
      setgvarif(-1,9882,nollställ)
      setgvarif(-1,9881,nollställ)
      setgvarif(-1,9880,nollställ)
      setgvarif(-1,9879,nollställ)
      setgvarif(-1,9878,nollställ)
      setgvarif(-1,9877,nollställ)
      setgvarif(-1,9876,nollställ)
      setgvarif(-1,9875,nollställ)
      setgvarif(-1,9886,or(nollställ,gt(getgvar(9886),mult(hysteres1,getgvar(9885)))))
      setgvarif(-1,9887,or(nollställ,gt(getgvar(9887),mult(hysteres1,getgvar(9886)))))
      setgvarif(-1,9888,or(nollställ,gt(getgvar(9888),mult(hysteres1,getgvar(9887)))))
      setgvarif(-1,9889,or(nollställ,gt(getgvar(9889),mult(hysteres1,getgvar(9888)))))
      setgvarif(-1,9890,or(nollställ,gt(getgvar(9890),mult(hysteres1,getgvar(9889)))))
      setgvarif(-1,9891,or(nollställ,gt(getgvar(9891),mult(hysteres1,getgvar(9890)))))
      setgvarif(-1,9892,or(nollställ,gt(getgvar(9892),mult(hysteres1,getgvar(9891)))))
      setgvarif(-1,9893,or(nollställ,gt(getgvar(9893),mult(hysteres1,getgvar(9892)))))
      setgvarif(-1,9894,or(nollställ,gt(getgvar(9894),mult(hysteres1,getgvar(9893)))))

      long1a=or(or(or(or(eqv(crcid(),id1),eqv(crcid(),id2)),eqv(crcid(),id3)),eqv(crcid(),id4)),eqv(crcid(),id5))
      long1b=or(or(or(or(eqv(crcid(),id6),eqv(crcid(),id7)),eqv(crcid(),id8)),eqv(crcid(),id9)),eqv(crcid(),idx))
      finns_ej=and(not(or(long1a,long1b)),not(eqv(getgvar(9884),-1)))

      set_kand2=and(and(gt(poäng_tt,getgvar(9886)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9885))))),innan1720)
      setgvarif(poäng_tt,9886,set_kand2)
      setgvarif(crcid(),9883,set_kand2)

      set_kand3=and(and(gt(poäng_tt,getgvar(9887)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9886))))),innan1720)
      setgvarif(poäng_tt,9887,set_kand3)
      setgvarif(crcid(),9882,set_kand3)

      set_kand4=and(and(gt(poäng_tt,getgvar(9888)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9887))))),innan1720)
      setgvarif(poäng_tt,9888,set_kand4)
      setgvarif(crcid(),9881,set_kand4)

      set_kand5=and(and(gt(poäng_tt,getgvar(9889)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9888))))),innan1720)
      setgvarif(poäng_tt,9889,set_kand5)
      setgvarif(crcid(),9880,set_kand5)

      set_kand6=and(and(gt(poäng_tt,getgvar(9890)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9889))))),innan1720)
      setgvarif(poäng_tt,9890,set_kand6)
      setgvarif(crcid(),9879,set_kand6)

      set_kand7=and(and(gt(poäng_tt,getgvar(9891)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9890))))),innan1720)
      setgvarif(poäng_tt,9891,set_kand7)
      setgvarif(crcid(),9878,set_kand7)

      set_kand8=and(and(gt(poäng_tt,getgvar(9892)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9891))))),innan1720)
      setgvarif(poäng_tt,9892,set_kand8)
      setgvarif(crcid(),9877,set_kand8)

      set_kand9=and(and(gt(poäng_tt,getgvar(9893)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9892))))),innan1720)
      setgvarif(poäng_tt,9893,set_kand9)
      setgvarif(crcid(),9876,set_kand9)

      set_kandx=and(and(gt(poäng_tt,getgvar(9894)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9893))))),innan1720)
      setgvarif(poäng_tt,9894,set_kandx)
      setgvarif(crcid(),9875,set_kandx)


      long2=and(or(long1a,long1b),stängning)
      long3=and(and(long2,ej_innehav),pengarfinns)
      mult(long3,not(abb))

      Comment


      • #63
        Njae det var en medveten kommentarmarkering för att få möjlighet att köpa ny position om en stoploss löser ut mitt i månaden. Det kunde göras även innan men unte med färsk ranking vilket var en bugg. Nu körs rankingen varje dag för att alltid ha färsk topp-10-lista ifall det blir en ledig "slot".

        Comment


        • #64
          Ursprungligen postat av Rikard Autostock Visa inlägg
          Njae det var en medveten kommentarmarkering för att få möjlighet att köpa ny position om en stoploss löser ut mitt i månaden. Det kunde göras även innan men unte med färsk ranking vilket var en bugg. Nu körs rankingen varje dag för att alltid ha färsk topp-10-lista ifall det blir en ledig "slot".

          Hej,

          Vad får du för egenskaper om du minskar positionsstorleken till mindre än 9.9% köper den fler än 10 innehav då?


          jag har försökt få till följande egenskaper idag men inte lyckats utan att någon annan nackdel uppstått. Undrar om det är tekniskt möjligt och i så fall om det går att få lite hjälp på traven, är inte så duktig på skripting.

          1. går att handla för mindre del av kontot

          2. Daglig RANK - säljs ett innehav manuellt/SL så köpt den bästa inom RANK in.

          3. Frekvensen på sälj/köp går att ställa in, dvs fortsatt möjlighet att ändra "ny_mån"

          4. vill kunna läsa crid via de globala cellerna i annan strategi för att inte t.ex. sälja de innehav som innehas mer långsiktigt av ROC men där kortsiktig handel kan ske i samma instrument. Tänkte kod liknande den i ROC säljskript i det andra skriptet, att titta på vilka ID som är reserverade och t.ex. inte ska säljas.

          Nu ändras de globala cellarna hela tiden så läser ett annat säljskript av så säljs innehaven innan antagen period att innehas (1 månad).

          Comment


          • #65
            1. Sätt hävstång till mindre än 1 i Long-scriptet, så räknar ROC med motsvarande del av kontot, dvs 0.5 ger handel för halva kontot fördelat på 10 positioner.

            2. Så är det redan nu.

            3. Du kan lägga till ett villkor till som fungerar som frekvensstyrning, tex:

            ny_vecka=lt(dayofweek(),aref(dayofweek(),1))

            som ger signal första handelsdagen varje vecka. Lägg det i säljscriptet, rad:

            sell3=and(and(and(or(exit,{ny_mån}ny_vecka),sell2),and(öppet,stängning)),innehav)

            Köpscriptet köper om det finns en ledig "slot" i topp 10-lista, det spelar ingen roll vilken dag det är. Säljscriptet säljer varje månadsskifte enligt aktuell lista, och så fort innehav sålts bildas lediga platser som köpscriptet fyller med kandidater enligt senaste scan.

            4. Celler ändras under scanning men efter kl 17:22 är de färdigskrivna. Då kan man läsa ut topp-10-listan.

            Comment


            • #66
              Hej
              tack för senast svar

              En ny fråga. Har labbat mycket med skripten i ROC.
              När jag kommenterar bort nollställvillkoret i köp skriptet får jag betydligt bättre resultat.
              Försöker nu förstå om nollställninsvillkoret behövs och vad intentionen är. Jag har själv inte full koll på hur den faktiskt agerar och vad konsekvensen blir om man inte nollställer med givet villkor. Någon form av nollställning ser ut att ske längre ned.
              Min tanke är ifall nollställ har någon form av bug eller tillför "brus" i signaleringen, eller är något som kan nagelfaras efter att skripten nyligen uppdaterades. Det blir betydligt fler signaler med nollställ än med utan och i alla mina tester sämre resultat.


              {nollställ=and(or(2_tim_innan,eqv(xtime(date(),h),15)),1)}
              nollställ=mult(0,1)


              exempel där nollställning sker med or villkor om
              write=and(data_ok,and(and(not(abb),ny_mån),and(2tim_innan,and(and(innan1720,gt(poäng_tt,mult(best,hysteres1))),gt(tot,0)))))
              setgvarif(poäng_tt,9885,write)
              setgvarif(crcid(),9884,write)

              setgvarif(-1,9883,nollställ)
              setgvarif(-1,9886,or(nollställ,gt(getgvar(9886),mult(hysteres1,getgvar(9885)))))

              set_kand02=and(and(gt(poäng_tt,getgvar(9886)),and(finns_ej,lt(poäng_tt,mult(hysteres2,getgvar(9885))))),innan1720)
              setgvarif(poäng_tt,9886,set_kand02)
              setgvarif(crcid(),9883,set_kand02)


              EDIT
              när jag läsa inlägget hittade jag även att jag inte ändrat tillbaka min tidigare labb från {ny_mån}1 till villkor i föregående version av skriptet "ny_mån".
              I nuvarande test fick jag sämre resultat med {ny_mån}1. i övrigt samma förutsättningar. Har ett sälj allt skript på backtestets sista handelsdag vid stängning för att realisera alla vinster/förluster och jämför avkastningen i kr.

              Last edited by jimmy; 2020-05-24, 01:28.

              Comment


              • #67
                Testa nya och gamla versionen t.o.m. Feb 2020 respektive t.o.m. i dag. Givetvis med stängning sista dagen i körningen och att cash(a)=0.

                Comment


                • #68
                  Nollställningen behövs för att inte gamla värden ska ligga kvar i cellerna när ny rankingsekvens körs. Annars kommer tidigare "topplista" att påverka utfallet på den nya. Det blir nog slumpmässigt hur den kommer se ut gissar jag.

                  Ett sätt att få bättre koll på värdeutvecklingen över tid är att lägga ett script i egen kolumn vid simulering som mäter kontovärdet, så blir det enkelt att lägga över tex i Excel:

                  kontovärde=add(cash(a),cash(t))

                  Comment


                  • #69
                    Jimmy stänger alla positioner sista dagen i körningen. Det bör man alltid göra. För att få en rättvis bild när man jämför versioner måste man göra det. Därav cash(a)=0.

                    Comment


                    • #70
                      Jo, men kör man extra script i egen kolumn får man ju kontinuerlig uppdatering av kontovärdet ändå. Men visst, det ena utesluter ju inte det andra.

                      Comment


                      • #71
                        Ursprungligen postat av Henric Visa inlägg
                        Testa nya och gamla versionen t.o.m. Feb 2020 respektive t.o.m. i dag. Givetvis med stängning sista dagen i körningen och att cash(a)=0.
                        Hej, nu har jag inte kvar hela den gamla versionen av skriptet, men du kanske menar med enda skillnaden med kontinuerlig omrakning. har du kört både gamla och nya och i så fall vad får du för skillnad?

                        Jag har mestadels använt testperiod Feb 2019 till Feb 2020.

                        Comment


                        • #72
                          Jag menar kontinuerlig omrankning. Jag kan tänka mig att det har varit bättre att bara trigga en gång i månaden under 2020. Frågan är vad som har varit bäst från 2012.

                          Edit: Den gamla versionen hade ju en bug så det tycker jag är uteslutet.
                          Last edited by Henric; 2020-05-24, 11:37.

                          Comment


                          • #73
                            Ursprungligen postat av Rikard Autostock Visa inlägg
                            Jo, men kör man extra script i egen kolumn får man ju kontinuerlig uppdatering av kontovärdet ändå. Men visst, det ena utesluter ju inte det andra.

                            Kontinuerlig uppdatering tar inte hand om orealiserade positioner. Särskilt för strategier som kan ligga i position länge. Tvingar man fram cash-parametrarna varje dag är det givetvis bättre.

                            Comment


                            • #74
                              Det går ganska enkelt att fixa, tex köra daglig dummy-affär på ABB och disabla ABB från rankingen.

                              Comment


                              • #75
                                Vill tydliggöra att jag tog upp två saker och önskar för dialog om "nollställ" och vad som orsaker det betydligt bättre resultatet. Jag har svårt att motivera mig själv att köra den "tänkte" lösningen med nollställ när den har så relativt mycket lägre resultat i mina tester.
                                Tänker då att det finns kanske en edge i det fenomen som uppstår i när nollställningn inte görs som tänkt och att det kanske ska tas tillvara på i en strategi.

                                När jag kör utan nollställ så får jag 2.53 ggr bättre avkastning än med original.
                                Jag har för mig att {ny_mån}1 vs "ny_mån har marginell skillnad i resultat. Ska testa om det.

                                • utan nollställ dvs har kommenterat bort: nollställ=mult(0,1) vs original nollställ=and(or(2_tim_innan,eqv(xtime(date(),h),15)),1)
                                • {ny_mån}1 vs "ny_mån"


                                Förstod inte helt resonemanget Henrik och Rikard förde och ifall vi pratade om samma sak

                                Comment

                                Working...
                                X