Allmänt meddelande

Collapse
No announcement yet.

Pivot punkter

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

  • Pivot punkter

    Hej!



    Jag har en fungerande modell i ett annat program som jag nu vill översätta till Autostock. Modellen skall hitta pivotpunkter (toppar/bottnar) x antal perioder bakåt. När man hittat en topp/botten så testas denna mot x antal perioder bredvid. En topp tex skall vara högre än 7 dagar innan/efter.
    Det jag är ute efter är alltså INTE en modell som tittar x perioder bakåt och returnerar högsta värdet rakt av utan det skall vara en markerad topp/botten annars fortsätter att söka efter en pivot som uppfyller villkoren.

    Så här långt har jag kommit hittills på modellen för att hitta toppar, men är hopplöst fast!
    ___________________________________________________________
    Antperbakåt:=21
    Antperbredvid:=7

    Topp:=HHV(H,Antperbakåt) //Leta efter topp
    ToppPeriod:=HHVBARS(H,Antperbakåt) //Period för topp
    Toppföre:=HHV(AREF(H,ToppPeriod),Antperbredvid //Kontroll H innan topp
    ______________________________________________________________
    Nu vet jag inte hur jag skall gå vidare. Jag kan ju jämföra Topp med Toppföre, men hur gör jag för att fortsätta leta om det blir ett FALSKT utfall?

    Hälsningar Kent

  • #2
    Hej!

    Det skulle nog vara bra med något konkret exempel för att fixa koden du vill ha. Kör du dagskurser?

    Det du redan skrivit letar fram vilken period inom 21 staplar bakåt som har högsta värdet, alltså själva toppen. Men jag är inte riktigt med på vad du vill göra med det värdet sedan?

    /Rikard

    Comment


    • #3
      Hej Richard!

      Jag har bara använt modellen på dagskurser hittills.

      Nästa steg är att kontrollera "period bredvid".
      När man har fått fram ett högsta värde, så testar man om det är en topp genom att jämföra med ex 7 perioder bakom och efter. Högstavärdet skall alltså vara högre än närliggande perioder. Själva toppen bekräftas alltså inte förrän 7 perioder efter tidigast.

      Genom att variera perioder bakåt/bredvid, så kan man fånga upp större eller mindre toppar/bottnar. Man kan få fram köp/säljsignaler genom att tex ange C>Toppvärde. Det finns flera användningsområden.

      Bifogade en bild på hur en färdig modell kan se ut med markerade toppar/bottnar.

      /Kent
      Attached Files

      Comment


      • #4
        Det här går att lösa på flera sätt, men ett som tillåter "justerbara" perioder innan och efter en topp för att den ska räknas som definierad kan ju vara nåt sånt här:

        perioderinnan:=5
        perioderefter:=7
        periodertotalt:=Add(perioderinnan,perioderefter)
        i60(
        högsta=Hhv(h,periodertotalt)
        avståndok=Eqv(Aref(h,perioderefter),högsta)
        toppkurs=Find(avståndok,100,Aref(h,perioderefter),1)
        Draw(toppkurs,2,gqb)
        )



        Lite modifierat med en enkel köpsignal och upplösning som anpassar sig till aktuell graf (dagskurser om du vill tex):

        perioderinnan:=5
        perioderefter:=7
        periodertotalt:=Add(perioderinnan,perioderefter)
        högsta=Hhv(h,periodertotalt)
        avståndok=Eqv(Aref(h,perioderefter),högsta)
        toppkurs=Find(avståndok,100,Aref(h,perioderefter),1)
        Draw(toppkurs,2,gqb)
        köp=Gt(c,toppkurs)
        Mult(köp,10)



        Det här körs i 60-minutersstaplar som exempel men går ju att justera till vad man önskar. "Periodertotalt" lägger ihop hela tidsrymden som en topp kan definieras inom, och "högsta" tar fram högsta värdet under den perioden. "avståndok" kolla så att högsta värdet uppnås exakt "perioderefter" staplar efter toppen, dvs i det här fallet 7 staplar. "toppkurs" kollar när villkoret "avståndok" var sant senast inom 100 perioder och plockar fram värdet på H från stapeln 7 perioder tidigare, dvs den som utgör toppen.
        Draw ritar ut värdet så att man kan studera hur det funkar. Ser det ok ut?



        /Rikard
        Attached Files

        Comment


        • #5
          Hej Rikard!

          Jag tycker det ser bra ut vid en första anblick!
          Jag experimenterar lite med scriptet och ser om jag kan få rätt på bottnarna ochså

          Tackar så mycket!
          Last edited by KentL; 2010-01-13, 23:49.

          Comment


          • #6
            Lite nybörjar frågor

            Det går sakta framåt med att sätta sig in i scriptspråket

            Lite frågor som jag skulle behöva hjälp med.

            1. Du lade ju in ett triggervilkor i modellen ovan, men kommer detta att trigga för köp VARJE gång C går över Toppvärdet? Jag har gjort ett bottenscript enligt samma princip som skall trigga sälj. Modellen liknar ju en trendkanal, där taknivån kan brytas flera gånger under en upptrend.

            Tror jag hittat svaret själv. funkar detta kontrollscript? not(lasttrade(b))

            2. Jag har experimenterat lite med On Balance Volume och skulle vilja använda ovanstående script för att hitta divergenser. Jag har försökt använda mig av OBV(), och stoppa in istället för C men det funkar inte.
            Provade även att göra ett enkelt MAV på OBV(), men det funkar inte heller.

            OBV:=div(obv(),100000)

            MOV(OBV,7,S)

            Är inte OBV() en dataserie?

            3.Kan man bara ha ett triggerscript?

            4.Kan AND funtionen bara hantera två funktioner?
            Hur gör man om man vill testa en lång rad villkor för SANT/FALSKT och sedan göra vidare beräkningar på dessa villkor?

            5.Jag vet att man kan använda IF funktionen för att returnera olika värden, men kan man stoppa in flera villkor som skall vara SANT i denna?

            Det kan vara vansinnigt svårt att veta var man skall ha komma, parantes och dubbelparantes som nybörjare

            Tacksam för all hjälp!

            /Kent
            Last edited by KentL; 2010-01-18, 12:41.

            Comment


            • #7
              Kul att det går framåt! Kommer man bara in i "tänket" brukar det lossna.




              1. Du lade ju in ett triggervilkor i modellen ovan, men kommer detta att trigga för köp VARJE gång C går över Toppvärdet? Svar: Ja, men om man har scriptet som triggerscript i en ordermodell får man normalt bara order på första korsningen, därefter stegar ordermodellen vidare till nästa sekvens, eller så har man tex ett test med Portfolio(v) för att känna av om det finns innehav eller ej osv.

              Jag har gjort ett bottenscript enligt samma princip som skall trigga sälj. Modellen liknar ju en trendkanal, där taknivån kan brytas flera gånger under en upptrend.

              Tror jag hittat svaret själv. funkar detta kontrollscript? not(lasttrade(b))

              Svar: Nja, LastTrade() kräver två parametrar enligt scriptreferensen, och för att kolla om tidpunkten för köp är senare än sälj kan man använda tex LastTrade(b,d) och LastTrade(s,d) och jämföra dessa:

              Gt(LastTrade(b,d),LastTrade(s,d))

              blir tex sant när tidpunkten för senaste köp är senare än tidpunkten för senaste sälj.


              2. Jag har experimenterat lite med On Balance Volume och skulle vilja använda ovanstående script för att hitta divergenser. Jag har försökt använda mig av OBV(), och stoppa in istället för C men det funkar inte.
              Provade även att göra ett enkelt MAV på OBV(), men det funkar inte heller.

              OBV:=div(obv(),100000)

              MOV(OBV,7,S)

              Är inte OBV() en dataserie?

              Svar: Jo, det funkar men inte om man har ett variabelnamn som är samma som själva funktionen. Man kan tex skriva så här:

              värde1:=DIV(OBV(),1000)
              värde2:=Mov(värde1,7,s)




              3.Kan man bara ha ett triggerscript? Svar: Ja, i varje ordermodell finns ett triggerscript, som i sig kan vara ganska avancerat och innehålla mängder av villkor etc. Om du bara tänker använda olika triggerscript "lokalt" för att indikera olika saker i ett diagram kan du köra upp till 64 st/papper.

              4.Kan AND funtionen bara hantera två funktioner?
              Hur gör man om man vill testa en lång rad villkor för SANT/FALSKT och sedan göra vidare beräkningar på dessa villkor?

              Svar: Två funktioner kan hanteras av AND, OR osv, men det går utmärkt att stoppa in fler villkor så här:

              AND(AND(a,b),c)

              Här krävs att alla villkor är sanna för att hela raden ska bli sann. Man får tänka på att det alltid ska finnas samma antal högerparenteser som vänsterparenteser.

              Ett annat exempel:

              AND(a,OR(b,c))

              betyder att a måste vara sant och antingen b eller c för att hela raden ska bli sann.





              5.Jag vet att man kan använda IF funktionen för att returnera olika värden, men kan man stoppa in flera villkor som skall vara SANT i denna?

              Svar: Nja, på sätt och vis. Den funkar ju normalt så här:

              IF(a,b,c)

              vilket betyder att om a är sant får man ut värdet b, annars värdet c.
              Om man vill testa fler villkor direkt i samma sats kan det tex se ut så här:

              IF(OR(a,b),c,d)

              vilket betyder att om antingen a eller b är sanna får man ut värdet c, annars värdet d (alltså om inget av värdena a eller b är sant).



              Comment


              • #8
                Hej igen och tack för tipsen!

                Jag får fortfarande inte rätt på OBV funktionen?

                När jag skriver så här, så får jag fel när jag testar syntax. Provade med DRAW funktionen för att plotta ut värde2, men det blir den "rena" OBV kurvan.
                Ej utjämnad.
                värde1:=DIV(OBV(),1000)
                värde2:=Mov(värde1,7,s)

                När jag skriver så här, så får jag oxå ut den "rena" OBV grafen. Ej utjämnad.
                värde1:=DIV(OBV(),1000)
                Mov(värde1,21,s)

                I beskrivningen av OBV() funktionen står det så här.
                Returnerar: Ökar tidigare ackumulerad volym med nuvarande om senaste kurs högre än förgående, annars tvärtom.
                Kommentar: En ackumulerande indikator som arbetar från diagrammets början. Ej relevant i andra script.

                Kan det vara så att man måste skriva om koden för OBV() för att kunna använda den som jag vill?

                /Kent
                Last edited by KentL; 2010-01-19, 10:17.

                Comment


                • #9
                  För att köra scriptet direkt i sin helhet som indikator behöver man bara lägga till ett "ut-värde":

                  värde1:=DIV(OBV(),1000)
                  värde2:=Mov(värde1,7,s)
                  värde2


                  så fungerar det. Tänk på att scriptet anpassar sig efter gällande upplösning i grafen, och om det är 1 minut kanske medelvärdet är alltför kort för att det ska utjämna kurvan snyggt.

                  Comment


                  • #10
                    Märkligt!

                    Jag skriver in scriptet precis som du visade, men kurvan lägger sig ändå rätt över den "rena" OBV kurvan. Ökade till 50 perioder, men samma resultat.

                    Comment


                    • #11
                      Jag kollade genom att rita ut båda värdena samtidigt inifrån scriptet, och fick kurvor enligt bilden med det här scriptet:

                      värde1:=DIV(OBV(),500)
                      värde2:=Mov(värde1,3,s)
                      Draw(värde1,2,ydo)
                      Draw(värde2,3,rdo)


                      som ritar en gul kurva som är ofiltrerad OBV, och en röd kurva som är 3 perioders medel. (den lila kurvan är oscillatorn) Upplösningen i diagrammet ä 1 minut, och kurvorna ritas i oscillatorfältet. Man kan styra det genom att ändra sista parametern i Draw-raderna om man vill ha kurvorna i något annat område.

                      Attached Files

                      Comment


                      • #12
                        Lyckades få rätt på medelvärdena till sist. Lade in 2 st medelvärden och då ser man tydligt hur de konvergerar/divergerar. Det blir dock inga utjämnade kurvor. Kanske beror detta på att OBV´s uppbyggnad, där 50 milj adderas en dag och 100 milj subtraheras nästa? Att köra mv på OBV kurvan kanske inte är optimalt, men man har lärt sig en del nytt iallafall
                        Det man måste göra som jag missat tidigare är att skala ner tills man ser kurvan och jag antar att det blir olika på olika papper.

                        Stoppade även in OBV() i pivotmodellen, där jag vet att den är användbar, men av någon anledning så ritas bottenkursen bara ut från första lägstanivån i dataserien. Har provat att anpassa värdena för perioder, men samma resultat.

                        perioderinnan:=10
                        perioderefter:=10
                        periodertotalt:=20
                        värde1:=div(obv(),100000000)

                        lägsta=Llv(värde1,periodertotalt)
                        avståndok1=Eqv(Aref(värde1,perioderefter),lägsta)
                        bottenkurs=Find(avståndok1,100,Aref(värde1,perioderefter),1)
                        Draw(bottenkurs,2,bqa)
                        Draw(värde1,3,rqa)
                        sälj=Lt(värde1,bottenkurs)
                        Mult(sälj,10)

                        I bilden nedan kan man se hur det ser ut.
                        Attached Files
                        Last edited by KentL; 2010-01-20, 14:55.

                        Comment


                        • #13
                          Hm, bara en ide: prova att öka upp antalet perioder Find-funktionen tittar bakåt från 100 till kanske 500 för att se om det blir någon skillnad. En snabb gissning är att 100 perioder inte räcker om man kör 1 minuts upplösning kanske. Måste säga att du verkligen snappar upp scriptspråket kvickt!

                          Comment


                          • #14
                            Jag har provat både 500 och 1000 i FIND funktionen. Jag tror att problemet ligger tidigare i beräkningen. Jag provade att plotta ut lägstavärdet med DRAW och då får jag en graf över OBV istället för en nivå.

                            värde1:=div(obv(),1000000)
                            lägsta=Llv(värde1,20)
                            Draw(lägsta,3,yqa)

                            Jag har även provat att stoppa in ROC,MO och MOV istället för div(obv(),1000000) i hela pivotscriptet och får ut fina kurvor med markerade pivotpunkter.
                            Last edited by KentL; 2010-01-21, 09:55.

                            Comment


                            • #15
                              Jag ska kolla lite närmare hur OBV() fungerar, har inte använt den själv faktiskt så det är möjligt att den inte uppför sig riktigt som andra dataserier.

                              /Rikard

                              Comment

                              Working...
                              X