Allmänt meddelande

Collapse
No announcement yet.

Negative volume index

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

  • Negative volume index

    Körde några systemtester i metastock och tyckte den här verkar intressant, men hur översätter man till AT

    Signalerna triggas av när kurvan skär ett medelvärde.

    The Negative Volume Index (NVI) relates a decrease in volume to the change in the security's price. When volume decreases from the previous day, the NVI is adjusted by the percentage change in the security's price.
    If (V < (ref(V,-1)) then
    NVI = I + (((C - ref(C,-1) / ref(C,-1)))
    If (V >= ref(V,-1)) then
    NVI = I
    Where:
    C = Today's closing price
    ref(C,-1) = Yesterday's closing price
    I = Yesterday's Negative Volume Index
    NVI = Today's Negative Volume Index
    V = Today's volume
    ref(V,-1) = Yesterday's volume

  • #2
    Jag tolkar det så här:
    pinc:=div(sub(c,ref(c,1)),ref(c,1))
    nyttval:=if(lt(v,ref(v,1)),add(getval(3),pinc),getval(3))
    mult(retval(nyttval,3),100)

    På slutet har jag lagt till att rita kurvan multiplicerat med 100 för att få något värde alls. Det blir ju en procentsats bara, vad jag kan se annars.

    Något är missat i formeln där tror jag.

    Såg i Achelis bok(som finns på Equis hemsida) att procentsatsen skulle multipliceras med gårdagens NVI här kallat I.

    Så här tolkar jag då att det blir:
    refnivå:=50
    pinc:=div(sub(c,ref(c,1)),ref(c,1))
    vlower:=if(eqv(getval(3),0),refnivå,mult(getval(3),add(pinc,1)))
    nyttval=if(lt(v,ref(v,1)),vlower,getval(3))
    retval(nyttval,3)

    Men behöver ge det något slags startvärde(här 50). Kan inte tyda riktigt vad man menar att man beräknar på. Men stoppa in något om det nu skall vara close annars kanske.

    Här en variant med medelvärdet också(OBS! Kräver version AT 7.0.0.2 minst och finns bakom uppdateringslänkarna):

    mper:=255
    pinc:=div(sub(c,ref(c,1)),ref(c,1))
    vlower:=if(eqv(getval(3),0),50,mult(getval(3),add(pinc,1)))
    nyttval=if(lt(v,ref(v,1)),vlower,getval(3))
    retval(nyttval,3)
    retval(d,2)
    oldvals=if(eqv(getval(2),d),getval(3),rev(aref(rev(oldvals,mper),1),mper))
    draw(div(sum(oldvals,mper),mper),2,rsb)
    if(eqv(cum(1),mper),l,getval(3))

    Denna tar dock 255 perioder innan medelvärdet börjar stämma. Så titta på 3-4 år bakåt minst så blir den första delen bara en bit i början.
    Sista kodraden ger en vertikal stapel från där medelvärdet börjar stämma också.

    Orsaken att man inte bara kan ta ett medelvärde på något rakt av förklarar jag nedan. Det beror på att varje periods värde är beroende av förgående, men t.ex mov() behöver kunna lägga upp en dataserie baklänges från där man står i varje period.

    Trixet med denna typ av metod är att den blir olika beroende på var ditt diagram börjar. Det blir alltså inte möjligt att skapa signaler och bevakning från denna utan att ha en fast referens.

    Samma problem uppstår t.ex med OBV() som finns i Friendly, OnBalanceVolume.

    SAR() StopAndReverse parabolic hade det problemet också.

    I AT7 gjorde vi en SAR2() som för att komma tillrätta med detta problemet gav en periodparameter för att ange hur långt bakåt man skulle börja. SAR2() är ju speciell iom att det är rätt klara cykler och till slut så ser den likadan ut efter några cykler som SAR().

    Med Negative Volume Index blir det inte riktigt lika lätt(men det går att lösa, men det krävs då att man skriver utifrån en fix datum typ).

    Bilden nedan visar 4 år, och var på bilden som korrekt medelvärde visas markeras med blå stapel.
    Attached Files

    Comment


    • #3
      Tack

      Jag har även kört en del tester med korsande volym (justerade)viktade MA och de är betydligt bättre än andra MA´s.

      I allafall på omx-terminen 30 min.

      Skulle gärna testa i Friendly då jag tror att det är närmare verkligheten än i metastock.

      Så om du får tid över vid tillfälle, här är en förklaring den enda som fanns.

      A volume adjusted moving average is calculated as follows:
      1. Calculate the average volume using every time period in the chart.
      2. Calculate the volume increment by multiplying the average volume
      by 0.67.
      3. Calculate each period's volume ratio by dividing each period's actual
      volume by the volume increment.
      4. Starting at the most recent time period and working backwards,
      multiply each period's price by the period's volume ratio and
      cumulatively sum these values until the user-specified number of
      volume increments is reached. Note that only a fraction of the last
      period's volume will likely be used.

      Comment

      Working...
      X