Allmänt meddelande

Collapse
No announcement yet.

Experimentscript OMX

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

  • #16
    Jag har gjort några nya test i OMX-terminen med enkla korsande medelvärden där det är lätt att kontrollera om analysbänken ”gör rätt”. Genomgående kom inte den första signalen med i analysen, så där finns något i progammet som bör rättas till.

    Alternativet ”Innehav – Blanka – Innehav” har jag tolkat fel. Jag ser nu att det alternativet gör varannan köp och varannan blankning och då stämmer det troligen.

    Men då återstår frågan hur man bäst analyserar endast blankningar?
    Skall man fortfarande använda ”Innehav – Kontant – Innehav” och leta upp största möjliga förlust?

    Comment


    • #17
      Ja, kasta om alternativen för köp och säljscripten då.

      Andra alternativet är möjligen innehav-kontant-blankning-kontant då.

      I säljscriptet lägger du konstant retval(1,2) på en rad före slutraden. Det borde då initiera blankning, och sedan matchas köp. I köp scriptet skall ej reval() finnas med.

      Men jag har varken förutsett eller testat detta alternativet.

      Comment


      • #18
        För mig är det självklart att det bör finnas ett sätt att analysera endast blankningar. Där programmet först skall leta efter första blanka(sälj) signal och para ihop den med första avsluta(köp) signal o.s.v.

        Alternativet ”Innehav – Blanka – Innehav” som finns nu är ju ett specialfall där man använder samma script för att köpa/avsluta och sälja/blanka.

        För mig är detta inget smart sätt. Det finns många studier som säger att i en stark upptrend är det endast köpaffärer som gäller och i nedtrend gäller blankningar. Detta medför att man måste ha 4 olika script. Då är det också bra att enkelt kunna testa dessa var för sig.

        Om det visserligen går att styra detta med retval() verkar det onödigt krångligt. Jag föreslår alltså ett nytt alternativ enligt ovan av typen Blanka – Kontant – Blanka.

        Comment


        • #19
          Fick en ide om scripten, hur man ska göra med "tidsparadoxen".
          Exempel:

          Tex den perioden som sträcker sig mellan 12:00 och 12:29 lämnar köpsignal kl 12:29. Då kollar backtesten (enligt Animera endast fullbordad stapel) var det ev dykt upp en signal tidigare i samm period.

          Det kanske visar sig att man skulle ha köpt redan kl 12:05, men det får man ju reda på först kl 12:29, så loppet är kört.

          Man kan göra så att man handlar på första signal under förutsättning att man har vinst på förra blankpositionen, alt depån är nollställd.
          Om inget av de alternativen är sanna så väntar man till 12:29 och handlar i alla fall.

          Då får man effekten att positionen inte kan vända flera ggr under en period såvida man inte har vinst, och då gör det ju inget!

          Har man vinst så kommer man in i nästa position tidigare än om man väntar tills sista minuten, vilket borde ge bättre vinst.

          Ska spika ihop det hela senare under dagen om jag hinner, vässade script kommer!


          Comment


          • #20
            Några tester jag skulle provat skulle vara att t.ex ha ett extra objekt i minutupplösning också. Och vid full animering(inte endast full stapel då) testa ifall t.ex 3-5 minuter i rad har trend i samma riktning man önskar vid signal.

            Du kan börja med att göra ett script som du kör i extra kolumner i analysbänken med ovanstående test.

            T.ex typ detta

            För köptrendtest

            diff1m:=sub(c,ref(c,1))
            inc1m:=ge(diff1m,0)
            dec1m:=le(diff1m,0)
            sum(inc1m,10)


            För säljtrendtest

            diff1m:=sub(c,ref(c,1))
            inc1m:=ge(diff1m,0)
            dec1m:=le(diff1m,0)
            sum(dec1m,10)

            Lägg dessa två script i var sin extra kolumn i analysbänken(välj kolumner).

            Då ser du hur många av samma sort under senaste 10 minuter ökning/minskning du får vid vinst- respektive förlustaffärer.

            Då får du dessa värden för att vinst och förlustaffärer också för varje kolumn. Du får en statistikkolumn för köpscriptet och säljscriptet separat.

            Finns något samband kan du se att statistiken visar att range av antalet ökningar/minskningar visar klart att det inte överlappar och du kan framgångsrikt lägga till ett villkor för denna trendtesten för att säkra vinstaffärerna.

            Sedan är möjligheterna oändliga att utforma dessa extra saker för olika tester.

            Du kan också välja att göra en enskild test dvs lägga till ett villkor på slutet, att t.ex du vill veta hur många som har minst 5 st i samma riktning vid signal.

            För köptrendtest

            diff1m:=sub(c,ref(c,1))
            inc1m:=ge(diff1m,0)
            dec1m:=le(diff1m,0)
            Ge(sum(inc1m,10),5)


            För säljtrendtest

            diff1m:=sub(c,ref(c,1))
            inc1m:=ge(diff1m,0)
            dec1m:=le(diff1m,0)
            Ge(sum(dec1m,10),5)

            Då läser du antalstatistiken istället för range på slutet av rapporten. Då får du klart besked om villkoret befrämjar vinst eller inte.

            Några sätt att utnyttja analysbänkens funktioner.

            Comment


            • #21
              Sådär, då har jag lagt till funktioner för att testa om man har vinst från förra positionen, alt depån är på noll. Då kan ny position tas redan efter 8 minuter in i perioden.

              Annars väntar man till 26:e minuten. Detta för att göra det möjligt att loopa ett par varv om orderläggningen skulle missa.

              Ska se om jag kan få till några tester som du beskriver Lasse, kan ju vara intressant att veta om man tjänar på att kolla om signal har funnits tex 5 minuter i rad, och i så fall ta position tidigare i perioden.

              Lite kommentarer, "felexponerad" kan man ju aktivera om man kör med exitscript, som har motsvarande funktion för spinn vid misslyckad order tex. Eller om man tex går i och handlar från en annan dator själv. Då stegar modellen fram till rätt sekvens själv.

              Tyvärr så stämmer inte vinst-testen då, för LastTrade returnerar bara rätt värde om order postats från Friendly.

              Jag har stängt av det i nedanstående script, så är det enkelt att köra dessa direkt motvarandra i en enkel ordermodell.

              sl) Köp

              rgln1:=Mov(LinReg(c,16),3,e)
              ma1:=Mov(c,5,e)
              slowrsi:=Mov(LinReg(Rsi(25),4),10,e)
              rsistiger:=Lt(HhvBars(slowrsi,2),1)
              regupp:=Lt(HhvBars(rgln1,2),1)
              stochastic:=Gt(Stoc(LinReg(c,15),3),60)
              tidnu:=Frac(DATE())
              totalt:=Mult(tidnu,1440)
              rest:=Int(Mod(totalt,30))
              tidsignal1:=Gt(rest,8)
              tidsignal2:=Gt(rest,26)
              {tidsignal1:=1}
              innehav:=Portfolio(v)
              {innehav:=0}
              {felexponerad:=Gt(innehav,0)}
              felexponerad:=0
              lastsell:=LastTrade(S,P)
              i30(
              level=Add(0.5,Div(-1.5,innehav))
              vinst=Lt(c,Sub(lastsell,level))
              tidsignal3=Or(And(Or(Eqv(innehav,0),vinst),tidsignal1),tidsignal2)
              signal1=And(Gt(ma1,rgln1),And(tidsignal3,And(stochastic,And(regupp,rsistiger))))
              signal2=And(Or(felexponerad,signal1),Lt(slowrsi,45))
              signal2)


              sl) Blanka

              rgln1:=Mov(LinReg(c,16),3,e)
              ma1:=Mov(c,5,e)
              slowrsi:=Mov(LinReg(Rsi(25),4),10,e)
              rsifaller:=Lt(LlvBars(slowrsi,2),1)
              regner:=Lt(LlvBars(rgln1,2),1)
              stochastic:=Lt(Stoc(LinReg(c,15),3),40)
              tidnu:=Frac(DATE())
              totalt:=Mult(tidnu,1440)
              rest:=Int(Mod(totalt,30))
              tidsignal1:=Gt(rest,8)
              tidsignal2:=Gt(rest,26)
              {tidsignal1:=1}
              innehav:=Portfolio(v)
              {innehav:=0}
              {felexponerad:=Lt(innehav,0)}
              felexponerad:=0
              lastbuy:=LastTrade(B,P)
              i30(
              level=Add(0.5,Div(1.5,innehav))
              vinst=Gt(c,Add(lastbuy,level))
              tidsignal3=Or(And(Or(Eqv(innehav,0),vinst),tidsignal1),tidsignal2)
              signal1=And(Lt(ma1,rgln1),And(tidsignal3,And(stochastic,And(regner,rsifaller))))
              signal2=And(Or(felexponerad,signal1),Gt(slowrsi,-45))
              signal2)

              Comment


              • #22
                Rikard

                Hur fungerar det med tidssignalerna i praktiken, kan det bli flera signaler i varje 30 min period?

                Om det blir köp efter 8 min kan det då bli sälj efter 26 min?

                uppskattar att du delar med dig av scriptandet

                Comment


                • #23
                  Hej!
                  Teoretiskt kan det bli tex köp efter 8 minuter, och blankning efter 26 minuter. men i praktiken tror jag inte det händer ofta, det är ändå ganska mycket som ska hända på 18 minuter i så fall.

                  Man kan se det så här:

                  Vi är lite offensiva och handlar på första signal efter 8 minuter, under förutsättning att förra positionen ligger plus, alt depån är nollställd.
                  Efter 26 minuter "verifieras" den positionen, och om det skulle vara helt fel så stängs den eller vänds.

                  Det är mycket bökigt att backtesta detta i praktiken ( i dagsläget) , så man får försöka gissa sig till hur det funkar.

                  Comment

                  Working...
                  X