Dynamic Breakout system

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

Dynamic Breakout system

Bericht door Eric » ma feb 06, 2006 1:41 pm

Het Dynamic Breakout System van Michael Ahrens is door hem besproken tijdens de 5de Dag van de Technische Analyse (2003). Zie ook www.belbelta.nl voor meer informatie hierover.

Code: Selecteer alles

{- Filename: Dynamic Breakout -}

const
  sHelpText = 'Het Dynamic Breakout System van Michael Ahrens is door hem besproken '+
    'tijdens de 5de Dag van de Technische Analyse (2003). Zie ook www.belbelta.nl';
var
  ParamCeil, ParamFloor, ParamShortVol, ParamLongVol, ParamMA, ParamROC, i: integer;
  x, y, delta_vol, sROC: TSeries;
  var_a: real;
  int_a: integer;
  HighIsHighest, LowIsLowest: boolean;
begin
{ Indicator parameters }
  ParamCeil := CreateParameterInteger('Ceil periode', 1, 500, 60, true);
  ParamFloor := CreateParameterInteger('Floor periode', 1, 500, 20, true);
  ParamShortVol := CreateParameterInteger('Korte volatility', 1, 999, 210, true);
  ParamLongVol := CreateParameterInteger('Lange volatility', 1, 999, 280, true);
  ParamMA := CreateParameterInteger('MA periode (ROC)', 1, 500, 16, true);
  ParamROC := CreateParameterInteger('ROC periode', 1, 500, 50, true);

  with Indicator do
  begin
    RequiredBars := ParamLongVol;
    HelpText := sHelpText;
  end;

{ berekenen indicatoren }
  x := StdDev(Close, ParamShortVol);
  y := StdDev(ShiftSeries(Close, 1), ParamLongVol);
  delta_vol := DivideSeries(SubtractSeries(x, y), x);
  sROC := ROC(MA(Close, maExponential, ParamMA), ParamROC);

{ berekenen signalen }
  var_a := 20;
  for i:=FirstValidIndex(delta_vol) to BarCount-1 do
  begin
    var_a := var_a * (1 + delta_vol[i]);
    var_a := Min(Max(var_a, ParamFloor), ParamCeil);
    int_a := round(var_a);
    HighIsHighest := HighestIndex(High, i-int_a, i) = i;
    LowIsLowest := LowestIndex(Low, i-int_a, i) = i;

    if IsValid(sROC[i-1]) then
    begin
      if (sROC[i] > sROC[i-1]) and (sROC[i] < 1) and HighIsHighest then EnterLong(i) else
        if (sROC[i] < 0) and LowIsLowest then EnterShort(i) else
          if LowIsLowest and (MarketPosition(i) > 0) then ExitLong(i) else
            if HighIsHighest and (MarketPosition(i) < 0) then ExitShort(i);
    end;
  end;

{ ROC lijn tekenen }
  with CreateLine(sROC) do
  begin
    LineType := ltBar;
    ColorType := ctIndicator;
  end;
end.

Plaats reactie