Rank: Advanced Member
Groups: Registered, Registered Users, Subscribers Joined: 5/27/2006(UTC) Posts: 135
|
Below is a code for average volume using zigzag. Wanted the indicator to calculate the average volume only when the zigzag is valid. A 2% zigzag would plot the average volume only when price has retraced 2% from the pivot point.How to modify the code? =========================
Volume - Up/DownSwing avg
=========================
---8<-----------------------------
{ Up/DownSwing average Volume v3.0
©Copyright 2006 Jose Silva.
For personal use only.
http://www.metastocktools.com }
{ User inputs }
choose:=Input("Avg Volume: [1]UpSwing, [2]DownSwing, [3]Both",1,3,3);
ch:=Input("ZigZag minimum change %",.01,100,2);
plot:=Input("Up/Down [1]Avg Vol [2]Swings, [3]ZigZag, [4]Pk/Tr",1,4,1);
{ ZigZag }
zz:=Zig(C,ch,%);
{ Up/Down bar count }
pkBars:=PeakBars(1,C,ch);
trBars:=TroughBars(1,C,ch);
{ Peaks/Troughs }
pk:=pkBars=0;
tr:=trBars=0;
{ ---------- *** UpSwing Volume *** ---------- }
{ Up swings }
UpSwing:=zz>Ref(zz,-1);
{ Up swing volume }
UpSwingVol:=V*UpSwing;
{ Accumulate & reset UpVolume }
acc:=Cum(UpSwingVol);
accUpVol:=acc-ValueWhen(1,pkBars=0,acc);
{ Average UpSwing Volume }
avgUpVol:=accUpVol/Max(trBars,.00001);
{ Restrict avg Volume to peak bar }
avgUpVolPk:=Ref(avgUpVol,-1)*pk;
{ --------- *** DownSwing Volume *** --------- }
{ Down swings }
DwSwing:=zz<Ref(zz,-1);
{ Down swing volume }
DwSwingVol:=V*DwSwing;
{ Accumulate & reset DownVolume }
acc:=Cum(DwSwingVol);
accDwVol:=acc-ValueWhen(1,trBars=0,acc);
{ Average DownSwing Volume }
avgDwVol:=accDwVol/Max(pkBars,.00001);
{ Restrict avg Volume to trough bar }
avgDwVolTr:=Ref(avgDwVol,-1)*tr;
{ Choose Volume display }
swingAvgVol:=
If(choose=1,avgUpVol,
If(choose=2,avgDwVol,
avgUpVolPk-avgDwVolTr));
{ Plot in own window }
If(plot=1,swingAvgVol,
If(plot=2,UpSwing-DwSwing,
If(plot=3,zz,pk-tr)))
---8<-----------------------------
Zigzag validity code
perc:=Input("Percent",0.2,100,10);
Z:=Zig(CLOSE,perc,%);
last:=ValueWhen(1,( Z > Ref(Z,-1) AND Ref(Z,-1) < Ref(Z,-2) )
OR
( Z < Ref(Z,-1) AND Ref(Z,-1) > Ref(Z,-2) ),
Ref(Z,-1));
pc:=(CLOSE-last) * 100 / last;
pc:= Abs(pc);
SD:=(z>Ref(z,-1) AND Ref(z,-1)>Ref(z,-2)) OR (z<Ref(z,-1) AND Ref(z,-
1)<Ref(z,-2));
res:=If(pc>=perc ,1,0);
If(Alert(res,2) AND SD,1,res)
|