Adaptive MA smooth factor

Stel hier uw vragen over TA-script, of help anderen met het oplossen van hun probleem
Plaats reactie
jsaturnus
Berichten: 10
Lid geworden op: do apr 24, 2008 1:27 pm

Adaptive MA smooth factor

Bericht door jsaturnus » do mar 24, 2011 12:28 pm

De smooth factor van de Adaptive moving average kan gebruikt worden om te bepalen of een aandeel zich trendmatig beweegt, of in een trading range zit. Ik gebruik het op de kwartier en uurgrafiek van aandelen en combineer dat met een trendvolgend systeem.

Ik vind dit beter en sneller werken dan de ADX, RAVI of BWI.

Met dank aan de vele en waardevolle info die ik hier gevonden heb.

Code: Selecteer alles

{- Filename: AMA smooth factor -}

const 
  Fastest = 0.6667; 
  Slowest = 0.0645; 

function Smooth(sPrice: TSeries; Period: integer): TSeries; 
var 
  Count, i: integer; 
  sDiff, sSignal, sNoise, sEFRatio: TSeries; 
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); 
  for i:=0 to Count-1 do if IsValid(sEFRatio[i]) then 
  begin 
    Result[i] := Sqr(sEFRatio[i] * (Fastest - Slowest) + Slowest); 
  end; 
end; 

var 
  Periode: integer;
  TrendTrading: real;
  sZero: TSeries;
begin 
  { Indicator parameters } 
  Periode := CreateParameterInteger('Adaptive MA periode', 1, 999, 40, true); 
  TrendTrading := CreateParameterReal('Trend / trading grens', 0, 1, 0.04, true); 

  { Indicator eigenschappen } 
  with Indicator do 
  begin 
  { Aantal benodigde koersen om eerste indicatorwaarde te berekenen } 
    RequiredBars := 10*Periode; 
    NewBand := true; 
    ScaleRange := srCommon; 
  end; 
  
  sZero := FillSeries(CreateSeries(BarCount), TrendTrading); 
                  
  { Indicator tekenen } 
  with CreateLine(Smooth(Close, Periode)) do 
  begin 
    Name := 'AMA Smooth'; 
    Color := clBlue; 
  end; 
  with CreateLine(sZero) do 
  begin 
    Name := 'Trend-trading'; 
    Color := clSilver; 
    LineContent := lcConstant;
  end; 
end.

Plaats reactie