Allmänt meddelande

Collapse
No announcement yet.

Anchored VWAP (liknande Tradingview)

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

  • Anchored VWAP (liknande Tradingview)

    Tänkte höra om någon har lyckats med att beräkna VWAP längre bort i tiden än intra dag.
    Jag skulle vilja kunna beräkna VWAP från x-dagar tillbaka i tiden.

    Är det någon som har gjort något liknande och är villig att dela med sig?

    I Tradingview finns liknande funktion där man kan ange startdatum för VWAP-beräkningen.

  • #2
    Snickrat ihop snabbt och inte verifierad. Går att göra mer dynamisk, men blir tyngre då fler perioder måste reserveras. Du får kolla om det blir som du tänkt.

    {se till att find o sum i upplösningen täcker alla dagar. Här max 5dagar för i1. För tex i15 behövs färra perioder och ger i stort samma värde}

    AntalDagar:=3
    i1(
    LookBack=find(gt(int(d),int(aref(d,1))),2600,int(d),AntalDagar)
    vPrize=if(ge(int(d),LookBack),mult(c,v),0)
    vVol=if(ge(int(d),LookBack),v,0)
    vwap=div(sum(vPrize,2600),sum(vVol,2600))
    draw(vwap,3,gqb)
    add(0,0)
    )

    {@A(0,)}
    Last edited by Henric; 2021-05-19, 22:10.

    Comment


    • #3
      Tack Henric!
      Jag har haft fullt upp ikväll, så jag har inte hunnit testa än.
      Ska göra det så snart jag hinner.

      Comment


      • #4
        Har tittat på scriptet och vad den ritar ut.
        Det är inte riktigt som jag tänkt.
        Tanken är att om man sätter AntalDagar:=3 så ska beräkningen på volym och pris starta från "noll" 3 dagar tillbaka.
        Jag hoppas att du förstår hur/vad jag menar.

        Skriptet/kurvan som nu ritas ut bygger vidare från dagen tidigare med start långt bak i tiden.

        Comment


        • #5
          Ok. Då blir det endast grafiskt eller att man manuellt anpassar efter tradingdagen. Det blir väldigt klurigt om du ska använda det i simulering.

          {behöver moddas för månadskifte, vill bara visa principen}
          Månad:=5
          Dag:=18
          i1(
          LookBack=and(eqv(monthnumber(),Månad),ge(dayofmonth(),Dag))
          vPrize=if(LookBack,mult(c,v),0)
          vVol=if(LookBack,v,0)
          vwap=div(sum(vPrize,2600),sum(vVol,2600))
          draw(vwap,3,bqb)
          add(0,0)
          )

          Edit: Båda varianterna borde ge samma resultat. Den första fungerar inte grafiskt och den andra är statisk. Dvs som om man gick tillbaka och ritade om diagrammet i efterhand, vilket inte går.
          Last edited by Henric; 2021-05-20, 08:50.

          Comment


          • #6
            För att göra den sista varianten dynamisk så borde man kunna jämföra dagens datum (månad & dag) och räkna starten -3 dagar bakåt från det, eller hur många dagar man vill titta bakåt.
            Jag ska testa mig fram lite.
            Tack igen

            Comment


            • #7
              Det gör ju det den första gör indirekt. Bara det att värdet för en viss stapel ser annorlunda ut om man är på dag 1,2 eller 3. Den fungerar, bara inte grafiskt.
              Last edited by Henric; 2021-05-20, 09:18.

              Comment


              • #8
                Ok, då är jag med på noterna. Den första räknar rätt men ritar fel. Då blev det ju rätt från början

                Comment


                • #9
                  Jo. Om kör script/modeller borde den fungera. Tittar man i diagrammet använder man den andra och justerar datum för dagar. Som vanligt med reservation att jag inte har testat i simulering.

                  Comment


                  • #10
                    Den här ska fungera i analysern och grafiskt upp till 5 dagar.

                    dagar:=1

                    i1(
                    perioder=mult(510,dagar)
                    market_open=not(eqv(int(ref(d,1)),int(d)))
                    periods_since_open=topbars(market_open,perioder,dagar)
                    typical_price=div(add(add(h,l),c),3)
                    price_mult_vol=mult(typical_price,v)
                    cumulative_total=sum(price_mult_vol,periods_since_open:2550)
                    cumulative_vol=sum(v,periods_since_open:2550)
                    vwap=div(cumulative_total,cumulative_vol)
                    draw(vwap,1,rqb)
                    )
                    AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

                    Comment


                    • #11
                      Beräkningen i simuleringen kan man göra på många sätt. Rita går ju som du gör genom att gömma tidigare beräkningsdagar ackumulerat idag. Det jag uppfattar att han vill är att rita wvap för x-antal dagar för att får en visuell uppfattning. Inte bara senaste dagen i beräkningen. Det går ju inte då diagrammet redan har ritat tidigare dagar. En lösning är då att rita tex 3 kurvor för de senaste 3 beräkningarna. Blir kanske plottrigt. Enklast är att bara rita de senaste aktuella dagarna. Beror på vad han vill.

                      Comment


                      • #12
                        Ursprungligen postat av Henric Visa inlägg
                        Beräkningen i simuleringen kan man göra på många sätt. Rita går ju som du gör genom att gömma tidigare beräkningsdagar ackumulerat idag. Det jag uppfattar att han vill är att rita wvap för x-antal dagar för att får en visuell uppfattning. Inte bara senaste dagen i beräkningen. Det går ju inte då diagrammet redan har ritat tidigare dagar. En lösning är då att rita tex 3 kurvor för de senaste 3 beräkningarna. Blir kanske plottrigt. Enklast är att bara rita de senaste aktuella dagarna. Beror på vad han vill.
                        Med det skriptet kan man välja hur många dagar bakåt man vill titta, vill han rita flera VWAP linjer får han kopier och ansluta flera skript med olika "dagar:=X"
                        AlgoPal - Emotionless Trading - Hyr ut våra trading algoritmer for Autostock via algopal.com

                        Comment


                        • #13
                          Min första variant i tråden fungerar som din. I simulering fungerar det. Rent grafiskt med ankring och ackumelering x-antal dagar fungerat det inte då samma dag ritas flera gånger. Hjälper inte att rita fleta kurvor med olika antal dagar. Jag skulle inte lägga ner så mycket tid på att tex för 3-dagars ankring rita kurva 1 start dag -5 till -3, kurva 2 -4 till -2, osv. I stället bara rita en kurva som ankras x-dagar bakåt.

                          Comment


                          • #14
                            Jag tittade lite på denna koden och uppdaterade så att jag bara kollar på de tre senaste dagarna,

                            Månad:=monthnumber()
                            Dag:=sub(dayofmonth(),3)
                            i1(
                            LookBack=and(eqv(monthnumber(),Månad),ge(dayofmonth(),Dag))
                            vPrize=if(LookBack,mult(c,v),0)
                            vVol=if(LookBack,v,0)
                            vwap=div(sum(vPrize,2600),sum(vVol,2600))
                            draw(vwap,3,dgqb)
                            add(0,0)
                            )


                            och har lite funderingar.

                            ​först några nybörjarfrågor. Kan man tänka sig att mult i det här fallet exekverar elementvis över hela vektorn? Lite som man kan göra med en DataFrame i pandas?
                            isåfall tycker jag att koden ovan, korrekt, borde genera

                            vPrize = [0,0,...,0,343,344,345]
                            och volym något liknande.

                            men då fastnar jag lite på summeringsfunktionen, tittar den på varje enskilt element och summerar de senaste 2600 elementen och generar något i stil med
                            vwap = [0,0,...,0, 343, 687, 1032]?

                            och sedan en elementvis division med volymen?

                            I sådana fall kan jag köpa att koden är rätt, men jag hade i så fall förväntat mig en kurva som är 0 fram till och med 3 dagar innan dagens datum (2024-07-16) och sen börjar räkna avwap därifrån. Men jag får denna outputen där koden räknar vidare oavsett.

                            Så vad har blivit fel?


                            ​​ image.png

                            Stort tack för hjälpen

                            Comment


                            • #15
                              Scriptet körs stapel för stapel när det ritar upp kurvan i diagrammet, så du får en "löpande" kurva som baseras på de 2600 föregående minuternas data. Är inte riktigt med på hur du vill att det ska funka. Output i varje givet tillfälle är alltså beräknat på 2600 föregående minutrar.

                              Comment

                              Working...
                              X