Ik zou graag een scanner willen mbt de Force Index -Keltner Channels.
De voorwaarden:
Bullish:
Op het moment dat de Force Index (groene lijn) boven de Upper Channel van de Keltner Channel (blauwe lijn) komt, wil ik graag de signalen van de aandelen zien in de Tar-scanner.
Bearish:
Op het moment dat de Force Index (groene lijn) onder de Lower Channel van de Keltner Channel (paarse lijn) komt, wil ik graag de signalen van de aandelen zien in de scanner.
Waarom?
Op het moment dat FI boven en of onder een Channel komt, is de koersbeweging in de regel niet lang vol te houden. De FI keert dat binnen 1 dag of meerdere dagen terug in de Channel. Het betekent dat de koersbeweging ten einde 'KAN' zijn en er een tegengestelde beweging op gang 'kan' komen.
Het geeft de bekende Force Index een extra mogelijkheid om mee te werken.
Bij interesse:
Free Chart Schhol van www. stockcharts.com
Voorbeeld: Zie bijlage
Het script:
Code: Selecteer alles
{- Filename: Force Index - Keltner Channels -}
function ForceIndex(Close, Volume: TSeries; Periode: integer): TSeries;
begin
Result := MA(MultiplySeries(Volume, SubtractSeries(Close, ShiftSeries(Close, 1))),
maExponential, Periode);
end;
function KeltnerChannel(Avg, Price: TSeries; Length: Integer; Factor: Real): TSeries;
begin
// Result:= AddSeries(MA(Price, MASimple, Length), MultiplySeriesBy(MA(TrueRange(Price, Price, Price), maSimple, Length), Factor));
Result:= AddSeries(Avg, MultiplySeriesBy(MA(TrueRange(Price, Price, Price), maSimple, Length), Factor));
end;
var
MAPeriode: integer;
sFI, sZero: TSeries;
sUpperK, sLowerK, sEMA: TSeries;
Length, EMALength: Integer;
_Const: Real;
begin
{ Indicator parameters }
MAPeriode := CreateParameterInteger('MA Force Index', 1, 999, 13, true);
Length := CreateParameterInteger('ATR Length', 1, 999, 26, true);
_Const := CreateParameterReal('ATR Const', 1 , 99, 3, true);
EMALength := CreateParameterInteger('ATR EMA Length', 1, 999, 26, true);
{ Indicator eigenschappen }
with Indicator do
begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
RequiredBars := MaxInt(5*MAPeriode, 5*(Length+EMALength));
end;
sFI := ForceIndex(Close, Volume, MAPeriode);
sZero := FillSeries(CreateSeries(BarCount), 0);
sEMA := MA(sFI, maExponential, EMALength);
sUpperK := KeltnerChannel(sEMA, sFI, Length, _Const);
sLowerK := KeltnerChannel(sEMA, sFI, Length, -_Const);
with CreateLine(sFI) do
begin
Name := 'Force Index';
Color := clLime;
LineContent := lcTAR;
end;
with CreateLine(sEMA) do
begin
Name := 'EMA';
Color := clRed;
LineType := ltDot;
end;
with CreateLine(sUpperK) do
begin
Name := 'UpperK';
Color := clBlue;
end;
with CreateLine(sLowerK) do
begin
Name := 'LowerK';
Color := clPurple;
end;
with CreateLine(sZero) do
begin
Name := 'Nullijn';
Color := clGray;
end;
end.