Allmänt meddelande

Collapse
No announcement yet.

RSI Stochastic MACD med extraobjekten A,B,C

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

  • RSI Stochastic MACD med extraobjekten A,B,C

    Från AT 6 finns ju möjligheten att arbeta med 4 olika objekt i valfria upplösningar i samma script.

    För att referera till dessa extra objekt använder man funktionen

    CmpRef(d,p,ABC)

    Första parametern 'd' är ju en dataparameter som kan vara konstanterna C för Close, V för Volume osv.

    Detta gör ju att funktionen i scriptspråket som tar en dataparameter går att använda även på extraobjekten.

    Men några populära scriptfunktioner har inte den parametern utan är förutbestämt att plocka vissa värden.

    Bland dessa funktioner är RSI, Stochastic och MACD.

    För att kunna använda dessa kan du skriva dem i scriptspråket. Jag delar här med mig av script för detta ändamål.


    MACD() kan också skrivas

    Osc(c,12,26,e)

    Då kan du också välja om perioder om du skulle vilja.

    Trigger kurvan för macd nedan

    mac:=Osc(c,12,26,e)
    mov(mac,9,e)

    Om vi tar ett exempel med macd på ett av de extra objekten i detta
    fallet B-objektet

    mac:=Osc(CmpRef(c,0,B),12,26,e)
    mat:=mov(mac,9,e)

    'mac' ovan plockar huvudkurvan för MACD för objekt B.
    'mat' ovan plockar triggerkurvan för MACD för objekt B

    B-objektet har du ju valt separat då vilket papper det gäller och vilken
    upplösning.

    Wilders RSI med skala 0-100

    period:=14
    a1:=if(gt(c,ref(c,1)),sub(c,ref(c,1)),0)
    d1:=if(lt(c,ref(c,1)),sub(ref(c,1),c),0)
    as1:=mov(a1,period,s)
    ds1:=mov(d1,period,s)
    wrsi:=sub(100,div(100,add(div(as1,ds1),1)))


    Detta kan du göra om så det blir CmpRef() om det är objekt A istället så
    här:

    period:=14
    a1:=if(gt(cmpRef(c,0,A),Cmpref(c,1,A)),sub(CmpRef(c,0,A),Cmpref(c,1,A)),0)
    d1:=if(lt(CmpRef(c,0,A),Cmpref(c,1,A)),sub(Cmpref(c,1,A),CmpRef(c,0,A)),0)
    as1:=mov(a1,period,s)
    ds1:=mov(d1,period,s)
    wrsi:=sub(100,div(100,add(div(as1,ds1),1)))

    'wrsi' här kan du alltså använda i ditt övriga script.

    Om du vill använda skala 0-100 även på övriga scriptet standardobjektet
    så kan du använda rsiw() som är synonym med detta ovan.(ej dokumenterad
    funktion).

    Stochastic på objekt A

    mp1:=3
    stp:=5
    stck1:=sub(hhv(cmpref(h,0,A),stp),llv(cmpref(l,0,A),stp))
    stck2:=sub(cmpref(c,0,A),llv(cmpref(l,0,A),stp))
    st60m:=div(mult(stck2,100),stck1)
    st60slow:=mov(st60m,mp1,s)

    'st60m' är Stochastic självt
    'st60slow' är en uppmjukad stochastic(medelvärde 3 perioder)

    Valet av namn här 'st60..' syftar på att i detta fallet hade man valt objekt A att vara i 60-minuter upplösning. Det blir förståss den upplösning som du väljer för objektet.


    Vet inte hur Forum kommer att bryta raderna ovan, så se upp med konstiga radbrytningar när du kopiera scripttexten.



  • #2
    terror

    Hej lasse!
    med min nuvarande förmåga att skriva skript är jag glad om jag får andras skript att fungera.
    Jag får error när jag testar dina 3 skript så nu är jag inte glad:{

    Comment


    • #3
      Dessa script ovan är skrivna för att vara delar av ett script, dvs de är bara definitioner.

      Så du måste använda respektive script också på samma sätt som vi gjort tidigare dvs om vi tar 'wrsi'-raden så måste du skriva

      wrsi

      på en rad som inte har := på sig. Det är först då som du använder koden.

      Exempel

      period:=14
      a1:=if(gt(c,ref(c,1)),sub(c,ref(c,1)),0)
      d1:=if(lt(c,ref(c,1)),sub(ref(c,1),c),0)
      as1:=mov(a1,period,s)
      ds1:=mov(d1,period,s)
      wrsi:=sub(100,div(100,add(div(as1,ds1),1)))
      wrsi

      så blir det komplett för att köra kurva.

      period:=14
      a1:=if(gt(c,ref(c,1)),sub(c,ref(c,1)),0)
      d1:=if(lt(c,ref(c,1)),sub(ref(c,1),c),0)
      as1:=mov(a1,period,s)
      ds1:=mov(d1,period,s)
      wrsi:=sub(100,div(100,add(div(as1,ds1),1)))
      gt(wrsi,80)

      testar om 'wrsi' är större än 80 och ger då flagga.

      osv osv


      Definitionerna med := på en rad körs ju aldrig i sig, utan stoppas in på andra ställen. Ett kortare namn för ett längre uttryck alltså.

      Det är bara att ta det lugnt och metodiskt.

      Comment


      • #4
        Tack Lasse!
        Det är trångt att komma igenom pärle porten:}
        ett par frågor
        #1 det skrivs om Torstens "godislåda" här,hur finner jag dessa praliner?

        #2 hur tackar man för svar här på bästa sätt, om man är nöjd och glad men har inget mer att tillföra?
        Det är sällan man ser att ni som svarar får nån kredit för ert slit.

        Comment


        • #5
          "Tack" räcker bra.

          Kolla nu om du inte ser Torstens godislåda.

          Alla som är intresserade av denna och inte ser den kan bara maila mig så ordnar jag det.

          Comment


          • #6
            cmpref och MACD2 ??

            MACD() kan också skrivas

            Osc(c,12,26,e)

            Då kan du också välja om perioder om du skulle vilja.

            Trigger kurvan för macd nedan

            mac:=Osc(c,12,26,e)
            mov(mac,9,e)

            Om vi tar ett exempel med macd på ett av de extra objekten i detta
            fallet B-objektet

            mac:=Osc(CmpRef(c,0,B),12,26,e)
            mat:=mov(mac,9,e)

            'mac' ovan plockar huvudkurvan för MACD för objekt B.
            'mat' ovan plockar triggerkurvan för MACD för objekt B

            B-objektet har du ju valt separat då vilket papper det gäller och vilken
            upplösning.

            Kan detta appliceras på MACD2? I så fall hur? Vill mha cmpref kunna laborera med korsning av kurvorna, lutning och inbördes position bl.a...

            Comment


            • #7
              Absolut, man får skriva oscillator-beräkningen via medelvärden istället:

              mv1:=12
              mv2:=26
              close=cmpref(c,0,b)
              m1=ema(close,mv1)
              m2=ema(close,mv2)
              diff=sub(m1,m2)
              mcd=ema(diff,9)

              Comment


              • #8
                Testar... men stämmer inte riktigt med den MACD som finns som standard. Nu gissar jag här, men Rikard, din kod gäller MACD och inte MACD2 som standardknappen visar!?? (Jag kör version 2.0.0.9)

                Comment


                • #9
                  Det är MACD2, men har du definierat extra objektet? Och kör du 12,26,9 i standardknappen?

                  Comment


                  • #10
                    Ursprungligen postat av swedtraders Visa inlägg
                    (Jag kör version 2.0.0.9)
                    Envisa typ.

                    Comment


                    • #11
                      Ja, extra objektet är definierat, och ja standardknappen körs på 12,26,9. Kurvorna är ganska lika men det är tydligt att de inte är helt lika. Mitt script för att testa att rita ut MACD2 (i MACD-fältet eller Analys 1) ser ut såhär:

                      mv1:=12
                      mv2:=26
                      mv3:=9

                      close=cmpref(c,0,a)
                      m1=ema(close,mv1)
                      m2=ema(close,mv2)
                      diff=sub(m1,m2)
                      mcd=ema(diff,mv3)

                      {@A(15,OMX Stock )}


                      Kanske nåt uppenbart och dumt fel i scriptet?

                      Comment


                      • #12
                        Skalningsskillnad gissar jag, MACD-knappen använder ju två kurvor, där den snabba skalar diagrammet och triggerkurvan är satt till skalning med parameter "p" för Previous. Om du skalar scriptet ovan Automatiskt blir det skalning baserat enbart på triggerkurvan. De är egentligen identiska men skalas olika i diagrammet.

                        Comment


                        • #13
                          Skalning tror jag också.
                          Använd alltid draw när du vill rita kurvor så kan du styra exakt vad du vill se.
                          Ändrade kanelbullen också så att du får in kurvan för samma diagram du testar på.



                          { Swedtest }

                          mv1:=12
                          mv2:=26
                          mv3:=9

                          close=cmpref(c,0,a)
                          m1=ema(close,mv1)
                          m2=ema(close,mv2)
                          diff=sub(m1,m2)
                          mcd=ema(diff,mv3)

                          Draw(diff,2,bra)
                          Draw(mcd,3,rpaw)

                          mult(1,0)

                          {@A(15,)}

                          Comment


                          • #14
                            Fortfarande inte samma!

                            ...Spelar tydligen ingen roll för det blir samma resultat med draw som tidigare när jag körde utan...! Kurvorna ÄR olika, det är alltså inte bara skalningen som är problemet. Maxima och minima kommer på olika ställen när man jämför standardknappens o scriptets kurvor! Får NI samma utseende på kurvorna när ni testar???

                            Comment


                            • #15
                              Vad är det som skiljer?

                              I bifogad bild är den nedersta delen det som scriptet ovan ritar och delen ovanför är den inbyggda Macd.
                              Attached Files

                              Comment

                              Working...
                              X