Allmänt meddelande

Collapse
No announcement yet.

Testa en strategi i analysbänken, 15 min breakout

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

  • #16
    Om jag vill testa köp + exit ... räcker det med att ha en ordermodell med två sekvenser. Första sekvensen är köp på close över högsta från första 15 min bar ... Stega när utförd har inställningen nästa. Andra sekvensen är profit eller SL med stega när utförd som har inställningen stega till sekvens 1.

    I analysbänken har jag sedan inställningen En ordermodell med alla köp och sälj i olika sekvenser. Köp sida har jag min ordermodell beskriven ovan. För säljsida har jag inget valt ... det borde väl inte behövas? Jag har problemet att det inte sker någon exit så som jag tycker det borde ske.

    Min exit signal är följande nu när jag felsöker (alltså om high >= köp + 2 punkter) :

    profit1 = if(ge(h,Add(Lasttrade(B,P),2)))
    draw(mult(profit1,150),4,bsbF)

    Comment


    • #17
      Prova att ta bort mellanslagen runt =, det kan nog ställa till det. Har du sparat ordermodellen också efter att du lagt till sekvens nr 2? När det är gjort måste man välja in den igen i analysbänken.

      Comment


      • #18
        Tror det var if-satsen det var fel på ... borde inte testa syntax upptäcka felet om jag missar komma för true och false?

        Jag har fortfarande problem ... i det här fallet nu så får jag signaler på varje bar av någon anledning ... om jag byter ut Lasttrade(B,P) till tex 1462.5 så beter sig signalen rätt. Går det att debugga och skriva ut vilket värde Lasttrade(B,P) har? Nu sker exit direkt efter köpet vilket tyder på att det kanske inte är korrekt att använda Lasttrade(B,P) för att få senaste köpkursen... Så här ser koden ut:

        i15(
        time1=mult(frac(d),1440) { tidpunkt }
        time2=le(time1,554) { true mellan 09,00 - 09,15 }
        linje1=Retval(if(time2,h,Getval(5)),5) { sparar det högsta värdet från första 15 min baren }
        linje2=Retval(if(time2,l,Getval(6)),6) { sparar det lägsta värdet från första 15 min baren }

        { profit target 1 eller SL }

        profit1=Ge(h,Add(Lasttrade(B,P),Mult(Sub(Linje1,Linje2),0.5))) {signal om h >= profit target 1 }
        signal=and(aref(and(cross(c,linje2),lt(c,linje2)),1),1)
        köpexit=Or(profit1,signal)
        draw(mult(köpexit,20),4,gsbF)
        )

        Mvh
        Daniel

        Comment


        • #19
          h i profit1 kan ju vara sant innan traden. Prova att byta till c så att det bara gäller nya insamlingar.

          Om du använder ett extrakolumn vid simulering går det att titta på värden vid signal.

          Sedan vet jag ej om det är korrekt att använda aref på värden i Retval. Själv gör jag aldrig det. Det ser ut att fungera i detta fall, men är det ett bra sätt? Retval är väl ingen dataserie utan senast sparade värde i minnet. Rikard får reda ut.

          Comment


          • #20
            Här är lite förenklat (i mitt tycke i alla fall) som verkar fungera vid simulering.
            i15(
            period1=eqv(int(ref(d,1)),int(d))
            gräns=And(hhv(Not(period1),2),period1)
            linje1=Find(gräns,40,aref(h,1),1)
            linje2=Find(gräns,40,aref(l,1),1)
            ej_innehav=le(GetGvar(100),0) { för att få köpsignal i script ... annars le(portfolio(v),0)}
            ej_samma_dag=gt(int(d),lasttrade(b,d))
            draw(linje1,2,dgqb)
            draw(linje2,3,rqb)

            signal1=and(and(gt(aref(c,1),linje1),And(ej_innehav,ej_samma_dag)),period1)
            linje3=Retval(if(And(And(signal1,1),And(ej_innehav,ej_samma_dag)),o,Getval(7)),7)
            SetGvarIf(1,100,signal1)
            SetGvarIf(0,100,not(period1))
            signal2=and(signal1,ej_innehav)
            rita=if(gt(Getgvar(100),0),linje3,0) { sparar köp signal från senaste signalen}
            draw(rita,8,dcQBW) { Ritar ut köpkursen }
            draw(Add(rita,Mult(Sub(Linje1,Linje2),0.5)),9,dcQB1) { Ritar ut profit target 1 }
            mult(signal2,10)
            )

            Sälj:

            i15(
            period1=eqv(int(ref(d,1)),int(d))
            gräns=And(hhv(Not(period1),2),period1)
            linje1=Find(gräns,40,aref(h,1),1)
            linje2=Find(gräns,40,aref(l,1),1)

            { profit target 1 eller SL }

            profit1=Ge(h,Add(Lasttrade(B,P),Mult(Sub(Linje1,Linje2),0.5))) {signal om h >= profit target 1 }
            signal1=aref(lt(c,linje2),1)
            köpexit=and(Or(profit1,signal1),gt(portfolio(v),0))
            draw(mult(köpexit,20),4,gsbF)
            mult(köpexit,10)
            )



            Det jag tror kan orsaka problem med LastTrade i ditt fall är om du simulerar endast script. Det behöver stoppas in i komplett ordermodell för att kunna simulera innehav osv.

            Jag testade några dagar tillbaka på index och fick resultat enligt bild:
            Attached Files

            Comment


            • #21
              Det fungerar som Rikard scriptat med endast en trade per dag. Om Fler trades kan tas finns det två problem. Vet ej om så är fallet.

              1. profit1 bör använda c istället för h. c tar bara hänsyn till senaste insamling, medan h kan ha nåtts innan köpsignal.
              2. köpvillkoret kan vara sant även om vinst tas hem. Då behövs någon annan begränsning, tex x-minuter från senaste försäljning.

              Comment


              • #22
                Tackar! :-) Det var bara säljsignalen 2/12 på 1455,39 som borde säljas på nästa stapels close eftersom kravet är att stängningen av hela baren ska vara under L-linjen ... borde gå att justera.

                Steg2 nu är att jag vid köp skulle vilja köpa 2 andelar, det borde bara vara att justera antal i den första sekvensen.

                Sedan vill jag med den andra delen ta hem vinsten på profit2 som är köpkursen + (H-L) från första 15min baren. Villkoret för denna är att så fort profit1 nåtts så ska 75% av den innestående vinsten (aktuell högsta kurs sedan köp minus köpkurs) trailas ... om inte den trailande stoppen triggas säljs aktien på profit2 nivån.

                Hur löser man detta med sekvenserna i ordermodellen, måste det till flera sekvenser eller går logiken att få till i en säljsekvensen eller måste man ha en helt separat ordermodell för detta ? Det är ju två huvudscenarior: 1) SL nivåen nås innan profit1 och då avslutas båda positionerna. 2) profit1 nås och då säljs den första positionen och sedan trailas 75% av andra positionen tills utstoppad eller profit2 nås.

                Mvh
                Daniel

                Comment


                • #23
                  Det går säkert att lösa med något klurigt stegning. Jag skulle bygga helt oberoende ordermodeller med principen först till kvarn.

                  Comment


                  • #24
                    Hur får man till script att traila 75% av vinsten?

                    Om profit1 nivå uppnåtts traila 75% av skillnaden från högsta högsta kursen (från och med då profit1 uppnåddes) och köpkursen.

                    Mvh
                    Daniel

                    Comment


                    • #25
                      Det beror på hur antal hanteras i modellen. Här 2 vid köp och 1 TP. Det går även att kolla på stoploss mini som är ett standardscript i AT.


                      proc:=75
                      maxantal:=2
                      i1(
                      innehav=and(gt(portfolio(v),0),lt(portfolio(v),maxantal))
                      stp1=if(ge(d,lasttrade(s,d)),c,0) {c eller h}
                      stp2=hhv(stp1,520)
                      stp3=mult(sub(stp2,lasttrade(b,p)),div(proc,100))
                      stp4=and(lt(c,sub(stp2,stp3)),innehav)
                      )

                      Comment


                      • #26
                        Det verkar ge sälj signal direkt efter köp. Måste också få med så att profit1 nivån har nåtts på något sätt ... för det är först då som den ska trailas.

                        Mvh
                        Daniel

                        Comment


                        • #27
                          Det fixar innehav. I detta fall kan innehavet bara vara 1 om TP tagits. Sedan beror det på hur du hanterar innehav.

                          Comment


                          • #28
                            Bygger detta på att när man simulerar kör båda modellerna (PT1 och PT2) samtidigt? För jag får det fortfarande inte att fungera när jag kör enbart PT2 med följande SäljExit (såg att du körde med i1 ... går det att blanda i1 och i15 i samma skript?):

                            i15(
                            period1=eqv(int(ref(d,1)),int(d)) {sant om samma datum på denna och föregående bar}
                            gräns=And(hhv(Not(period1),2),period1) { visar andra baren på dagen }
                            linje1=Find(gräns,40,aref(h,1),1)
                            linje2=Find(gräns,40,aref(l,1),1)

                            { SL eller (trail 75% eller profit target 2 efter att PT1 nåtts) }

                            profit1=Ge(h,Add(Lasttrade(B,P),Mult(Sub(Linje1,Linje2),0.5))) {signal om h >= profit target 1 }
                            p1=Add(Lasttrade(B,P),Mult(Sub(Linje1,Linje2),0.5))
                            profit2=Ge(h,Add(Lasttrade(B,P),Mult(Sub(Linje1,Linje2),1))) {signal om h >= profit target 2 }

                            { om profit1 nivå uppnåtts traila 75% nivån från högsta högsta kursen från från det att profit1 inträffade och köpkursen}
                            innehav=and(gt(portfolio(v),0),lt(portfolio(v),2))
                            stp1=if(ge(d,lasttrade(s,d)),h,0)
                            stp2=hhv(stp1,520)
                            stp3=mult(sub(stp2,lasttrade(b,p)),div(75/100))
                            stp4=and(lt(c,sub(stp2,stp3)),innehav)

                            signal1=aref(lt(c,linje2),1)
                            köpexit=and(Or(Or(profit2,signal1),stp4),gt(portfolio(v),0))
                            draw(mult(köpexit,20),4,gsbF)
                            mult(köpexit,10)
                            )

                            Comment


                            • #29
                              Det går inte direkt att blanda upplösning i ett script. Däremot går det att använda ett extraobjekt. Ett extraobjekt kan vara samma instrument i en annan upplösning eller ett annan instrument. Läs mer i manualen.

                              Du har två alternativ. Det första är att använda extraobjekt eller anpassa scripten till en och samma upplösning. Det andra är att helt enkelt använda fler ordermodeller.

                              Tänk på att innehavskontrollen måste anpassas för varje villkor.

                              Comment


                              • #30
                                Här kommer nuläget, har lyckats traila lite highs och fått fram 75% nivån men det sker inget sälj där ... lägger med en bild på vart jag skulle vilja att sälj sker.

                                i15(
                                period1=eqv(int(ref(d,1)),int(d)) {true för alla utom första baren på dagen }
                                gräns=And(hhv(Not(period1),2),period1) {true för andra baren på dagen }
                                linje1=Find(gräns,40,aref(h,1),1) {hittar första barens high }
                                linje2=Find(gräns,40,aref(l,1),1) { hittar första barens low }
                                ej_innehav=le(GetGvar(100),0) { för att få köpsignal i script ... annars le(portfolio(v),0)}
                                ej_samma_dag=gt(int(d),lasttrade(b,d)) {true om barens datum är större än köpdatum}
                                draw(linje1,2,dgqb)
                                draw(linje2,3,rqb)

                                signal1=and(and(gt(aref(c,1),linje1),And(ej_innehav,ej_samma_dag)),period1)
                                linjek=Retval(if(And(And(signal1,1),And(ej_innehav,ej_samma_dag)),o,Getval(7)),7)
                                SetGvarIf(1,100,signal1)
                                SetGvarIf(0,100,not(period1))
                                signal2=and(signal1,ej_innehav)
                                linje3=if(gt(Getgvar(100),0),linjek,0) { sparar köp signal från senaste signalen}
                                linje4=Add(linje3,Mult(Sub(Linje1,Linje2),0.5)) {PT1}
                                linje5=if(ge(h,linje4),Add(linje4,2),0) {trail trigger}
                                linje6=if(and(linje5,ge(d,lasttrade(s,d))),hhv(h,40),0) {högsta kursen som ska trailas}

                                innehav=and(gt(portfolio(v),0),lt(portfolio(v),2))
                                linje7=sub(linje6,Mult(Sub(linje6,linje3),0.25)) {trail nivån 75% profit}
                                linje8=Add(linje3,Mult(Sub(Linje1,Linje2),1)) {PT2}
                                profit2=Ge(h,Add(Lasttrade(B,P),Mult(Sub(Linje1,Linje2),1))) {signal då profit2 uppnås}
                                signal3=and(lt(c,linje7),innehav) {}
                                draw(mult(linje5,1), 0, rQB)
                                draw(mult(linje4,1), 1, bQB)
                                draw(mult(linje6,1), 2, dbQB)
                                draw(mult(linje7,1), 3, dgQB)
                                draw(mult(signal3,4000), 4, bsbF)
                                signal4=aref(lt(c,linje2),1)
                                köpexit=and(Or(profit2,Or(signal4,signal3)),gt(portfolio(v),0))
                                draw(mult(köpexit,20),4,gsbF)
                                mult(köpexit,10)
                                )
                                Attached Files

                                Comment

                                Working...
                                X