Het onderstaande script van de Keltner Channels (filename).
In het script staat op de 1e regel Filename ATR Channels en de 2e regel Keltner etc.
Deze Keltner Channels hebben 7 lijnen. Ik wil graag een bounce toevoegen. M.a.w.: Wanneer de koers gedurende de dag één van de lijnen raakt, wil ik graag via de scanner een selectie zien van bijv. de S&P 500. Het betekent bijv 7 scannen indien ik alleen de indicator gebruik. Raken betekent of de high, low, open of close. Zie bijlage.
Overigens gaat de huidige indicator uit van het gewone gemiddelde. Kan hier bij het gewogen en exponentieel gewogen gemiddelde?
Het is hetzelfde idee als de bekende EMA Bounce.
Het komt voort uit de ideas van dr. Alexander Elder.
Groet OT
Code: Selecteer alles
{- Filename: ATR Channels -}
{- Filename: Keltner Channel -}
function KeltnerChannel (Price:TSeries; Length:Integer; Factor:Real):TSeries;
begin
Result:= AddSeries(MA(Price,MASimple, Length) ,MultiplySeriesBy( MA(TrueRange(High, Low, Close), maSimple, Length) ,Factor));
end;
Var
Avg, Price :TSeries;
UpperK1, LowerK1, UpperK2,
LowerK2, UpperK3, LowerK3 :TSeries;
Length,Displace,PriceType :Integer;
_Const1, _Const2, _Const3 :Real;
Begin
Length := CreateParameterInteger('Length' , 1, 999, 22 , true);
_Const1 := CreateParameterReal ('Const' , 1 , 99, 1, true);
_Const2 := CreateParameterReal ('Const' , 1 , 99, 2, true);
_Const3 := CreateParameterReal ('Const' , 1 , 99, 3, true);
Displace := CreateParameterInteger('Displace', -1, 999, 0 , true);
PriceType := CreateParameterSelect ('PriceType', 'Open'#9'High'#9'Low'#9'Close', 3, true);
with Indicator do
begin
ShortName :='Keltner Channel';
RequiredBars := Length;
Indicator.NewBand := false;
Indicator.ScaleRange := srCommon;
end;
if PriceType=0 then Price := Open;
if PriceType=1 then Price := High;
if PriceType=2 then Price := Low;
if PriceType=3 then Price := Close;
Avg := ShiftSeries(MA(Price,MASimple, Length),Displace);
UpperK1 := ShiftSeries(KeltnerChannel(Price, Length, _Const1),Displace);
LowerK1 := ShiftSeries(KeltnerChannel(Price, Length, -_Const1),Displace);
UpperK2 := ShiftSeries(KeltnerChannel(Price, Length, _Const2),Displace);
LowerK2 := ShiftSeries(KeltnerChannel(Price, Length, -_Const2),Displace);
UpperK3 := ShiftSeries(KeltnerChannel(Price, Length, _Const3),Displace);
LowerK3 := ShiftSeries(KeltnerChannel(Price, Length, -_Const3),Displace);
with CreateLine(Avg) do
begin
Name :='Average';
Color := clRed;
end;
with CreateLine(UpperK1) do
begin
Name :='UpperK-1';
Color := clBlue;
end;
with CreateLine(LowerK1) do
begin
Name :='LowerK-1';
Color := clBlue;
end;
with CreateLine(UpperK2) do
begin
Name :='UpperK-2';
Color := clPurple;
end;
with CreateLine(LowerK2) do
begin
Name :='LowerK-2';
Color := clPurple;
end;
with CreateLine(UpperK3) do
begin
Name :='UpperK-3';
Color := clRed;
end;
with CreateLine(LowerK3) do
begin
Name :='LowerK-3';
Color := clRed;
end;
END.