Hoping someone might help me code the accumulated volume on each swing, and then represent that in the thickness of the swing line. The more volume, the thicker the line. Thanks very much.
Base code below is Ed’s.
// AFL code by Edward Pottasch, Feb 2013
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
SetChartBkGradientFill(ColorRGB(200,202,200),ColorRGB(200,200,210));
procedure alternate_proc(pk,tr,sumpk,sumtr)
{
global pkg;
global trg;
pkg=pk;trg=tr;
idxpk=0;
idxtr=0;
flgtr=0;
flgpk=0;
for(i=1;i<BarCount;i++)
{
if(pk[i] AND sumpk[i]==1 AND !tr[i] AND flgpk==0)
{
idxpk=i;
flgtr=0;
}
else if( (pk[i] AND sumpk[i]>1 AND !tr[i]) OR (pk[i] AND flgpk==1) )
{
if(H[i]>=H[idxpk])
{
pkg[idxpk]=0;
idxpk=i;
flgpk=0;
}
else if(H[i]<H[idxpk])
{
pkg[i]=0;
flgpk=0;
}
}
else if(tr[i] AND sumtr[i]==1 AND !pk[i] AND flgtr==0)
{
idxtr=i;
flgpk=0;
}
else if( (tr[i] AND sumtr[i]>1 AND !pk[i]) OR (tr[i] AND flgtr==1) )
{
if(L[i]<=L[idxtr])
{
trg[idxtr]=0;
idxtr=i;
flgtr=0;
}
else if(L[i]>L[idxtr])
{
trg[i]=0;
flgtr=0;
}
}
else if(pk[i] AND tr[i])
{
if(sumpk[i-1]>sumtr[i-1])
{
pkg[i]=0;
flgtr=1;
idxtr=i;
}
else if(sumtr[i-1]>sumpk[i-1])
{
trg[i]=0;
flgpk=1;
idxpk=i;
}
}
}
}
//SetBarsRequired(sbrAll,sbrAll);
//RequestTimedRefresh(0.1,True);
xx=BarIndex();x=xx;Lx=LastValue(x);
nbar=Param("N Pivot Bars",5,2,50,1);
tf=Param("Time Frame (min)",5,1,1440,1);tfrm=in1Minute*tf;
CleanPivots=ParamToggle("Use Clean Pivots","Off|On",1);
PivotSymmetry=ParamToggle("Use Symmetric Pivots","Off|On",0);
dispLabels=ParamToggle("Display Labels","Off|On",1);
TimeFrameSet(tfrm);
if(PivotSymmetry)
{
fc=1;
pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
}
else
{
fc=2;
pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
}
px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);
px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);
px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);
px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);
ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);
sumpk=Sum(pk,BarsSince(tr));"sumpk: " +WriteVal(Sumpk);
sumtr=Sum(tr,BarsSince(pk));"sumtr: " +WriteVal(Sumtr);
if(CleanPivots)
{
alternate_proc(pk,tr,sumpk,sumtr);
pk=pkg;
tr=trg;
px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);
px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);
px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);
px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);
ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);
}
pkh=IIf(pk,H,Null);
trl=IIf(tr,L,Null);
TimeFrameRestore();
fact=Nz(Max(tfrm/60,Interval()/60)/(Interval()/60));
if(fact==0)fact=1;
Lkbk=Nz(tfrm/Interval());
if(Lkbk>1)
{
pk=TimeFrameExpand(pk,tfrm,expandFirst);
pkh=TimeFrameExpand(pkh,tfrm,expandFirst);
pkhs=IIf(!IsEmpty(pkh),1,0);pkhs=pkhs-Ref(pkhs,-1);
pk=pk AND H==pkh;
cond1=Sum(pk,BarsSince(pkhs==1)+1)==1 AND pk;
pk=pk AND cond1;
tr=TimeFrameExpand(tr,tfrm,expandFirst);
trl=TimeFrameExpand(trl,tfrm,expandFirst);
trls=IIf(!IsEmpty(trl),1,0);trls=trls-Ref(trls,-1);
tr=tr AND L==trl;
cond1=Sum(tr,BarsSince(trls==1)+1)==1 AND tr;
tr=tr AND cond1;
px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);
px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);
px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);
px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);
ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);
}
ll=tr AND tl1<tl2;
hl=tr AND tl1>tl2;
hh=pk AND ph1>ph2;
lh=pk AND ph1<ph2;
dt=pk AND ph1==ph2;
db=tr AND tl1==tl2;
ll_h=IIf(ll,1,0);
hl_h=IIf(hl,2,0);
hh_h=IIf(hh,3,0);
lh_h=IIf(lh,4,0);
dt_h=IIf(dt,5,0);
db_h=IIf(db,6,0);
combi=ll_h+hl_h+lh_h+hh_h+dt_h+db_h;
t0=ValueWhen(combi,combi,0);
t1=ValueWhen(combi,combi,1);
t2=ValueWhen(combi,combi,2);
t3=ValueWhen(combi,combi,3);
t4=ValueWhen(combi,combi,4);
t5=ValueWhen(combi,combi,5);
//at pk
pAx=ValueWhen(pk,tx1);pAy=ValueWhen(pk,tl1);
pBx=ValueWhen(pk,px1);pBy=ValueWhen(pk,ph1);
// at tr
tAx=ValueWhen(tr,px1);tAy=ValueWhen(tr,ph1);
tBx=ValueWhen(tr,tx1);tBy=ValueWhen(tr,tl1);
GraphXSpace=5;SetChartBkColor(ColorRGB(0,0,0));SetChartOptions(0,chartShowDates);
SetBarFillColor(IIf(C>O,colorGreen,IIf(C<=O,colorRed,colorLightGrey)));
Plot(C,"Price",IIf(C>O,colorDarkGreen,IIf(C<=O,colorDarkRed,colorLightGrey)),64,0,0,0,0);
Plot(pkh,"",colorWhite,styleThick,0,0,0,-1);
Plot(trl,"",colorWhite,styleThick,0,0,0,-1);
PlotShapes(shapeSmallCircle*tr,IIf(Lx-ValueWhen(tr,x)>nbar*fact,ColorRGB(0,100,0),colorWhite),0,L,-10);
PlotShapes(shapeSmallCircle*pk,IIf(Lx-ValueWhen(pk,x)>nbar*fact,ColorRGB(255,0,0),colorWhite),0,H,10);
qq=Interval()/60;
if(qq < 60){tf=" min";tt=qq;}
else if(qq >= 60 AND qq < 1440){tf=" hrs";tt=qq/60;}
else if(qq >= 1440){tf=" days";tt=(qq/60)/24;}
qq=Max(tfrm/60,Interval()/60);
if(qq < 60){tfa=" min";tta=qq;}
else if(qq >= 60 AND qq < 1440){tfa=" hrs";tta=qq/60;}
else if(qq >= 1440){tfa=" days";tta=(qq/60)/24;}
Title =Name() +
"\nNbar: " + nbar +
"\nChart TF: " + tt + tf +
"\nTrend TF: " + tta + tfa;
abcdy_up=27;
abcdy_dn=15;
function GetVisibleBarCount()
{
lvb=Status("lastvisiblebar");
fvb=Status("firstvisiblebar");
return Min(lvb-fvb,BarCount-fvb);
}
function GfxConvertPixelsToBarX(Pixels)
{
lvb=Status("lastvisiblebar");
fvb=Status("firstvisiblebar");
pxchartleft=Status("pxchartleft");
pxchartwidth=Status("pxchartwidth");
fac=pxchartwidth/Pixels;
bar=(lvb-fvb)/fac;
return Nz(bar);
}
function GfxConvertPixelToValueY(Pixels)
{
local Miny,Maxy,pxchartbottom,pxchartheight;
Miny=Status("axisminy");
Maxy=Status("axismaxy");
pxchartbottom=Status("pxchartbottom");
pxchartheight=Status("pxchartheight");
fac=pxchartheight/Pixels;
Value=(Maxy-Miny)/fac;
return Nz(Value);
}
function GfxConvertBarToPixelX(bar)
{
lvb=Status("lastvisiblebar");
fvb=Status("firstvisiblebar");
pxchartleft=Status("pxchartleft");
pxchartwidth=Status("pxchartwidth");
return Nz(pxchartleft+bar*pxchartwidth/(lvb-fvb+1));
}
function GfxConvertValueToPixelY(value)
{
local Miny,Maxy,pxchartbottom,pxchartheight;
Miny=Status("axisminy");
Maxy=Status("axismaxy");
pxchartbottom=Status("pxchartbottom");
pxchartheight=Status("pxchartheight");
return Nz(pxchartbottom-floor(0.5+(Value-Miny)*pxchartheight/(Maxy-Miny)));
}
AllVisibleBars=GetVisibleBarCount();
fvb=Status("firstvisiblebar");
abcdy_up=GfxConvertPixelToValueY(abcdy_up);
abcdy_dn=GfxConvertPixelToValueY(abcdy_dn);
for(i=0;i<AllVisibleBars;i++)
{
if(ll[i+fvb] AND dispLabels)
{
lvix=i+fvb;GfxSelectFont("Tahoma",8,500); GfxSetBkMode(1);
GfxSetTextColor(colorYellow);GfxTextOut("LL",GfxConvertBarToPixelX(i)-3,GfxConvertValueToPixelY(L[lvix]-abcdy_dn));
GfxSetTextColor(colorYellow);GfxTextOut(""+L[lvix],GfxConvertBarToPixelX(i)-3,GfxConvertValueToPixelY(L[lvix]-2*abcdy_dn));
}
if(hl[i+fvb] AND dispLabels)
{
lvix=i+fvb;GfxSelectFont("Tahoma",8,500); GfxSetBkMode(1);
GfxSetTextColor(colorYellow);GfxTextOut("HL",GfxConvertBarToPixelX(i)-3,GfxConvertValueToPixelY(L[lvix]-abcdy_dn));
GfxSetTextColor(colorYellow);GfxTextOut(""+L[lvix],GfxConvertBarToPixelX(i)-3,GfxConvertValueToPixelY(L[lvix]-2*abcdy_dn));
}
if(db[i+fvb] AND dispLabels)
{
lvix=i+fvb;GfxSelectFont("Tahoma",8,500); GfxSetBkMode(1);
GfxSetTextColor(colorYellow);GfxTextOut("DB",GfxConvertBarToPixelX(i)-3,GfxConvertValueToPixelY(L[lvix]-abcdy_dn));
GfxSetTextColor(colorYellow);GfxTextOut(""+L[lvix],GfxConvertBarToPixelX(i)-3,GfxConvertValueToPixelY(L[lvix]-2*abcdy_dn));
}
if(hh[i+fvb] AND dispLabels)
{
lvix=i+fvb;GfxSelectFont("Tahoma",8,500); GfxSetBkMode(1);
GfxSetTextColor(colorYellow);GfxTextOut("HH",GfxConvertBarToPixelX(i)-5,GfxConvertValueToPixelY(H[lvix]+abcdy_up));
GfxSetTextColor(colorYellow);GfxTextOut(""+H[lvix],GfxConvertBarToPixelX(i)-5,GfxConvertValueToPixelY(H[lvix]+1.57*abcdy_up));
}
if(lh[i+fvb] AND dispLabels)
{
lvix=i+fvb;GfxSelectFont("Tahoma",8,500); GfxSetBkMode(1);
GfxSetTextColor(colorYellow);GfxTextOut("LH",GfxConvertBarToPixelX(i)-5,GfxConvertValueToPixelY(H[lvix]+abcdy_up));
GfxSetTextColor(colorYellow);GfxTextOut(""+H[lvix],GfxConvertBarToPixelX(i)-5,GfxConvertValueToPixelY(H[lvix]+1.57*abcdy_up));
}
if(dt[i+fvb] AND dispLabels)
{
lvix=i+fvb;GfxSelectFont("Tahoma",8,500); GfxSetBkMode(1);
GfxSetTextColor(colorYellow);GfxTextOut("DT",GfxConvertBarToPixelX(i)-5,GfxConvertValueToPixelY(H[lvix]+abcdy_up));
GfxSetTextColor(colorYellow);GfxTextOut(""+H[lvix],GfxConvertBarToPixelX(i)-5,GfxConvertValueToPixelY(H[lvix]+1.57*abcdy_up));
}
if(pk[i+fvb])
{
lvix=i+fvb;
Plot(LineArray(pAx[lvix],pAy[lvix],pBx[lvix],pBy[lvix],0,True ),"",ColorRGB(0,0,200),styleThick);
}
if(tr[i+fvb])
{
a = SAR(.19,.2); aa=Cross(C,a); aaa = ValueWhen(aa,a);
lvix=i+fvb;
Plot(LineArray(tAx[lvix],tAy[lvix],tBx[lvix],tBy[lvix],0,True ),"",ColorRGB(200,0,0),styleThick);
}
}
_SECTION_END();
px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);
px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);
px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);
px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);
ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);