Adaptive Moving Average

Kant-en-klare, geteste indicatoren en handelssystemen
Plaats reactie
Eric
Berichten: 2910
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Adaptive Moving Average

Bericht door Eric » vr jul 27, 2007 9:39 am

In het zomernummer 2007 van TKA bespreekt Jeroen Bijleveld de Adaptive Moving Average. De bedenker van deze indicator is overigens Perry Kaufman, een ex-raketgeleerde en een pionier op het gebied van computer-ondersteund beleggen. Hij heeft vele boeken geschreven over Technische Analyse, waaronder het klassieke standaardwerk New Trading Systems and Methods (Wiley Trading) waarin de Adaptive Moving Average uiteraard wordt behandeld.

Hierbij de TA-script versie van de Adaptive MA:

Code: Selecteer alles

{- Filename: Adaptive MA -}

const
  Fastest = 0.6667;
  Slowest = 0.0645;

function AMA(sPrice: TSeries; Period: integer): TSeries;
var
  Count, i: integer;
  sDiff, sSignal, sNoise, sEFRatio: TSeries;
  Smooth, AdaptMA: real;
begin
  Count := GetArrayLength(sPrice);
  Result := CreateSeries(Count);
  sDiff := AbsSeries(Momentum(sPrice, 1));
  sSignal := AbsSeries(Momentum(sPrice, Period));
  sNoise := MultiplySeriesBy(MA(sDiff, maSimple, Period), Period);
  sEFRatio := DivideSeries(sSignal, sNoise);
  AdaptMA := 0;
  for i:=0 to Count-1 do if IsValid(sEFRatio[i]) then
  begin
    Smooth := Sqr(sEFRatio[i] * (Fastest - Slowest) + Slowest);
    AdaptMA := AdaptMA + Smooth * (sPrice[i] - AdaptMA);
    Result[i] := AdaptMA;
  end;
end;

var
  Periode: integer;
begin
{ Indicator parameters }
  Periode := CreateParameterInteger('MA periode', 1, 999, 20, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
    RequiredBars := 10*Periode;
    NewBand := false;
    ScaleRange := srCommon;
  end;

{ Indicatorberekening (als voorbeeld hier een moving average) }
  with CreateLine(AMA(Close, Periode)) do
  begin
    Name := 'AMA';
    Color := clWhite;
  end;
end.
---
Eric

Plaats reactie