Allmänt meddelande

Collapse
No announcement yet.

Moderna Medelvärden

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

  • Moderna Medelvärden

    Jag har inte hittat att dagens moderna medelvärderna finns upplagda och samlade någonstans.
    Här kommer en sammanställning som man kan labba lite med.
    Sammanställningen är gjort i ett enda script som anpassar sig till den upplösning man valt i diagrammet.

    Formlerna för uträkningarna av respektive medelvärde är utlagda inom klammerparenteser i rubriken för respektive medelvärde så man kan följa beräkningarna i NAT-språket.

    Tema, Dema, Gd, T3 utgår från medelvärdet m1.
    ie/2 samt tma utgår från egna medelvärden.

    Man kan naturligtvis ersätta m1 (samt de andra medelvärderna) med andra favoriter för att se hur dessa påverkas. (man kan exemelvis ta ema istället för som jag valt NAT:S "e-variant"). Periodlängd och k1 kan ställas i scriptet så man kan se hur detta påverkar.

    Man kan väl säga som så att tema, dema, gd, t3n och ie/2 "överdriver" grundmedelvärdet på lite olika sätt, medan tma smetar ut det.

    Det enda moderna medelvärdet som inte kan scriptas i NAT-språket är AMA (adaptiv moving average) och detta enbart för att det inte går att generera någon dataserie. Det är väldigt synd för det är ett medelvärde man kan göra väldigt många bra och intressanta saker med. Det har funnits på marknaden sedan mitten av 90-talet och jag tycker det är på tiden att detta medelvärde läggs in i NAT-språket som standard. Det är en kod som är väldigt lätt och tar inte lång tid att skriva i C-språket.
    Det finns en gammal tråd om detta här:
    http://www.autostock.se/vbulletin/sh...daptive+moving

    Håll till godo.




    EDIT 20131201: AMA finns numera inlagd i NAT-språket från version 2.1.2.12.
    En ny tråd om ama finns här:
    http://www.autostock.se/vbulletin/showthread.php?t=3417





    { TEMA (tripple) and DEMA (double) exponential moving averages. Även GD, T3, IE/2 samt TMA (triangular sma) }
    { Detta script är skrivet så att kurvorna anpassas till den upplösning som väljs i diagrammet }

    per:=20
    K1:=1


    { Vanligt medelvärde mv1 som tema, dema, gd och t3n utgår ifrån }
    mv1=mov(c,per,e)
    mv2=mov(mv1,per,e)
    mv3=mov(mv2,per,e)

    {TEMA=3 * EMA – 3 * EMA of EMA + EMA of EMA of EMA }
    TEMA=add(sub(mult(3,mv1),mult(3,mv2)),mv3)


    {DEMA=2 * EMA - EMA of EMA }
    DEMA=sub(mult(2,mv1),mv2)


    { GD generalized DMA (med k1=1 är detta detsamma som DEMA) }
    GD=sub(mult(add(k1,1),mv1),mult(k1,mv2))


    { T3(n) = GD(GD(GD(n))) (Tim Tillson's medelvärde) }
    T1=sub(mult(add(k1,1),mov(c,per,e)),mult(k1,mov(mov(c,per,e),per,e))) { GD explicit }
    T2=sub(mult(add(k1,1),mov(T1,per,e)),mult(k1,mov(mov(T1,per,e),per,e)))
    T3n=sub(mult(add(k1,1),mov(T2,per,e)),mult(k1,mov(mov(T2,per,e),per,e)))


    { IE/2 (Tim Tillson's medelvärde) }
    ILRS=add(linreg(c,per,-1),mov(c,per,s))
    EPMA=linreg(c,per)
    IE2=div(add(ilrs,epma),2)


    { TMA = (SMA1 + SMA2 ... SMAn) / n (Triangular moving average) }
    { TMA på SMA ger nära nog samma kurva som T3n med k=0 }
    mv4=mov(c,per,s)
    TMA=div(sum(mv4,per),per)


    draw(mv1,0,bqbw)
    draw(tema,1,dgqbw)
    draw(dema,2,dmqbw)
    draw(ie2,3,mqbw)
    draw(gd,4,cqbw)
    draw(t3n,5,kqb)
    draw(tma,6,rqbw)


    mult(0,1)
    Last edited by LillWicke; 2013-12-01, 14:42.

  • #2
    Tack så mycket! Mycket intressant. Nästan alla mina script bygger ju på medelvärden av olika typer. Jag har en hel del egna bastarder av medelvärden där jag tar medelvärdet av medelvärden med olika perioder, där jag bildar medelvärden med hjälp av ett antal Aref mm.
    En bra medelvärdesmetod är både utsmetande (tar bort brus) och snabb (liten fördröjning).
    Bifogar ett dåligt exempel på hur man kan lattja själv (bara för att stimulera fantasin hos er andra scriptare:
    stycken1:=18
    i1(
    carpe=Div(Add(b,s),2)
    nuslang1=Mov(carpe,stycken1,e)
    dåslang1=Aref(nuslang1,3)
    urslang1=Aref(nuslang1,14)
    Höga1=Hhv(nuslang1,20)
    Höga2=Hhv(dåslang1,20)
    Höga3=Hhv(urslang1,20)

    Låga1=Llv(nuslang1,20)
    Låga2=Llv(dåslang1,20)
    Låga3=Llv(urslang1,20)
    kurva3=Div(Add(Add(Add(Add(Add(Add(Add(höga1,höga2),höga3),låga1),låga2),låga3),nuslang1),dåslang1),8)
    kurva4=Linreg(kurva3,10)
    kurva1=Div(Add(kurva3,kurva4),2)
    Draw(carpe,1,dgqb0)
    Draw(kurva1,3,bqb0)
    ...
    mvh
    Bertil
    Last edited by Bertil; 2013-08-14, 16:39.

    Comment


    • #3
      Snyggt Bertil
      Du glömde definitionen på stycken1 dock.

      Jag kan rita ut kurva3 men inte 1 och 4. Kan inte i en hast se vad detta beror på.
      Ska titta vidare sedan.

      Comment


      • #4
        Ursprungligen postat av LillWicke Visa inlägg
        Snyggt Bertil
        Du glömde definitionen på stycken1 dock.

        Jag kan rita ut kurva3 men inte 1 och 4. Kan inte i en hast se vad detta beror på.
        Ska titta vidare sedan.

        Som jag sa, det är bara ett dåligt exempel som jag använt att labba med. Har samma problem som du, blir nog för invecklade formler för NAT.
        mvh
        Bertil

        Comment


        • #5
          Förenklar man till
          kurva3=Div(Add(Add(Add(Add(Add(Add(höga1,höga2),höga3),låga1),låga2),låga3),nuslang1),7)

          så kan man plotta kurva1

          Men då man jämför kurva1 med mov(carpe,40) så blir resultatet nästan identiskt. Mycket jobb för lite ull som bonden sa då han klippte grisen.
          mvh
          Bertil
          Last edited by Bertil; 2013-08-14, 17:03.

          Comment


          • #6
            >>Men då man jämför kurva1 med mov(carpe,40) så blir resultatet nästan identiskt.
            >>Mycket jobb för lite ull som bonden sa då han klippte grisen.

            Varianten "mycket skrik för lite ull" har jag också hört.

            Men inget ont som inte har något "gott" med sig. Det är faktiskt så att ditt script har avslöjat en "bugg" i programmet. I detta fallet räknar NAT fel i "kurva4=LinReg()" även om man istället använder mov() eller andra funktioner. NAT lägger den uträknade kurvan en bra bit över eller under indexkurvan. I bild1 har linreg() beräknats med perioden 3 och i bild2 har den beräknats med perioden 7.

            Jag får skicka en rapport om detta till Rickad.

            Attached Files

            Comment


            • #7
              Här kommer dagens bidrag till knasiga medelvärden. Man kan ta en eller flera kvadratrötter ur sin kurva innan man medelvärdesbildar
              i1(
              carpe=Div(Add(b,s),2)
              kurva7=Mov(sqrt(carpe),30,e)
              kurvaa=Mov(sqrt(kurva7),30,e)
              kurva9=Mov(sqrt(kurvaa),30,e)
              kurvab=Mult(kurva9,kurva9)
              kurvac=Mult(kurvab,kurvab)
              kurva8=Mult(kurvac,kurvac)
              Draw(kurva8,3,bqb0)

              {Här är en annan variant där man först tar ett långsamt medelvärde, sedan subtrahrar man detta medelvärde från sin kurva (carpe). Sedan kan man ta kvadratroten ur denna skillnad en eller flera gånger, för att till slut addera till det långsamma medelvärdet. }

              slinga1=Mov(carpe,100)
              Draw(slinga1,1,dgqb1)
              tecken=If(Gt(Sub(carpe,slinga1),0),1,-1)
              diff1=Abs(Sub(carpe,slinga1))
              diff2=sqrt(diff1)
              diff3=Mult(tecken,diff2)
              slinga2=Add(slinga1,diff3)
              Draw(slinga2,3,mqb0)
              slinga3=Mov(slinga2,30,e)
              Draw(slinga3,4,dgqb0)
              slinga4=Mov(Div(Add(kurva8,slinga3),2),20,e)
              Draw(slinga4,5,kqbw)

              Jag har dock inte klurat ut hur jag skall tjäna pengar på ovanstående medelvärden, och det är ju det som är själva tricket.
              mvh
              Bertil
              Attached Files
              Last edited by Bertil; 2013-08-15, 20:35.

              Comment


              • #8
                Den där svarta är misstänkt likt ett vanligt medelvärde måste jag säga.

                Är det nya grisar som ska klippas?

                Attached Files

                Comment


                • #9
                  Ursprungligen postat av LillWicke Visa inlägg
                  Den där svarta är misstänkt likt ett vanligt medelvärde måste jag säga.

                  Är det nya grisar som ska klippas?

                  Den svarta är kanske en klippt gris, men den magentafärgade slinga2 är ju lite annorlunda. Den har ju ingen fördröjning som vanliga medelvärden har.
                  mvh
                  Bertil
                  Last edited by Bertil; 2013-08-15, 22:11.

                  Comment


                  • #10
                    Liiiite fördjöjning tycker jag nog att den har.
                    Men den ser ju ut som värsta tvättbrädan.

                    Comment


                    • #11
                      I dagens värld är det flera instrument som handlas nästan dygnet runt, t.ex guld och silver, medan man bara kan handla derivat då svenska marknaden är öppen. (Man skulle ju även kunna handla derivat i USA men det blir väldigt trixigt att kombinera samt att man inte kan ha valutadepå i dollar på ISK/Kapitalförsäkring, utan det blir till att växla.)

                      Denna tråd handlar ju om medelvärden. Om instrumentkursen ändras mycket då svenska marknaden är stängd kommer ju kursen att öppna med ett trappsteg ner eller upp. På bear/bull silver har jag ett medelvärde på 3000 minuter i1 som triggar min handel.

                      Första minuten på morgonen kommer ju kursen efter trappsteget bara in som ett värde av 3000, sedan tar det ju 3000 minuter innan det slagit igenom och på den tiden har det tillkommit flera nya trappsteg.

                      Tricket med medelvärden är ju just att man vill ha en utjämning med minimal tidsfördröjning. Antag nu att instrumentet även handlas då USA är öppet dvs under 270 minuter efter det Sverige stängt. Då Sverige öppnar på morgonen vill jag ta medelvärdet av öppningskursen och gårdagens slutkurs och vikta in det med 270 minuter i 3000 minuters medelvärde.

                      Gårdagens slutkurs får man med
                      i1(
                      slutkurs=Cmpref(c,1,a)
                      ...
                      )
                      {@A(0,)}

                      Nu handlar jag ju derivat som inte har avslut alla dagar. Då kan man istället använda sig av köp och/eller säljkurs. Fungerar utmärkt för medelvärden intradag. Däremot inte för dagskurser!

                      BUGG: Om det inte finns något avslut en dag så finns heller inte någon köp eller säljkurs i dagsupplösning för den dagen. Kurvan får senaste avslutskurs även om den skett för flera dagar sedan och köp och säljkurs hänger med från detta datum istället för att presenteras korrekt för alla dagar. Visst man skulle kunna räkna om i minutupplösning och filtreringsmässigt få fram gårdagens slutköpkurs, men det gör man inte ostraffat för 5-6 dagar tillbaka.

                      Så nu kan jag inte gå vidare med min medelvärdesidé.
                      Med vänlig hälsning
                      Bertil

                      Comment


                      • #12
                        Istället för att få dagsmedelvärden genom {@A(0,)} skulle man kunna definiera en period på 510 minuter (= 1 dag) så här {@A(510,)} så går man runt ovanstående bugg. Detta kan man tyvärr inte göra. Största tillåtna värdet är ½ dag dvs {@A(254,)}. Detta borde man kunna använda efter filtrering. Får klura på detta. Återkommer...
                        Med vänlig hälsning
                        Bertil

                        Comment


                        • #13
                          Har lyckats få till medelvärden som väger in kurserna då svenska börsen är stängd. Men det gav inte så mycket på stora medelvärden typ 3000 minuter.
                          Med vänlig hälsning
                          Bertil

                          Comment


                          • #14
                            Här är dagens bidrag till knasiga medelvärden.
                            Allmänt gäller ju att om man medelvärdesbildar för många perioder så får man en kraftig fördröjning som gör att handelstillfället går förlorat. Har man för få perioder att medelvärdesbilda så får man istället in ovidkommande brus. Vad man egentligen vill ha är en medelvärdesbildning med dynamiskt antal perioder! Hur skall man då resonera? Man utgår från ett medelvärdesantal som stämmer bra överens med den handelsfrekvens som man önskar. Om kursen trendar vill man öka periodtiden för att inte få in brus. Om man tydligt kan detektera brus även om det inte trendar så önskar man att öka periodtiden. Nedanstående medelvärde gör detta.

                            { Bertils dynamiska medelvärde }

                            antal01:=20
                            slang01:=mov(c,3)
                            slang02:=Aref(slang01,1)
                            happmax01:=Sub(hhv(slang01,antal01),llv(slang01,antal01))
                            { Hur lång är längden på korta medelvärdet jämfört med avståndet högsta och lägsta under 20 perioder }
                            lång01:=Div(sum(abs(sub(slang01,slang02)),antal01),happmax01)
                            antal02:=100
                            slang03:=mov(c,15)
                            slang04:=Aref(slang03,1)
                            happmax02:=Sub(hhv(slang03,antal02),llv(slang03,antal02))
                            { Hur lång är längden på långa medelvärdet jämfört med avståndet högsta och lägsta under 100 perioder }
                            lång02:=Div(sum(abs(sub(slang03,slang04)),antal02),happmax02)
                            antal04:=Div(lång01,lång02)

                            i1(
                            perioder01=Sub(int(mult(frac(d),1440)),550)
                            antal05=Mov(Mult(antal04,50),20)
                            antal06=MN(MN(antal05,perioder01),90)
                            kurva05=mov(c,antal06:90)
                            Draw(kurva05,2,mqb0)
                            mult(antal06,0.2)
                            )

                            Antal06 är ju det dynamiska medelvärdesantalet, syns som röda staplar längst ner i bilden. Lägg märke till hur fint medelvärdet hanterar stora steg mellan gårdagens Close och dagens open.

                            Med vänlig hälsning
                            Bertil
                            Attached Files
                            Last edited by Bertil; 2014-12-20, 15:58.

                            Comment

                            Working...
                            X