Allmänt meddelande

Collapse
No announcement yet.

Supertrend Indicator

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

  • #31
    Tog fram supertrend med bara minnesceller. Borde fungera i både diagram och simulering. Har inte testat med getval i simulering. Jag bytte ut ema på true range till ATR. Nästan samma eller ändra själv tillbaka. Ni får kolla om den fungerar som tänkt. Fördelen är att det inte behövs historik innan den är synkad med nuet.

    Ops: inte korrigerat för den kan sättas flera gånger i samma period i simulering/skarpt. Återkommer med justering.

    perioder:=10
    multiplier:=3
    längd:=500

    Arange=atr(perioder)
    HLA=div(add(h,l),2)
    BUB1=add(HLA,mult(multiplier,Arange))
    BLB1=sub(HLA,mult(multiplier,Arange))
    retval(if(eqv(getval(3),0),if(aref(ge(c,mov(c,perioder,s)),längd),aref(BLB1,längd),aref(BUB1,längd)),getval(3)),3)

    retval(0,0)
    turns=retval(add(getval(0),1),0)
    lookBack1=sub(längd,turns)
    lookBack2=add(lookBack1,1)
    BUB2=if(eqv(turns,längd),BUB1,aref(BUB1,lookBack1))
    BLB2=if(eqv(turns,längd),BLB1,aref(BLB1,lookBack1))
    FinalU=if(or(or(eqv(getval(1),0),lt(BUB2,getval(1))),gt(aref(c,lookBack2),getval(1))),BUB2,getval(1))
    FinalL=if(or(or(eqv(getval(2),0),gt(BLB2,getval(2))),lt(aref(c,lookBack2),getval(2))),BLB2,getval(2))
    loop(turns,längd)

    superTrnd=if(or(and(eqv(getval(3),getval(1)),lt(c,FinalU)),and(eqv(getval(3),FinalL),lt(c,FinalL))),FinalU,FinalL)
    retval(FinalU,1)
    retval(FinalL,2)
    retval(superTrnd,3)

    draw(superTrnd,3,bqb)
    and(0,0)
    Last edited by Henric; 2021-09-10, 15:06.

    Comment


    • #32
      Använder 500 i loopen. Fungerar förmodligen med lägre tal.

      perioder:=10
      multiplier:=3
      längd:=500
      idag:=or(eqv(int(d),int(date())),1) {diagram=1 sim=0}

      Arange=atr(perioder)
      HLA=div(add(h,l),2)
      BUB1=add(HLA,mult(multiplier,Arange))
      BLB1=sub(HLA,mult(multiplier,Arange))
      retval(if(eqv(getval(6),0),if(aref(ge(c,mov(c,perioder,s)),längd),aref(BLB1,längd),aref(BUB1,längd)),getval(6)),6)

      nyperiod=gt(d,getval(7))
      retval(if(and(nyperiod,idag),getval(1),getval(4)),4)
      retval(if(and(nyperiod,idag),getval(2),getval(5)),5)
      retval(if(and(nyperiod,idag),getval(3),getval(6)),6)

      retval(0,0)
      turns=retval(add(getval(0),1),0)
      lookBack1=sub(längd,turns)
      lookBack2=add(lookBack1,1)
      BUB2=if(eqv(turns,längd),BUB1,aref(BUB1,lookBack1))
      BLB2=if(eqv(turns,längd),BLB1,aref(BLB1,lookBack1))
      FinalU=if(or(or(eqv(getval(4),0),lt(BUB2,getval(4))),gt(aref(c,lookBack2),getval(4))),BUB2,getval(4))
      FinalL=if(or(or(eqv(getval(5),0),gt(BLB2,getval(5))),lt(aref(c,lookBack2),getval(5))),BLB2,getval(5))
      loop(turns,längd)

      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(d,7)

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

      Comment


      • #33
        Jag lade in ett val mellan atr och ema(true_range). Banden skiljer sig något. Det stora rörelserna kommer att ändå att fångas med båda metoderna. Eftersom som att det är trendföljande(positiv-skew) kommer några mindre vändningar att skilja, men det jämnar nog ut sig i längden. Dessutom används periodens range vid diagramritning och föregående för sim/skarpt. Annars skulle den kunna bli för låg i början av en stapel och kortare periodval(vem vet?). I fall någon testar vore det bra med feedback från simulering.


        {// Olika val}
        VäljBeräkning:=0 {atr=1 ema(true_range)=0}
        Diagram:=1 {1=endast rita eller utan animering, 0=sim,skarpt}
        perioder:=10
        multiplier:=3
        längd:=500 {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(Diagram,if(Väljberäkning,Atg,TrueR),if(Väljberäkning,aref(Atg,1),aref(TrueR,1)))

        HLA=div(add(h,l),2)
        BUB1=add(HLA,mult(multiplier,Arange))
        BLB1=sub(HLA,mult(multiplier,Arange))
        retval(if(and(eqv(getval(6),0),idag),if(aref(ge(c,mov(c,perioder,s)),längd),aref(BLB1,längd),aref(BUB1,längd)),getval(6)),6)

        nyperiod=gt(d,getval(7))
        retval(if(and(nyperiod,idag),getval(1),getval(4)),4)
        retval(if(and(nyperiod,idag),getval(2),getval(5)),5)
        retval(if(and(nyperiod,idag),getval(3),getval(6)),6)

        retval(0,0)
        turns=retval(add(getval(0),1),0)
        lookBack1=sub(längd,turns)
        {lookBack2=add(lookBack1,1)}
        BUB2=if(eqv(turns,längd),BUB1,aref(BUB1,lookBack1))
        BLB2=if(eqv(turns,längd),BLB1,aref(BLB1,lookBack1))
        FinalU=if(or(or(eqv(getval(4),0),lt(BUB2,getval(4))),gt(aref(c,add(lookBack1,1)),getval(4))),BUB2,getval(4))
        FinalL=if(or(or(eqv(getval(5),0),gt(BLB2,getval(5))),lt(aref(c,add(lookBack1,1)),getval(5))),BLB2,getval(5))
        loop(turns,längd)

        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(d,7)

        draw(superTrnd,3,bqb)

        and(0,0)

        Comment


        • #34
          Nu fick jag det att synka med globala celler i simulatorn(givetvis måste globala cellerna hinna uppdateras då den versionen inte kan gå tillbaka i tiden). Tror att den även fungerar med olika upplösningar.

          {// Olika val}
          VäljBeräkning:=1 {atr=1 ema(true_range)=0}
          Diagram:=0 {1=endast rita 0=sim,skarpt}
          perioder:=10
          multiplier:=3
          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(Diagram,if(Väljberäkning,Atg,TrueR),if(Väljberäkning,aref(Atg,1),aref(TrueR,1)))

          HLA=div(add(h,l),2)
          BUB1=add(HLA,mult(multiplier,Arange))
          BLB1=sub(HLA,mult(multiplier,Arange))
          retval(if(and(eqv(getval(6),0),idag),if(aref(ge(c,mov(c,perioder,s)),längd),aref(BLB1,längd),aref(BUB1,längd)),getval(6)),6)

          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(and(nyperiod,idag),getval(1),getval(4)),4)
          retval(if(and(nyperiod,idag),getval(2),getval(5)),5)
          retval(if(and(nyperiod,idag),getval(3),getval(6)),6)

          retval(0,0)
          turns=retval(add(getval(0),1),0)
          lookBack=sub(längd,turns)
          BUB2=if(eqv(turns,längd),BUB1,aref(BUB1,lookBack))
          BLB2=if(eqv(turns,längd),BLB1,aref(BLB1,lookBack))
          FinalU=if(or(or(eqv(getval(4),0),lt(BUB2,getval(4))),gt(aref(c,add(lookBack,1)),getval(4))),BUB2,getval(4))
          FinalL=if(or(or(eqv(getval(5),0),gt(BLB2,getval(5))),lt(aref(c,add(lookBack,1)),getval(5))),BLB2,getval(5))
          loop(turns,längd)

          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,rqb)
          and(0,0)

          Comment


          • #35
            Hej,

            jag försökte testa i simulatorn men tror inte att jag får det att fungera.
            Gjorde ett enkelt entry villkor att bara tillåta köp när pris över "superTrnd" och tittade i grafen om köp sker under. Konstaterade att entry tas oavset över eller under "superTrnd".

            försökte utvärdera om det fungerar genom att hämta värdet i simulatorn med extrakolumner genom getval(4) dvs "superTrnd" och får alltid värdet 0.

            i debuggern får jag också 0 på flera variabler. Se bifogad bild.
            I diagram med Diagram:=1 ser det bra ut, men inte med Diagram:=0.

            Nu är jag osäker på om det är NAT begränsningar, t.ex. att debuggern inte kan visa vissa variabler, eller om det inte fungerar att använda getval(4) som extra skriptkolumn i analyzer och läsa ut vilket värde "superTrnd" har.

            Tacksam för lite vägledning och tips.
            Attached Files

            Comment


            • #36
              Jag får signaler på rätt sida. Sparar superTrnd i en global cell och värdet visas i en extrakolumn vid signal. Tänk även på att kurvan kan slå under dagen. I grafen visas bara utgående värde. Annars intressant varför du får signal på fel sida.

              Edit1:
              Arange=if(Diagram,if(Väljberäkning,Atg,TrueR),if(Väljberäkning,aref(Atg,1),aref(TrueR,1)))

              Denna var inte meningen att göra diagramritning exakt lika med med simulering. Diagram är alltid sista insamlingen i stapeln och struntar i vad som händer inne i stapeln. Jag valde att använda aref i simuleringen för att inte början av en stapel ska kunna få för små värden. Det kanske inte har någon större betydelse(vet ej) och skulle kunna påverka några signaler marginellt. Du kan prova att ändra Arange till if(Väljberäkning,AtG,TrueR).

              Edit2:
              Jag har ändrat Arange till: Arange=if(Väljberäkning,AtG,TrueR)
              Det gör det enklare. Sedan får man själv avgöra i början av dagen. Jag får med dagsstaplar fortfarande rätt signaler och värde på superTrnd. Använd inte animering i bänken om du ska jämföra diagrammet med simulering. Reservation att aktuell börsdag kan avvika då ny data kommer in. Sedan kan jag tänka mig att getval inte är det bästa sättet in en extrakolumn då värdet förmodligen inte kan flyttas mellan scripten. Använd eller spara värden i globala celler. Jimmy, återkoppla gärna för att bekräfta om det fungerar. Bra att veta.

              Edit3:
              Om man ändrar någon konfig slår den inte igenom direkt i diagrammet. Tex gör en ändring i bänken och ser sedan att signalerna kommer på fe sida av supertrend. Diagrammet behöver då "refreshas". Jimmy, kanske inte är det som hände för dig. Värt att tänka på.
              Last edited by Henric; 2021-09-15, 13:19.

              Comment


              • #37
                Hej Henrik,

                tack hjälpen. Jag har tyvärr inte fått det att fungera. Delar testskript jag provat med. Köp sker varje dag om köp inte redan gjorts samma dag. Samt en säljmodell som säljer om innehav finns.

                Har använt skriptet i tråden och ändrat enligt EDIT2.
                Jag kör med annimering. Om jag inte använder annimering blir blir inga avslut då skriptet handlar på dagen.
                Har testat på ABB. Bifogat diagram.
                Provade att skriva värde till gobalvariable 400 och läsa ut med extrakolumn som visar 0.

                Jag tycker det ser ok, men oklart vad som ställer till det. Kommer du på något tips så är jag mycket tacksam


                {// Olika val}
                VäljBeräkning:=1 {atr=1 ema(true_range)=0}
                Diagram:=0 {1=endast rita 0=sim,skarpt}
                perioder:=10
                multiplier:=3
                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))
                retval(if(and(eqv(getval(6),0),idag),if(aref(ge(c,mov(c,perioder,s)),längd),aref(BLB1,längd),aref(BUB1,längd)),getval(6)),6)

                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(and(nyperiod,idag),getval(1),getval(4)),4)
                retval(if(and(nyperiod,idag),getval(2),getval(5)),5)
                retval(if(and(nyperiod,idag),getval(3),getval(6)),6)

                retval(0,0)
                turns=retval(add(getval(0),1),0)
                lookBack=sub(längd,turns)
                BUB2=if(eqv(turns,längd),BUB1,aref(BUB1,lookBack))
                BLB2=if(eqv(turns,längd),BLB1,aref(BLB1,lookBack))
                FinalU=if(or(or(eqv(getval(4),0),lt(BUB2,getval(4))),gt(aref(c,add(lookBack,1)),getval(4))),BUB2,getval(4))
                FinalL=if(or(or(eqv(getval(5),0),gt(BLB2,getval(5))),lt(aref(c,add(lookBack,1)),getval(5))),BLB2,getval(5))
                loop(turns,längd)

                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,rqb)
                and(0,0)
                SetGVarIf(superTrnd,400,1)

                OKTrnd=gt(c,superTrnd)


                tradingPeriodBeforeMarketClose=le(mult(1440,sub(market(c),frac(date()))),230)
                minutesBeforeMarketClose=ge(mult(1440,sub(market(c),frac(date()))),5)

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


                orderCondition=and(and(and(and(and(OKTrnd,tradingPeriodBeforeMarketClose),minutesBeforeMarketClose),notPurchasedToday),eqv(portfolio(v),0)),notZeroPri ce)


                mult(orderCondition,1)
                Attached Files

                Comment


                • #38
                  and(0,0) ska inte vara med i simulering.

                  Diagrammet intrdag? Scriptet är i dagsupplösning.

                  Om man kör animering kan det hända att signalerna skiljer.

                  Konstigt att du inte kan skriva värdet i cell 400. Jag skriver på samma sätt. Hur ser extrakolumnen ut?

                  Edit: Bild superTrnd ABB dagskurser
                  Attached Files
                  Last edited by Henric; 2021-09-15, 21:32.

                  Comment


                  • #39
                    hvordan ser dit salgs script ud ?

                    det ser ud til at (salgs script) det bliver triggeret hele tiden.

                    Comment


                    • #40
                      Jag har inte tillgång till scriptet idag. Det finns ingen anledning att beräkna superTrnd i båda scripten.
                      Tex:

                      1. Spara superTrnd i en cell. Sant hela tiden.
                      2. Kör utan animering eller tex mellan två tidpunkter för att handla.
                      3. Köp om c >superTrnd, portfolio(v)=0, ingen sälj idag och eventuellt tid enl. ovan
                      4.Sälj om c<cellen enl. ovan, portfolio(v)>0, inget köp idag, eventuellt tider

                      Dtälk Diagram=0

                      Comment


                      • #41
                        Ursprungligen postat av Kemog Visa inlägg
                        hvordan ser dit salgs script ud ?

                        det ser ud til at (salgs script) det bliver triggeret hele tiden.
                        Syftet med skriptet jag delade är endast felsökning och bekräfta att beräkningen av super trend fungerar. Det är inte en riktig handelsmodell. Därav väljer i testsyfte jag att köpa en gång om dagen och sälja direkt efter att position finns.

                        Comment


                        • #42
                          Förstår. Kemog frågade. Jag tänkte mer på att det då blir lätt att jämföra värdet på superTrnd mot diagrammet.

                          Jimmy, ditt diagram var väl intrdag och därför annan kurva på superTrnd?

                          Comment


                          • #43
                            Svar Henrik

                            Stort tack Henrik, nu fungerar testskriptet. Jag tror det var efter att ha tagit bort: and(0,0) eller att jag skapade en kopia på simulator-projektet.

                            Extrakolumnen visar nu värden istället för 0.

                            Bifogar diagram.


                            Jag noterade att simuleringen tog avsevärt mycket längre tid jämfört med tidigare, så jag antar att skriptet inte körts korrekt tidigare.

                            jag antar att det är loop(turns,längd) och längd:=250 som gör att det är en väldigt resurskrävande beräkning. Om man behöver optimera skriptet så att det drar minimalt med resurser. t.ex. för att klara av koppla på väldigt många instrument. Har du förslag på vad man kan göra för att optimera skriptet men med bibehållen filterfunktion för handel/simulering?

                            Attached Files

                            Comment


                            • #44
                              Ursprungligen postat av Henric Visa inlägg
                              Förstår. Kemog frågade. Jag tänkte mer på att det då blir lätt att jämföra värdet på superTrnd mot diagrammet.

                              Jimmy, ditt diagram var väl intrdag och därför annan kurva på superTrnd?
                              diagrammet var dagsupplösning.

                              Comment


                              • #45
                                Jag har redan gjort en ändring som gör scriptet mycket snabbare. Lägger ut i kväll eller imrgon.

                                Comment

                                Working...
                                X