Allmänt meddelande

Collapse
No announcement yet.

Supertrend Indicator

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

  • #46
    Ursprungligen postat av Henric Visa inlägg
    Jag har redan gjort en ändring som gör scriptet mycket snabbare. Lägger ut i kväll eller imrgon.
    Tack!

    jag provade även att ställa ned längd:=1 och fick samma resultat men gick mycket snabbt. Så funderade nu på vad syftet är med längd, dvs om den behövs och vad lämpligt minimalt värde är.

    Ser fram emot ditt inlägg med den snabbare varianten

    Comment


    • #47
      På rätt spår. Saken är att kurvan måste vara synkad historiskt. Börjar man idag finns ingen tidigare kurva och det går inte att veta om den är korrekt.

      Comment


      • #48
        {// Olika val}
        VäljBeräkning:=1 {atr=1 ema(true_range)=0}
        Diagram:=1 {1=endast rita 0=sim,skarpt}
        perioder:=10 {perioder för banden}
        multiplier:=3 {bredden på banden}
        längd=if(eqv(getval(3),0),250,1){lookback för att vara säker på att kurvan är synkad}
        {//}

        Ändrade villkoret för längd. Så fort den första perioden har passerats och superTrnd har ett värde behöver den bara loopa en gång.

        Det är en while loop. Jag vet inte om loopen kör och därefter uppdateras loop-räknaren eller om loop-räknaren uppdateras efteråt. Det skulle kunna påverka första vändningen av kurvan. Detta då kurvan får ett första värde och sedan jämförs med de två banden för nytt värde av kurvan. För att göra en lång historia kortare. Ska längd användas i första retval eller längd-1?

        Jag har sett någon stans att max värde för lookback reserveras med :
        Jag ritade båda med och utan och de gav samma värde. Verkar som att det inte behövs.

        Ni får kolla om det fungerar som tänkt.

        Comment


        • #49
          Uppdatering. Kanske går att skriva mer kompakt? Kollade med extrakolumner och den ser ut att loopa rätt i while och hämtar rätt värden utan att reservera maxperioder med :

          Fick det inte att fungera med dynamiskt villkor för varv i loopen med W(while). Det kanske finns begränsningar där? Använder istället minnesreffen MaxVarv. Ni får kolla.

          Jimmy, Får man bara första stapeln rätt så räcker det sedan med ett varv per insamling, dvs jämför senaste värden med senast sparade.

          Rikard kanske har synpunkter för hur den fungerar?

          {// Olika val}
          VäljBeräkning:=1 {atr=1 ema(true_range)=0}
          Diagram:=1 {1=endast rita 0=sim,skarpt}
          perioder:=10 {perioder för banden}
          multiplier:=3 {bredden på banden}
          längd:=250 {lookback för att vara säker på att kurvan är synkad}
          {//}

          idag=or(eqv(int(d),int(date())),Diagram)

          Atg=atr(perioder)
          TrueR=ema(mx(mx(sub(h,l),sub(h,aref(c,1))),sub(aref(c,1),l)),perioder)
          Arange=if(Väljberäkning,Atg,TrueR)

          HLA=div(add(h,l),2)
          BUB1=add(HLA,mult(multiplier,Arange))
          BLB1=sub(HLA,mult(multiplier,Arange))

          {nyperiod. undvika att animeringing uppdaterar sig själv}
          stämpel=if(gt(mn(sub(aref(d,1),aref(d,2)),sub(aref(d,2),aref(d,3))),0.5),int(d),d)
          nyperiod=and(gt(stämpel,getval(7)),idag)
          retval(if(nyperiod,getval(1),getval(4)),4)
          retval(if(nyperiod,getval(2),getval(5)),5)
          retval(if(nyperiod,getval(3),getval(6)),6)

          {initierar om startar från noll}
          retval(if(and(eqv(getval(4),0),idag),aref(BUB1,längd),getval(4)),4)
          retval(if(and(eqv(getval(5),0),idag),aref(BLB1,längd),getval(5)),5)
          retval(if(and(eqv(getval(6),0),idag),if(aref(ge(c,mov(c,perioder,s)),längd),getval(5),getval(4)),getval(6)),6)

          {Beräkna nya kurvor för perioden}
          MaxVarv=if(eqv(getval(3),0),längd,1)
          retval(0,0)
          turns=retval(add(getval(0),1),0)
          lookBack=sub(MaxVarv,turns)
          BUB2=if(eqv(turns,MaxVarv),BUB1,aref(BUB1,lookBack))
          BLB2=if(eqv(turns,MaxVarv),BLB1,aref(BLB1,lookBack))
          FinalU=if(or(lt(BUB2,getval(4)),gt(aref(c,add(lookBack,1)),getval(4))),BUB2,getval(4))
          FinalL=if(or(gt(BLB2,getval(5)),lt(aref(c,add(lookBack,1)),getval(5))),BLB2,getval(5))
          loop(turns,MaxVarv)

          superTrnd=if(or(and(eqv(getval(6),getval(4)),lt(c,FinalU)),and(eqv(getval(6),FinalL),lt(c,FinalL))),FinalU,FinalL)

          retval(FinalU,1)
          retval(FinalL,2)
          retval(superTrnd,3)
          retval(stämpel,7)

          draw(superTrnd,3,bqb)
          and(0,0)

          Comment


          • #50
            Hej

            tack för skriptuppdateringen Henric.
            Fick det att fungera och testar och utvärderar

            Comment


            • #51
              Hej,

              Vet Henrik eller någon annan om det är möjligt att porta koden att istället beräkna på ett extra objekt, t.ex. ett index?

              Comment


              • #52
                Jag har inte provat att loopa med extraobjekt. Du kan prova att köra med anpassning för extraobjekt och utan på samma instrument. Kör tex en affär per dag och använda extrakolumn för superTrnd. Jämför värdet av versionerna i Excel. Har inte tid just nu. Annars provar jag gärna vid ett senare tillfälle.

                Comment


                • #53
                  Jag kommer prova, jag återkommer när jag har något resultat.

                  Comment


                  • #54
                    En variant av Supertrend Indicator som använder extra objekt på OMXPI
                    En annan skillnad jämfört med tidigare skript i denna tråd är att jag använt andra retval idn, vilket inte bör spela någon roll men kan vara bra att känna till.


                    VäljBeräkning:=1 {atr=1 ema(true_range)=0}
                    Diagram:=0 {1=endast rita 0=sim,skarpt}
                    perioder:=10 {perioder för banden}
                    multiplier:=3 {bredden på banden}
                    längd:=250 {lookback för att vara säker på att kurvan är synkad}


                    idag=or(eqv(int(cmpref(d,0,A)),int(date())),Diagram)

                    Atg=atrex(perioder,A)
                    TrueR=ema(mx(mx(sub(cmpref(h,0,A),cmpref(l,0,A)),sub(cmpref(h,0,A),cmpref(c,1,A))),sub(cmpref(c,1,A),cmpref(l,0,A))),perioder)
                    Arange=if(Väljberäkning,Atg,TrueR)

                    HLA=div(add(cmpref(h,0,A),cmpref(l,0,A)),2)
                    BUB1=add(HLA,mult(multiplier,Arange))
                    BLB1=sub(HLA,mult(multiplier,Arange))

                    {nyperiod. undvika att animeringing uppdaterar sig själv}
                    stämpel=if(gt(mn(sub(cmpref(d,1,A),cmpref(d,2,A)),sub(cmpref(d,2,A),cmpref(d,3,A))),0.5),int(d),d)
                    nyperiod=and(gt(stämpel,getval(7)),idag)
                    retval(if(nyperiod,getval(1),getval(8)),8)
                    retval(if(nyperiod,getval(2),getval(5)),5)
                    retval(if(nyperiod,getval(9),getval(6)),6)

                    {initierar om startar från noll}


                    retval(if(and(eqv(getval(8),0),idag),aref(BUB1,längd),getval(8)),8)
                    retval(if(and(eqv(getval(5),0),idag),aref(BLB1,längd),getval(5)),5)
                    retval(if(and(eqv(getval(6),0),idag),if(aref(ge(cmpref(c,0,A),mov(cmpref(c,0,A),perioder,s)),längd),getval(5),getval(8)),getval(6)),6)
                    {retval(if(and(eqv(getval(6),0),idag),if(aref(ge(c,mov(c,perioder,s)),längd),getval(5),getval(8)),getval(6)),6)}


                    {Beräkna nya kurvor för perioden}
                    MaxVarv=if(eqv(getval(9),0),längd,1)
                    retval(0,0)
                    turns=retval(add(getval(0),1),0)
                    lookBack=sub(MaxVarv,turns)


                    BUB2=if(eqv(turns,MaxVarv),BUB1,aref(BUB1,lookBack))
                    BLB2=if(eqv(turns,MaxVarv),BLB1,aref(BLB1,lookBack))



                    FinalU=if(or(lt(BUB2,getval(8)),gt(cmpref(c,add(lookBack,1),A),getval(8))),BUB2,getval(8))
                    FinalL=if(or(gt(BLB2,getval(5)),lt(cmpref(c,add(lookBack,1),A),getval(5))),BLB2,getval(5))
                    loop(turns,MaxVarv)

                    superTrnd=if(or(and(eqv(getval(6),getval(8)),lt(cmpref(c,0,A),FinalU)),and(eqv(getval(6),FinalL),lt(cmpref(c,0,A),FinalL))),FinalU,FinalL)

                    retval(FinalU,1)
                    retval(FinalL,2)
                    retval(superTrnd,9)
                    retval(stämpel,7)

                    draw(superTrnd,3,bqb)

                    {@A(0,SX All-Sha)}

                    Comment


                    • #55
                      Intressant att du fick det att fungera med extra objekt. Kanske går att använda som trendfilter.

                      Comment


                      • #56
                        Ursprungligen postat av Henric Visa inlägg
                        Intressant att du fick det att fungera med extra objekt. Kanske går att använda som trendfilter.
                        I backtest blev det bättre i stundande nedgång då man kom ur ganska lämpligt. Dock över tid där det finns några "falskatrendskiften". Kanske behöver man labba lite med period osv. alternativt acceptera att man får en lägre risk till lägre avkastning

                        Comment


                        • #57
                          Hjälp med skriptet i verklig handel.
                          Jag har testat nedan script i ordermodell, I syfte att se om signalerna fungerar (inte tänkt för verklig handel).

                          Vid stick prov på ett antal aktier i backtest (simulering) ser det ok ut.
                          I verkligen handel på testkonto köps alla ansluta aktier vad jag kan se trots att det är extremt tydligt i graf att aktier befinner sig under trendlinjen..

                          Misstänker därmed att något i skriptet fungerar inte i verklig handel. Hjälp att analysera och hitta lösning för skriptet mottages tacksamt


                          VäljBeräkning:=1 {atr=1 ema(true_range)=0}
                          Diagram:=0 {1=endast rita 0=sim,skarpt}
                          perioder:=10 {perioder för banden}
                          multiplier:=3 {bredden på banden}
                          längd:=250 {lookback för att vara säker på att kurvan är synkad}
                          {//}


                          {------------------------------ SUPER TREND FILTER -------------------------------}


                          {------------------------------ SUPER TREND FILTER -------------------------------}

                          idag=or(eqv(int(d),int(date())),Diagram)

                          Atg=atr(perioder)
                          TrueR=ema(mx(mx(sub(h,l),sub(h,aref(c,1))),sub(aref(c,1),l)),perioder)
                          Arange=if(Väljberäkning,Atg,TrueR)

                          HLA=div(add(h,l),2)
                          BUB1=add(HLA,mult(multiplier,Arange))
                          BLB1=sub(HLA,mult(multiplier,Arange))

                          {nyperiod. undvika att animeringing uppdaterar sig själv}
                          stämpel=if(gt(mn(sub(aref(d,1),aref(d,2)),sub(aref(d,2),aref(d,3))),0.5),int(d),d)
                          nyperiod=and(gt(stämpel,getval(7)),idag)
                          retval(if(nyperiod,getval(1),getval(8)),8)
                          retval(if(nyperiod,getval(2),getval(5)),5)
                          retval(if(nyperiod,getval(9),getval(6)),6)

                          {initierar om startar från noll}
                          retval(if(and(eqv(getval(8),0),idag),aref(BUB1,längd),getval(8)),8)
                          retval(if(and(eqv(getval(5),0),idag),aref(BLB1,längd),getval(5)),5)
                          retval(if(and(eqv(getval(6),0),idag),if(aref(ge(c,mov(c,perioder,s)),längd),getval(5),getval(8)),getval(6)),6)

                          {Beräkna nya kurvor för perioden}
                          MaxVarv=if(eqv(getval(9),0),längd,1)
                          retval(0,0)
                          turns=retval(add(getval(0),1),0)
                          lookBack=sub(MaxVarv,turns)
                          BUB2=if(eqv(turns,MaxVarv),BUB1,aref(BUB1,lookBack))
                          BLB2=if(eqv(turns,MaxVarv),BLB1,aref(BLB1,lookBack))
                          FinalU=if(or(lt(BUB2,getval(8)),gt(aref(c,add(lookBack,1)),getval(8))),BUB2,getval(8))
                          FinalL=if(or(gt(BLB2,getval(5)),lt(aref(c,add(lookBack,1)),getval(5))),BLB2,getval(5))
                          loop(turns,MaxVarv)

                          superTrnd=if(or(and(eqv(getval(6),getval(8)),lt(c,FinalU)),and(eqv(getval(6),FinalL),lt(c,FinalL))),FinalU,FinalL)

                          retval(FinalU,1)
                          retval(FinalL,2)
                          retval(superTrnd,9)
                          retval(stämpel,7)

                          draw(superTrnd,3,bqb)


                          SetGVarIf(superTrnd,400,1)
                          test=getGvar(400)
                          OKTrnd=gt(c,superTrnd)


                          notPurchasedToday=gt(int(d),lasttrade(b,d))
                          notZeroPrice=gt(c,0)


                          orderCondition=and(and(and(notPurchasedToday,eqv(portfolio(v),0)),notZeroPrice),OKTrnd)

                          mult(orderCondition,1)

                          Comment


                          • #58
                            Ja, den kan hoppa ur trenden i rätt tid. Annars mest som trenföljande generellt. Många whipsaws blandat med bra affärer. Som du skriver kanske man måste labba med parametrarna.

                            Sista inlägget. Jag har inte kört retal/getval på flera instrumen samtidigt. De kanske är unika för scriptet, men inte instrumentet? En lösning i så fall skulle kunna vara att alltid loopa. Gör det hela långsammare.

                            Edit: Det kan ju också vara som du skriver. Dvs att scripten fungerar olika mellan simulering och skarpt. Det får man verkligen hoppas att det inte gör. Du kan testa att simulera respektive köra skarpt på några aktier individuellt. Då borde man veta om detta är orsaken. Annars testa att alltid loopa så varje aktier körs från scratch.
                            Last edited by Henric; 2021-09-29, 13:05.

                            Comment


                            • #59
                              Getval()/Retval()-celler är unika för scriptet och därmed också instrument.

                              Comment


                              • #60
                                En annan sak att test live är att använda max reserverad perioder. Tex aref(BUB1,lookBack:250)

                                Comment

                                Working...
                                X