Allmänt meddelande

Collapse
No announcement yet.

Hur funkar AMA (Adaptive Moving Average)?

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

  • Hur funkar AMA (Adaptive Moving Average)?

    Jag lovade att kommentera lite om AMA som nu ligger i den senaste uppdateringen 2.1.2.12, man måste alltså uppdatera till denna version eller senare för att få AMA.

    Amas syntax lyder:
    AMA(data,period,fast,slow)
    Där ”data” kan vara c eller någon annan dataserie genererad av någon annan NAT-funktion.
    Fast och slow är de värden som genereras av fast och slow i den frilagda AMA som tidigare presenterats här: http://www.autostock.se/vbulletin/showthread.php?t=3381

    Där kan man läsa:
    fast:=div(2,add(2,1))
    slow:=div(2,add(30,1))

    De värden man ska knappa in är de som står efter add, dvs för normal-ama ; 2 och 30
    Exempelvis får vi då för det ama som ligger i tråden ovan:
    natma=ama(c,12,2,30)
    Om de två sista parametrarna utelämnas ersätts de med normalvärderna dvs man kan lika gärna skriva ovanstående som:
    natma=ama(c,12)

    Några förhållningssätt:
    1) Man skall inte använda ama som ett medelvärde vilket som helst. Exempelvis kommer korsande amavärden inte att ge någon fördel gentmot vanliga korsande medelvärden.
    2) Ama skall inte användas till att trigga med, det är ett misstag många gör som inte kan se någon vits med ama.
    3) Man skall se ama som en SWITCH mellan en platt och en trendande marknad.
    4) Ama måste köras i en mycket högre tidsram än den man normalt handlar i.
    5) De bästa resultaten får man om man kör med två olika modeller, där den ena modellen är bra i trendande marknader och den andra i platta (studsbörsmarknader). I detta fall låter man ama vara switchen som aktiverar platt-modellen när marknaden är platt och trendmodellen annars.

    AMA kan också användas till att blocka trend-modeller till att inte handla i platt-marknader. I detta fall krävs det däremot lite fler tillägg för att det skall bli bra. En platt marknad kan ju antingen svänga väldigt kraftigt eller inte alls, och att då bara blocka trend-modellen blir bra i de i de fall då marknaden inte svänger så kraftigt men kan bli väldigt dåligt då marknaden istället svänger kraftigt. Ett vollafilter måste därför också kopplas till en sådan lösning.

    Här följer ett litet script som ni kan labba på exempelvis omxs30 med. (prova att växla mellan i15 och i30 samt olika lutningsprocentsatser)
    Det ritar ut röda staplar där marknaden trendar och och inga staplar där marknaden är platt.

    period:=12

    i15(
    natma=ama(c,period,2,30)

    lutning=mult(roc(natma,2,%),100)
    ejplatt=gt(abs(lutning),3) { Här har lutningsprocenten satts till 3% }

    draw(natma,3,rqb)
    draw(mult(ejplatt,10),4,rsbF)

    mult(0,1)
    )

    Last edited by LillWicke; 2013-11-30, 00:09.

  • #2
    Har testat lite med AMA. Eftersom jag inte har särskilt bra trendande script och använder principen "först till kvarn" för triggerscripten samt inte tillåter att vända positionen om man inte ligger minus så kan jag faktiskt använda AMA som trigg för trendande marknad. Man måste dock se upp vid dagens början och lägga villkor på att terminskurvan och AMA inte får skilja sig särskilt många punkter. Man kan också ha lite olika villkor på lutningen för köp resp sälj.
    Med vänlig hälsning
    Bertil

    Comment


    • #3
      Intressant Bertil, men kommer du inte in lite sent om du använder AMA som trigger?
      Blir det inte bättre om dina script bara står utanför om det trendar och bara handlar när det är platt?

      Comment


      • #4
        Kanske ide att prova AMA som trigger med "flytande stopp" på själva AMA-kurvan?

        Comment


        • #5
          Ursprungligen postat av LillWicke Visa inlägg
          Intressant Bertil, men kommer du inte in lite sent om du använder AMA som trigger?
          Blir det inte bättre om dina script bara står utanför om det trendar och bara handlar när det är platt?

          Nä, omslaget i AMA för att tillåta att trendande script får verka sammanfaller ju då med att AMA själv triggar. Och om jag ligger felpositionerad och marknaden börjar trenda åt motsatt håll blir jag ju räddad av AMA.
          Med vänlig hälsning
          Bertil

          Edit: Jag vill ju även vara med då marknaden trendar, men jag är ju duktigare på att tillverka script för en platt marknad än för en trendande.
          Last edited by Bertil; 2013-11-30, 13:26.

          Comment


          • #6
            Ok Bertil, kul.
            Då tjänar AMA alltså samtidigt som en slags stopp i ditt fall.

            Comment


            • #7
              Jag har svårt att simulera någon större vinst för K-terminen. Tycker att den är trixig. Har som mest lyckats simulera +12.5 punkter och då har AMA hjälpt till. Har någon av er andra lyckats få till K-terminen?
              undrar
              Bertil
              Attached Files
              Last edited by Bertil; 2013-11-30, 13:43.

              Comment


              • #8
                Fick knappt 10 punkter med Raptor, visserligen på betydligt färre trades men ändå inte mycket att hänga i granen. Visserligen har jag inget data för 1:a till 7:e så det blir ju lite missvisande. Ska se om jag har terminsdata på någon annan maskin så kan vi komplettera Kundservice.

                Attached Files

                Comment


                • #9
                  Lägger in ett script för AMA sälj. Samtidigt lägger scriptet in lutningen i globala variabeln 99.
                  { 131130 }
                  innehav:=Portfolio(v)
                  ok_att_handla:=Eqv(innehav,0)
                  steg1:=2.9
                  steg2:=3.2
                  period:=12
                  tidspärr1:=10
                  tidspärr2:=10
                  lt1:=LastTrade(S,D)
                  lt2:=Portfolio(D)
                  minSedanShort:=Mult(Sub(Date(),lt1),1440)
                  minSedanTrans:=Mult(Sub(Date(),lt2),1440)
                  delay_ok:=gt(minSedanShort,tidspärr1)
                  trans_ok:=gt(minSedanTrans,tidspärr2)
                  i15(
                  tid1=gt(int(mult(frac(d),1440)),565)
                  { före kl 09.20 }
                  tid2=lt(int(mult(frac(d),1440)),1030)
                  tid3=gt(int(mult(frac(d),1440)),600)
                  carpe0=Div(Add(b,s),2)
                  natma=ama(c,period,2,30)
                  draw(natma,3,rqb)
                  lutning=mult(roc(natma,2,%),100)
                  angle=Div(Abs(lutning),1)
                  ejplatt=lt(lutning,-4) { Här har lutningsprocenten satts till 3% }
                  villkor1=Or(Lt(Abs(Sub(carpe0,natma)),steg1),And(Lt(Abs(Sub(carpe0,natma)),steg2),tid3))
                  villkor2=Or(Lt(Abs(Sub(carpe0,natma)),mult(angle,steg1)),And(Lt(Abs(Sub(carpe0,natma)),mult(angle,steg2)),tid3))

                  villkor4=Mult(lutning,villkor2)
                  SetGVarIf(villkor4,99,1,T)
                  sälja=And(ejplatt,villkor1)

                  ditt_säljscript=And(And(And(And(sälja,tid1),tid2),delay_ok),trans_ok)
                  Draw(Add(c,Mult(sälja,5)),1,rqb0)
                  säljsignal=And(ditt_säljscript,ok_att_handla)
                  Mult(säljsignal,25)
                  )
                  ...............

                  Sedan tar man fram lutningen i andra triggerscript så här:
                  villkor4=Ge(GetGVar(99),-2)

                  Ovanstående villkor passar i ett köpscript där AMA inte får luta nedåt mer än -2 eller 0 om man hellre vill det.
                  Med vänlig hälsning
                  Bertil
                  Last edited by Bertil; 2013-12-06, 19:02.

                  Comment


                  • #10
                    Har testat AMA-scriptet ihop med mina och det gör skillnad:

                    Med AMA 18/11-6/12:
                    Totalt Avkastning 39.75 kr 3.06% på 27 affärer under 111:12:11 timmar
                    Av dessa blankat 12 st med avkastning 13.00 kr 1.00%
                    Innehav 11 st med vinst 32.50 kr 2.51%
                    Innehav 4 st med förlust -5.75 kr -0.44%
                    Blankning 5 st med vinst 32.25 kr 2.49%
                    Blankning 7 st med förlust -19.25 kr -1.49%
                    Utan AMA-scriptet 18/11-6/12:
                    Totalt Avkastning 29.75 kr 2.28% på 24 affärer under 107:37:51 timmar
                    Av dessa blankat 10 st med avkastning 4.50 kr 0.33%
                    Innehav 11 st med vinst 32.50 kr 2.51%
                    Innehav 3 st med förlust -7.25 kr -0.57%
                    Blankning 4 st med vinst 28.00 kr 2.17%
                    Blankning 6 st med förlust -23.50 kr -1.83%

                    Men vilka parametrar i scriptet kan jag ändra för att testa annan vinkel har för sökt men det ändrar inte resultatet det blir samma oavsett 0 eller 2 i denna villkor4=Ge(GetGVar(99),-2)
                    men ändå en god förbättring igår t.ex -3.0 med och -8,50 utan
                    Berra

                    Comment


                    • #11
                      I blankascripten använder man ju på samma sätt motsvarande villkor
                      villkor4=Le(GetGVar(99),2)
                      men det har du väl redan lagt in.

                      Har inga bättre tips just nu med AMA.

                      Med vänlig hälsning
                      Bertil

                      Comment


                      • #12
                        Berra frågade efter hur man praktiskt går tillväga när man skall blocka ett script när AMA är platt.

                        Bertil la in ett separat säljscript som samtidigt skickar lutningen via en global.
                        Detta är ju bra om man har många script som skall läsa in lutningen.

                        Tänkte komplettera med att beskriva hur man går tillväga med att lägga in AMA i de befintliga script man har.
                        ( man kanske bara har två eller högst 4)
                        Jag lägger det här så alla kan ta del. (Det är inte svårt men försöker ändå att vara lite pedagogisk)

                        Här följer ett schematiska köpscript (Berra kör på index):

                        { Berras köpscript }…………….

                        i5(
                        .
                        köp5=?

                        { Account Saftey }
                        .
                        Long=and(and(and(köp5,?),?),?)

                        Mult(long,10)
                        ………………………………..


                        I trådens första inlägg har vi ju ett villkor för trend:
                        period:=12
                        natma=ama(c,period,2,30)
                        lutning=mult(roc(natma,2,%),100)
                        EJPLATT=gt(abs(lutning),3) { Här har lutningsprocenten satts till 3% }

                        Eller om man så vill:
                        PLATT=le(abs(lutning),3)

                        A) Berras script kör ju i 5 min-upplösning och AMA skall ju köras i 15 min eller högre
                        Detta problem löses genom att köra AMA med cmpref().

                        B) Ett problem uppstår eftersom Berras modell är en trendmodell. Att då bara blocka modellen när det är platt kan få oönskade konsekvenser. Exempelvis kan modellen ha tagit en position för uppgång varefter ama strax efter blir platt och kursen börjar gå ned. Är volatiliteten då låg spelar det ingen roll men om volatiliteten istället är hög kommer Berra inte ur sin position förrän AMA återigen börjar trenda (kanske nedåt) och då kan positionen visa på ett ordentligt minus. Hur gör man här?

                        Antingen lägger man in ett vollafilter som gör att modellen kan ta positioner när vollan är hög trots att ama är platt, eller också så lägger man in en stopploss som bara har verkan när ama är platt. Ett tredje sätt som jag skrev om i första inlägget är att man har två modeller en för platt och en för trend och låter AMA växla mellan de båda.

                        Jag lägger här in alternativet med en stopploss som är enkel att förstå. Säljstoppen skall ligga i exitscriptet alternativt om man inte har ett sådant i säljscriptet, men då med ett tillägg i antalsscriptet att man bara skall sälja innehavet och inte vända hela positionen.

                        { Enkel Stopploss }
                        gräns=lasttrade(b,p)
                        stopp=le(sub(c,gräns),-3)

                        Lägger vi nu ihop allt som sagts ovan i Berras 5min-script får man följande:
                        Observera att alla villkor skall läggas innan account-saftey villkoren i originalmodellen. (Vi antar, för att komplicera det hela lite att Berra inte har några exitscript.)


                        { Berras köpscript }………………………

                        ixc:=cmpref(c,0,A)
                        period:=12


                        i5(
                        .
                        köp4=?

                        { AMA villkor }
                        natma=ama(ixc,period,2,30)
                        lutning=mult(roc(natma,2,%),100)
                        platt=le(abs(lutning),3)

                        köp5=and(köp4,not(platt))

                        { Enkel Stopploss (för position tagen för nedgång)}
                        gräns=lasttrade(s,p)
                        stopp=ge(sub(c,gräns),3)

                        köp6=and(platt,stopp)
                        köp7=or(köp5,köp6)


                        { Account Saftey }
                        .
                        Long=and(and(and(köp7,?),?),?)

                        Mult(long,10)


                        {@A(15,OMX Stock )}
                        ………………………………………………………


                        I antalsscriptet för köpmodellen lägger man slutligen återigen in:
                        gräns=lastrade(s,p)
                        stopp=ge(sub(c,gräns),3)

                        och villkorar köpantalet beroende på om stopp är sann eller inte.

                        OBS detta sista är bara nödvändigt om modellen vänder tvärt från säljinnehav till köpinnehav utan att vara nollad däremellan.

                        Last edited by LillWicke; 2013-12-07, 21:46.

                        Comment


                        • #13
                          Ursprungligen postat av LillWicke Visa inlägg
                          ...
                          Bertil la in ett separat säljscript som samtidigt skickar lutningen via en global.
                          Detta är ju bra om man har många script som skall läsa in lutningen.

                          Tänkte komplettera med att beskriva hur man går tillväga med att lägga in AMA i de befintliga script man har.
                          ( man kanske bara har två eller högst 4)

                          Bara två eller fyra script... själv kör jag just nu med 67 st
                          Med vänlig hälsning
                          Bertil
                          Attached Files

                          Comment


                          • #14
                            Ursprungligen postat av Bertil Visa inlägg
                            Bara två eller fyra script... själv kör jag just nu med 67 st
                            Med vänlig hälsning
                            Bertil
                            He, He,

                            Tänk om man kunde få några sorts övergripande kategoriseringsbenämningar i NAT så att du kunde klumpa ihop alla dina skript till två eller tre modellnamn som du kunde sedan kunde ansluta. Nu måste du ju ansluta alla 67 varje månad, måste vara jättejobbigt. Hur håller du reda på allihop när de ligger blandade med allt möjligt annat?

                            Comment


                            • #15
                              Ursprungligen postat av LillWicke Visa inlägg
                              Berra frågade efter hur man praktiskt går tillväga när man skall blocka ett script när AMA är platt.
                              Sorry LW
                              Jag fick inte detta att fungera, när jag la in dessa rader så blev det inga signaler i köpscrptet. Jag vet var felet ligger 20 cm över axlarna
                              Berra

                              Comment

                              Working...
                              X