Let me try this again as this ended up in the wrong thread...
My drawings on PnF charts move to the left every day (daily data) while
the actual PnF chart does not. What would be a good way to stop this
from happening?
Attached find the code. If you put it into replay mode , draw a trend
line, or just click somewhere on the PnF chart (which will auto draw a
trendline), you will see what I mean.
Thanks,
Anthony
------------------------------------------------------------------------------------------------------------------------
GraphXSpace = 5;
SetChartBkColor(ParamColor("BackGroundColor", colorBlueGrey));
GraphColor = ParamColor("GraphColor",colorLightGrey);
GridColor = ParamColor("GridColor", colorLightBlue);//ColorRGB(39,49, 67) );
Scaling = ParamList("Scaling Method", "Traditional|Percentage|AVG True
Range");
LastClose = LastValue(Close);
if( LastClose < 5) boxsize = 0.10;
else
if( LastClose >=5 AND LastClose < 10) boxsize = 0.20;
else
if( LastClose >=10 AND LastClose < 20) boxsize = 0.50;
else
if( LastClose >=20 AND LastClose < 100) boxsize = 1.00;
else
if( LastClose >=100 AND LastClose < 200) boxsize = 2.00;
else
if( LastClose >=200 AND LastClose < 500) boxsize = 5.00;
else
if( LastClose >=500 AND LastClose < 1000)
boxsize = 10.00;
else
if( LastClose >=1000 AND LastClose < 2000)
boxsize = 20.00;
else
if( LastClose >=2000 AND LastClose <
5000) boxsize = 50.00;
if( scaling == "Traditional") Box = boxsize; //Param("Box", 1, 0.2,
10, 0.1);
else
if( scaling == "Percentage") Box = boxsize/100 *
LastValue(C);//Param("Box", 1, 0.2, 10, 0.1)/100 * LastValue(C);
else
if( scaling == "AVG True Range") Box = noxsize *
LastValue(ATR(20));//Param("Box", 1, 0.3, 5, 0.1) * LastValue( ATR (20));
shiftChart =0;
shiftLastClose =1;
shiftGrid =7;
shiftPriceAxis = 2;
Reverse = Param("Reverse", 3, 1, 5);
j = 0;
PFL[0] = Box * ceil(Low[0]/Box) + Box;
PFH[0] = Box * floor(High[0]/Box);
direction = 0;
for( i = 1; i < BarCount; i++ )
{
if(direction[j] == 0)
{
if(Low[i] <= PFL[j] - Box)
{
PFL[j] = Box * ceil(Low[i]/Box);
}
else
{
if(High[i] >= PFL[j] + Reverse*Box)
{
j++;
direction[j] = 1;
PFH[j] = Box * floor(High[i]/Box);
PFL[j] = PFL[j - 1] + Box;
}
}
}
else
{
if(High[i] >= PFH[j] + Box)
{
PFH[j] = Box * floor(High[i]/Box);
}
else
{
if( Low[i] <= PFH[j] - Reverse * Box )
{
j++;
direction[j] = 0;
PFH[j] = PFH[j - 1] - Box;
PFL[j] = Box * ceil(Low[i]/Box);
}
}
}
}
delta = BarCount - j -1;
direction = Ref(direction, - delta);
Hi = Ref(PFH, -delta) + Box/2;
Lo = Ref(PFL, -delta)- Box/2;
Cl = IIf(direction == 1, Hi, Lo);
Op = IIf(direction == 1, Cl - Box, Cl + Box);
PlotOHLC(Op, Hi, Lo, Cl,"", GraphColor ,
stylePointAndFigure|styleNoLabel, 0, 0 ,shiftChart);
Last = Ref( LastValue(C), -(BarCount-1));
Plot( Last,"", colorRed,styleNoLine|styleDots, 0 , 0, shiftLastClose);
// selected value
Value= IIf(direction>0, SelectedValue(Hi)-box/2, SelectedValue(Lo)+box/2);
//-----------------------------------------------------------------------
// GRID CONSTRUCTION
//----------------------------------------------------------------------
//PlotGridLines = ParamToggle("PlotdGrid", "Yes|No", 1);
//if (PlotGridLines)
//{
begin = SelectedValue(BarIndex());
end = LastValue(BarIndex());
period = end-begin +1;
if( begin<end)
{
ScreenHigh =LastValue( HHV(cl, period ));
ScreenLow =LastValue( LLV( Cl, period) );
top= LineArray( begin-shiftGrid, screenHigh, end, screenhigh, 0 , 1);
Bot= LineArray( begin-shiftGrid, screenlow, end, screenLow, 0, 1);
Plot( top, "", gridColor,styleLine|styleNoLabel , 0, 0,shiftGrid);
//Plot( bot, "", gridColor,styleLine|styleNoLabel, 0 , 0 , shiftGrid);
VerticalGrid = IIf ( BarIndex() >= begin, IIf(direction==1, screenHigh,
screenLow), Null);
Plot (VerticalGrid, "", gridColor, styleStaircase|styleNoLabel, 0,0, 1);
format = 8.2;
for ( n=LastValue(bot); n< LastValue(top) - 0.5*box; n = n+box)
{
Plot( bot , "", gridColor, styleLine|styleNoLabel, 0, 0 ,shiftGrid);
text = NumToStr(LastValue(bot) + 0.5*box, format);
xposition = BarCount+shiftPriceaxis;
yPosition = LastValue(bot)+0.27*box;
PlotText(text, xPosition , yPosition, colorWhite);
bot = bot + box;
}
//}
LineUp = LineArray( SelectedValue(BarIndex()), SelectedValue(L),
SelectedValue(BarIndex())+1, SelectedValue(L)+box, 1, 0 );
Linedown = LineArray( SelectedValue(BarIndex()), SelectedValue(H),
SelectedValue(BarIndex())+1, SelectedValue(H)-box, 1, 0 );
LineUp1 = LineArray( SelectedValue(BarIndex()), SelectedValue(Lo),
SelectedValue(BarIndex())+1, SelectedValue(Lo)+box, 1, 0 );
Linedown1 = LineArray( SelectedValue(BarIndex()), SelectedValue(Hi),
SelectedValue(BarIndex())+1, SelectedValue(Hi)-box, 1, 0 );
Plot(Lineup1, "Line", colorGreen, styleLine + styleNoLabel +
styleNoRescale);
Plot(LineDown1, "Line", colorBrown, styleLine + styleNoLabel +
styleNoRescale);
//Plot(IIf(SelectedValue(Cl=Lo),Lineup,Null), "Line", colorGreen,
styleLine + styleNoLabel + styleNoRescale);
//Plot(IIf(SelectedValue(CL=Hi),Linedown,Null), "Line", colorBrown,
styleLine + styleNoLabel + styleNoRescale);
}
//---------------------------------------------------------------------
// TITLE
//----------------------------------------------------------------------
Title = "\n" +
" Instrument : " + Name() + FullName()+"\n " +
"Formula : " + " PF StockChart" + "\n " +
"Box : " + box + " " +
"Reverse : " + reverse + "\n " +
"ATR : " + LastValue(ATR(20)) + "\n" +
"Date :" + Date();
_SECTION_END();