Domino score van Nico Bakker

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

Domino score van Nico Bakker

Bericht door Eric » vr nov 27, 2009 7:44 pm

Op de dag van de belegger 2009 hield Nico Bakker een presentatie over zijn Domino indicator. Deze indicator gebruikt 5 korte en 5 lange MA's, telt het aantal kruisingen van korte MA's en lange MA's, telt deze twee getallen op en deelt door 2. De uitkomst varieert tussen -10 en 10, en dit geeft een indicatie van de fase waarin de trend zit (-10=bear tot +10=bull).

De Powerpoint presentatie is als bijlage toegevoegd.

De eerste indicator laat de 10 MA's zien, de tweede berekent de domino score.

Code: Selecteer alles

{- Filename: Domino score MA's -}

var
  nMAKort, nMALang: array[0..4] of integer;
  sMAKort, sMALang: array[0..4] of TSeries;
  i: integer;
begin
{ Parameters }
  nMAKort[0] := CreateParameterInteger('MA kort 1', 1, 999, 3, true);
  nMAKort[1] := CreateParameterInteger('MA kort 2', 1, 999, 5, true);
  nMAKort[2] := CreateParameterInteger('MA kort 3', 1, 999, 8, true);
  nMAKort[3] := CreateParameterInteger('MA kort 4', 1, 999, 13, true);
  nMAKort[4] := CreateParameterInteger('MA kort 5', 1, 999, 21, true);
  nMALang[0] := CreateParameterInteger('MA lang 1', 1, 999, 35, true);
  nMALang[1] := CreateParameterInteger('MA lang 2', 1, 999, 40, true);
  nMALang[2] := CreateParameterInteger('MA lang 3', 1, 999, 45, true);
  nMALang[3] := CreateParameterInteger('MA lang 4', 1, 999, 50, true);
  nMALang[4] := CreateParameterInteger('MA lang 5', 1, 999, 55, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
    RequiredBars := nMALang[4];  // Aantal benodigde koersen om eerste indicatorwaarde te berekenen
    NewBand := false;
    ScaleRange := srCommon;
  end;

{ Berekening }
  for i:=0 to 4 do
  begin
    sMAKort[i] := MA(Close, maSimple, nMAKort[i]);
    sMALang[i] := MA(Close, maSimple, nMALang[i]);
  end;

{ Weergave }
  for i:=0 to 4 do
  begin
    with CreateLine(sMAKort[i]) do
    begin
      Name := 'MA kort '+IntToStr(i);
      Color := clYellow;
    end;
    with CreateLine(sMALang[i]) do
    begin
      Name := 'MA lang '+IntToStr(i);
      Color := clNavy;
    end;
  end;
end.
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.

Eric
Berichten: 2936
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Bericht door Eric » vr nov 27, 2009 7:46 pm

Code: Selecteer alles

{- Filename: Domino score -}

var
  nMAKort, nMALang: array[0..4] of integer;
  sMAKort, sMALang: array[0..4] of TSeries;
  sCount1, sCount2, sCount3, sCount4, sSentiment1, sSentiment2, sSentiment3: TSeries;
  i, i1, i2, i3: integer;
begin
{ Parameters }
  nMAKort[0] := CreateParameterInteger('MA kort 1', 1, 999, 3, true);
  nMAKort[1] := CreateParameterInteger('MA kort 2', 1, 999, 5, true);
  nMAKort[2] := CreateParameterInteger('MA kort 3', 1, 999, 8, true);
  nMAKort[3] := CreateParameterInteger('MA kort 4', 1, 999, 13, true);
  nMAKort[4] := CreateParameterInteger('MA kort 5', 1, 999, 21, true);
  nMALang[0] := CreateParameterInteger('MA lang 1', 1, 999, 35, true);
  nMALang[1] := CreateParameterInteger('MA lang 2', 1, 999, 40, true);
  nMALang[2] := CreateParameterInteger('MA lang 3', 1, 999, 45, true);
  nMALang[3] := CreateParameterInteger('MA lang 4', 1, 999, 50, true);
  nMALang[4] := CreateParameterInteger('MA lang 5', 1, 999, 55, true);

{ Indicator eigenschappen }
  with Indicator do 
  begin
    RequiredBars := nMALang[4];  // Aantal benodigde koersen om eerste indicatorwaarde te berekenen
    NewBand := true;
  end;

{ Berekening }
  for i:=0 to 4 do
  begin
    sMAKort[i] := MA(Close, maSimple, nMAKort[i]);
    sMALang[i] := MA(Close, maSimple, nMALang[i]);
  end;

  sCount1 := FillSeries(CreateSeries(BarCount), 0);
  sCount2 := FillSeries(CreateSeries(BarCount), 0);
  sCount3 := FillSeries(CreateSeries(BarCount), 0);
  sCount4 := FillSeries(CreateSeries(BarCount), 0);
  for i:=0 to BarCount-1 do
  begin
    i1 := 0;
    i2 := 0;
    i3 := 1;
    while (i1 < 10) and (i2 < 5) do
    begin
      if IsValid(sMAKort[i2][i]) and IsValid(sMAKort[i3][i]) then
        if sMAKort[i2][i] > sMAKort[i3][i] then sCount1[i] := sCount1[i]+1 else sCount3[i] := sCount3[i] - 1;
      if IsValid(sMALang[i2][i]) and IsValid(sMALang[i3][i]) then
        if sMALang[i2][i] > sMALang[i3][i] then sCount2[i] := sCount2[i]+1 else sCount4[i] := sCount4[i] - 1;

      i1 := i1 + 1;
      i3 := i3 + 1;
      if i3 > 4 then
      begin
        i2 := i2 + 1;
        i3 := i2 + 1;
      end;
    end;
  end;
  
  sSentiment1 := AddSeries(sCount1, sCount3);
  sSentiment2 := AddSeries(sCount2, sCount4);
  sSentiment3 := DivideSeriesBy(AddSeries(sSentiment1, sSentiment2), 2);
  for i:=0 to BarCount-1 do
    if sSentiment3[i] > 0 then SetBarColor(0, i, clLime) else
      if sSentiment3[i] < 0 then SetBarColor(0, i, clRed);

{ Weergave }
  with CreateLine(sSentiment3) do
  begin
    Color := clLime;
    Name := 'Sentiment3';
    LineType := ltBar;
    LineContent := lcTAR;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 0)) do
  begin
    Color := clSilver;
    Name := '0';
    LineContent := lcConstant;
  end;
end.

Plaats reactie