Hello experts,
I have this formula for keltner and bollinger band histogram. There seems to be a bug in it. Doesn't do its thing. Can someone proficient and with time on his hands debug it for metastock 8. Thanks
Inputs: {------------------------------------------------}
Price(Close),
Length(20), { Length for Average True Range (ATR) & Std. Deviation (SD) Calcs }
nK(1.5), { Keltner Channel ATRs from Average }
nBB(2), { Bollinger Band Std. Devs. from Average }
AlertLine( 1 ), { BBS_Index level at which to issue alerts }
NormalColor( Red ), { Normal color for BBS_Ind }
AlertlColor( Blue ); { Color for BBS_Ind below alert line }
Variables: {---------------------------------------------}
ATR(0), { Average True Range }
SDev(0), { Standard Deviation }
BBS_Ind(0), { Bollinger Band Squeeze Indicator }
alertTextID(-1),
Denom(0),
LHMult(0);
if ( barnumber=1 ) then
Begin
If minmove <> 0 then
LHMult = pricescale/minmove;
end;
if barnumber = 1 and alertTextID = -1 then
alertTextID = Text_New(date,time,0,"dummy");
{-- Calculate BB Squeeze Indicator ----------------------}
ATR = AvgTrueRange(Length);
SDev = StandardDev(Price, Length, 1);
Denom = (nK*ATR);
If Denom <> 0 then
BBS_Ind = (nBB * SDev) /Denom;
If BBS_Ind < Alertline then
SetPlotColor(1, NormalColor)
else
SetPlotColor(1, AlertlColor);
{-- Plot the Index & Alert Line -------------------------}
Plot1(0, "BBS_Ind");
{-- Plot delta of price from Donchian mid line ----------}
value2 = LinearRegValue(price-((Highest(H, Length)+Lowest(L, Length))/2
+ xAverage(c,Length))/2,Length,0);
var:color(0); color = yellow;
if value2 > 0 then
if value2 > value2[1] then
color = green
else
color = darkgreen;
if value2 < 0 then
if value2 < value2[1] then color = red
else
color = darkred;
Plot3(value2*LHMult, "NickmNxtMove", color);
{plot3(value2,"BB Squeeze",color);}
{-- Issue Alert when the Squeeze is On ------------------}
if BBS_Ind crosses below AlertLine
and Text_GetTime(alertTextID) <> time then
begin
text_setLocation(alertTextID, date, time, 0);
Alert("Check for Squeeze Setups on " + SymbolName);
end;
{-- Issue Alert when the Squeeze Releases ---------------}
if BBS_Ind crosses above AlertLine
and Text_GetTime(alertTextID) <> time then
begin
text_setLocation(alertTextID, date, time, 0);
Alert("Squeeze is Over on " + SymbolName);
end;
if BBS_Ind crosses below AlertLine then
SetPlotColor(1, Green)
I have this formula for keltner and bollinger band histogram. There seems to be a bug in it. Doesn't do its thing. Can someone proficient and with time on his hands debug it for metastock 8. Thanks
Inputs: {------------------------------------------------}
Price(Close),
Length(20), { Length for Average True Range (ATR) & Std. Deviation (SD) Calcs }
nK(1.5), { Keltner Channel ATRs from Average }
nBB(2), { Bollinger Band Std. Devs. from Average }
AlertLine( 1 ), { BBS_Index level at which to issue alerts }
NormalColor( Red ), { Normal color for BBS_Ind }
AlertlColor( Blue ); { Color for BBS_Ind below alert line }
Variables: {---------------------------------------------}
ATR(0), { Average True Range }
SDev(0), { Standard Deviation }
BBS_Ind(0), { Bollinger Band Squeeze Indicator }
alertTextID(-1),
Denom(0),
LHMult(0);
if ( barnumber=1 ) then
Begin
If minmove <> 0 then
LHMult = pricescale/minmove;
end;
if barnumber = 1 and alertTextID = -1 then
alertTextID = Text_New(date,time,0,"dummy");
{-- Calculate BB Squeeze Indicator ----------------------}
ATR = AvgTrueRange(Length);
SDev = StandardDev(Price, Length, 1);
Denom = (nK*ATR);
If Denom <> 0 then
BBS_Ind = (nBB * SDev) /Denom;
If BBS_Ind < Alertline then
SetPlotColor(1, NormalColor)
else
SetPlotColor(1, AlertlColor);
{-- Plot the Index & Alert Line -------------------------}
Plot1(0, "BBS_Ind");
{-- Plot delta of price from Donchian mid line ----------}
value2 = LinearRegValue(price-((Highest(H, Length)+Lowest(L, Length))/2
+ xAverage(c,Length))/2,Length,0);
var:color(0); color = yellow;
if value2 > 0 then
if value2 > value2[1] then
color = green
else
color = darkgreen;
if value2 < 0 then
if value2 < value2[1] then color = red
else
color = darkred;
Plot3(value2*LHMult, "NickmNxtMove", color);
{plot3(value2,"BB Squeeze",color);}
{-- Issue Alert when the Squeeze is On ------------------}
if BBS_Ind crosses below AlertLine
and Text_GetTime(alertTextID) <> time then
begin
text_setLocation(alertTextID, date, time, 0);
Alert("Check for Squeeze Setups on " + SymbolName);
end;
{-- Issue Alert when the Squeeze Releases ---------------}
if BBS_Ind crosses above AlertLine
and Text_GetTime(alertTextID) <> time then
begin
text_setLocation(alertTextID, date, time, 0);
Alert("Squeeze is Over on " + SymbolName);
end;
if BBS_Ind crosses below AlertLine then
SetPlotColor(1, Green)