TradersBulletin november 2009

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

TradersBulletin november 2009

Bericht door Eric » di nov 10, 2009 11:15 am

Hierbij een overzicht van de TA-script indicatoren behorende bij de artikelen in het TradersBulletin van november 2009.

Tradingsysteem op de EUR/USD met een DMI en Moving Average door Rombout Kerstens.

Code: Selecteer alles

{- Filename: rhk_MA_DMI -}

(************************************************
Indicator gemaakt op: 28-12-2005
Auteur: <rhk>
*************************************************)

var
// declaraties variabelen
  ParamMA,ParamDMI,I: integer;  // parameterwaarde
  nullijn: Tseries; 
  momentum: Tseries;

  dmikruising, makruising: TlineCrossings;
  dmilong, dmishort, malong, mashort: boolean;
  
begin

  // Indicator eigenschappen
  with Indicator do
  begin
    ShortName := 'rhk_MA_DMI';  // naam boven grafiek
    SupportedSignals := [sgEnterLong, sgEnterShort];  // aan/verkoopsignalen
  end;

  // Indicator parameters
  ParamMA := CreateParameterInteger('Parameter MA', 1, 999, 30, true);
  ParamDMI := CreateParameterInteger('Parameter DMI', 1, 999, 14, true);
  nullijn := Createseries(BarCount);
  FillSeries(nullijn,0);
  // Aantal benodigde koersen om eerste indicatorwaarde te berekenen
  Indicator.RequiredBars := ParamMA;
  momentum := CreateSeries(Barcount);
  dmikruising := Crossings(DIplus(High,low,close,ParamDMI), DIMinus(High,low,close,ParamDMI))
  makruising:= Crossings(Close, MA(Close, maSimple, ParamMA))
  malong:= false
  mashort:=false
 for i:=paramMA to BarCount-1 do
  Begin
    If dmikruising[i] = lc1over2 then begin dmilong := true ; dmishort := false; end;
    If dmikruising[i] = lc2over1 then begin dmishort := true ; dmilong := false; end;
    if makruising[i] = lc1over2 then begin malong := true ; mashort := false; end;
    if makruising[i] = lc2over1 then begin mashort:= true ; malong := false; end;
    If dmilong and malong then Enterlong(i);
    If dmishort and mashort then Entershort(i);

    
  End;  
 
  // Indicatorberekening 
  with CreateLine(SubtractSeries(Close, MA(Close, maSimple, ParamMA))) do
  begin
  // Indicator lijn eigenschappen
    Name := 'rhk_dmi_ma (1)';
    Color := RGB(0,255,0);
  end;
  with CreateLine(nullijn) do
  begin
  // Indicator lijn eigenschappen
    Name := 'rhk_dmi_ma (2)';
    Color := RGB(255,255,255);
  end;

end.

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

Bericht door Eric » di nov 10, 2009 11:23 am

Multi-fonds en multi-timeframe met TA-script door Eric Jansen.

De uitzend index.

Code: Selecteer alles

{- Filename: Uitzend index -}

var
  ID: array of string;
  Weight: array of real;

procedure AddToIndex(AInstrumentId: string; AWeight: real);
var
  n: integer;
begin
  n := GetArrayLength(ID);
  SetArrayLength(ID, n+1);
  SetArrayLength(Weight, n+1);
  ID[n] := AInstrumentId;
  Weight[n] := AWeight;
end;

var
  sTemp: TSeriesEx;
  i: integer;
  sIndexPrice: TSeries;
begin
{$IFDEF PLATFORM-WS}
{ Wall Street code voorbeeld }
  AddToIndex('ARANDSTAD', 2);  // Randstad
  AddToIndex('AUNIQUE', 2);    // USG
  AddToIndex('ABRUNEL', 1);    // Brunel
{$ELSE}
{ Alex code voorbeeld }
  AddToIndex('166', 2);        // Randstad
  AddToIndex('203909', 2);     // USG
  AddToIndex('24', 1);         // Brunel
{$ENDIF}

  sIndexPrice := FillSeries(CreateSeries(BarCount), 0);
  if BarCount > 0 then
  begin
{ lees de koersen, zelfde periode en BarInterval als de hoofdgrafiek }
    for i:=0 to GetArrayLength(ID)-1 do
    begin
      sTemp := ReadPrices(ID[i], BarInterval, DateTime[0], Now, 0);
{ synchroniseer de koersen met de hoofdgrafiek }
      sTemp := SyncSeriesEx(sTemp, smInsDuplicate);
{ pas de weging toe }
      sIndexPrice := AddSeries(sIndexPrice, MultiplySeriesBy(sTemp.Close, Weight[i]));
    end;
  end;

  with CreateLine(sIndexPrice) do
  begin
    Name := 'Index';
    Color := clLime;
  end;
end.
Top 5 index volume

Code: Selecteer alles

{- Filename: Top 5 index volume -}

var
  ID: array of string;
  Weight: array of real;

procedure AddToIndex(AInstrumentId: string; AWeight: real);
var
  n: integer;
begin
  n := GetArrayLength(ID);
  SetArrayLength(ID, n+1);
  SetArrayLength(Weight, n+1);
  ID[n] := AInstrumentId;
  Weight[n] := AWeight;
end;

var
  sTemp: TSeriesEx;
  i: integer;
  sIndexPrice: TSeries;
begin
{$IFDEF PLATFORM-WS}
{ Wall Street code voorbeeld }
  AddToIndex('AKON.OLIE', 194);
  AddToIndex('AISPAT', 135);
  AddToIndex('AING', 255);
  AddToIndex('AAEGON', 195);
  AddToIndex('AUNILEVER', 211);
{$ELSE}
{ Alex code voorbeeld }
  AddToIndex('180134', 194);
  AddToIndex('59', 135);
  AddToIndex('110220', 255);
  AddToIndex('28825', 195);
  AddToIndex('205556', 211);
{$ENDIF}

  sIndexPrice := FillSeries(CreateSeries(BarCount), 0);
  if BarCount > 0 then
  begin
{ lees de koersen, zelfde periode en BarInterval als de hoofdgrafiek }
    for i:=0 to GetArrayLength(ID)-1 do
    begin
      sTemp := ReadPrices(ID[i], BarInterval, DateTime[0], Now, 0);
{ synchroniseer de koersen met de hoofdgrafiek }
      sTemp := SyncSeriesEx(sTemp, smInsDuplicate);
{ pas de weging toe }
      sIndexPrice := AddSeries(sIndexPrice, MultiplySeriesBy(sTemp.Volume, Weight[i]));
    end;
  end;

  with CreateLine(sIndexPrice) do
  begin
    Name := 'Index';
    Color := clLime;
    LineType := ltBar;
  end;
end.
ShowId script om de fondsidentificatie op te vragen

Code: Selecteer alles

{- Filename: ShowId -}

begin
  Indicator.NewBand := false;
  with CreateText(0, 0, Instrument.ID) do
  begin
    X1Pct := 100;
    Y1Pct := 100;
    HorzPosition := hpLeft;
  end;
end.
Tweede timeframe

Code: Selecteer alles

{- Filename: Tweede timeframe -}

var
  sAEX: TSeriesEx;
  nInterval: TDateTime;
  bFill: boolean;
begin
  nInterval := CreateParameterBarInterval(biMonth);
  bFill := CreateParameterBoolean('Opvullen', false, false);

  if BarCount > 0 then
  begin
    sAEX := ReadPrices(Instrument.ID, nInterval, DateTime[0], Now, 0);

    if bFill then
      sAEX := SyncSeriesEx(sAEX, smInsDuplicate)
    else
      sAEX := SyncSeriesEx(sAEX, smInsNan);
  end;

  with CreateLineOHLC(sAEX.Open, sAEX.High, sAEX.Low, sAEX.Close) do
  begin
    Name := 'Koersen';
    Color := clLime;
  end;
end.

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

Bericht door Eric » di nov 10, 2009 11:25 am

Triple MACD

Code: Selecteer alles

{- Filename: Sample - Triple MACD -}

var
  nMA1, nMA2, nMA3, i: integer;
  sUur, sDag: TSeriesEx;
  sMACDKwartier, sMACDUur, sMACDDag: TSeries;
  bKwartier, bUur, bDag, bLong, bShort: boolean;
begin
{ Indicator parameters }
  nMA1 := CreateParameterInteger('MA1', 1, 999, 12, true);
  nMA2 := CreateParameterInteger('MA2', 1, 999, 26, true);
  nMA3 := CreateParameterInteger('MA3', 1, 999, 9, true);
  bKwartier := CreateParameterBoolean('Signaal in MA(hoofdgrafiek=kwartier)', true, true);
  bUur := CreateParameterBoolean('Signaal in MA(uur)', false, true);
  bDag := CreateParameterBoolean('Signaal in MA(dag)', false, true);

{ Indicator eigenschappen }
  with Indicator do
  begin
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen }
    RequiredBars := 5*(nMA2+nMA3);
    SafeRefreshInterval := 30;
  end;

{ Indicatorberekening }
  if BarCount > 0 then
  begin
{ koersen ophalen }
    sUur := ReadPrices(Instrument.ID, biHour, DateTime[0], Now, Indicator.RequiredBars);
    sDag := ReadPrices(Instrument.ID, biDay, DateTime[0], Now, Indicator.RequiredBars);

{ MACD's berekenen }
    sMACDKwartier := MACD(Close, nMA1, nMA2);
    sMACDKwartier := SubtractSeries(sMACDKwartier, MA(sMACDKwartier, maExponential, nMA3));
    sMACDUur := MACD(sUur.Close, nMA1, nMA2);
    sMACDUur := SubtractSeries(sMACDUur, MA(sMACDUur, maExponential, nMA3));
    sMACDDag := MACD(sDag.Close, nMA1, nMA2);
    sMACDDag := SubtractSeries(sMACDDag, MA(sMACDDag, maExponential, nMA3));

{ MA waarden en koersen synchroniseren met de hoofdgrafiek (kwartierkoersen) }
    sMACDUur := SyncSeries(sMACDUur, sUur, smInsDuplicate);
    sMACDDag := SyncSeries(sMACDDag, sDag, smInsDuplicate);
    sUur := SyncSeriesEx(sUur, smInsDuplicate);
    sDag := SyncSeriesEx(sDag, smInsDuplicate);

    for i:=0 to BarCount-1 do
    begin
      if IsValid(sMACDDag[i]) and IsValid(sMACDUur[i]) and IsValid(sMACDKwartier[i]) then
      begin
        bLong := (not bKwartier or (sMACDKwartier[i] > 0)) and
                 (not bUur or (sMACDUur[i] > 0)) and
                 (not bDag or (sMACDDag[i] > 0)) and
                 (bKwartier or bUur or bDag);
        bShort := (not bKwartier or (sMACDKwartier[i] < 0)) and
                  (not bUur or (sMACDUur[i] < 0)) and
                  (not bDag or (sMACDDag[i] < 0)) and
                  (bKwartier or bUur or bDag);
        if bLong then EnterLong(i) else if bShort then EnterShort(i);
      end;
    end;
  end;

  with CreateLine(sMACDKwartier) do
  begin
    Name := 'MACD kwartier';
    Color := clYellow;
  end;
  with CreateLine(sMACDUur) do
  begin
    Name := 'MACD kwartier';
    Color := clLime;
  end;
  with CreateLine(sMACDDag) do
  begin
    Name := 'MACD kwartier';
    Color := clRed;
  end;
  with CreateLine(FillSeries(CreateSeries(BarCount), 0)) do
  begin
    Name := '0';
    Color := clSilver;
  end;
end.

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

Bericht door Eric » di nov 10, 2009 11:27 am

Coppock indicator

Code: Selecteer alles

{- Filename: Coppock curve -} 

var 
  nROC1, nROC2, nWMA, i: integer; 
  sROC, sCoppock: TSeries; 
begin 
{ Indicator parameters } 
  nROC1 := CreateParameterInteger('ROC 1', 1, 999, 11, true); 
  nROC2 := CreateParameterInteger('ROC 1', 1, 999, 14, true); 
  nWMA := CreateParameterInteger('WMA', 1, 999, 10, true); 

{ Indicator eigenschappen } 
  with Indicator do 
  begin 
{ Aantal benodigde koersen om eerste indicatorwaarde te berekenen } 
    RequiredBars := nWMA + nROC2; 
  end; 

{ bereken alle benodigde indicatorwaarden } 
// Coppock = WMA [10] ; of ; (ROC [14] + ROC [11] ). 
  sROC := AddSeries(ROC(Close, nROC1), ROC(Close, nROC2)); 
  sCoppock := MA(sROC, maWeighted, nWMA); 

  for i:=2 to BarCount-1 do 
  begin 
    if IsValid(sCoppock[i-2]) and (sCoppock[i] < 0) and 
      (sCoppock[i-2] > sCoppock[i-1]) and (sCoppock[i] > sCoppock[i-1]) then 
      Signals[i] := sgEnterLong; 
  end; 
  
  with CreateLine(sROC) do 
  begin 
    Name := 'ROC'; 
    Color := clLime; 
  end; 
  with CreateLine(sCoppock) do 
  begin 
    Name := 'Coppock'; 
    Color := clRed; 
  end; 
end.

Plaats reactie