Multi-fonds en -timeframe functies in Wall Street build 224

Nieuws en informatie over Wall Street en TA-script
Plaats reactie
Eric
Berichten: 3594
Lid geworden op: za sep 10, 2005 2:41 am
Locatie: Den Haag

Multi-fonds en -timeframe functies in Wall Street build 224

Bericht door Eric »

Wall Street build 224 heeft een aantal TA-script uitbreidingen ondergaan, waaronder de mogelijkheid om meerdere fondsen te combineren en meerdere timeframes te gebruiken.

U kunt deze versie downloaden van de Wall Street downloadpagina, waar ook een overzicht van de nieuwe functies te vinden is.

De komende maanden zullen deze nieuwe functies uitgebreid in de praktijk worden getest - de nieuwe functies zullen pas later in AlexPro worden opgenomen.

Hieronder vind u enkele voorbeeldscripts voor het werken met de nieuwe functies; uiteraard is de TA-script on-line help bijgewerkt met de laatste informatie.


Als eerste voorbeeld een relatieve sterkte indicator in TA-script.

Code: Selecteer alles

{- Filename: Sample - rel sterkte -} 

var 
  sFonds2: TSeriesEx; 
  sRS: TSeries; 
  factor: real; 
  sFondsID: string; 
  n: integer;
begin 
{$IFDEF PLATFORM-ALEX}
  sFondsID := '3829'; // 3829 = AEX index
{$ELSE}
  sFondsID := 'IAEX';
{$ENDIF}

  if BarCount > 0 then 
  begin 
{ lees de koersen van het 2de fonds, zelfde periode en BarInterval als de hoofdgrafiek } 
    sFonds2 := ReadPrices(sFondsID, BarInterval, DateTime[0], Now, 0); 
{ synchroniseer de koersen met de hoofdgrafiek }
    sFonds2 := SyncSeriesEx(sFonds2, smInsDuplicate); 
{ maak de eerste bar van de RS gelijk aan 100% } 
    n := FirstValidIndex(sFonds2.Close);
    if n < BarCount then
      factor := sFonds2.Close[n] / Close[n] * 100;
    sRS := MultiplySeriesBy(DivideSeries(Close, sFonds2.Close), factor); 
  end;

  with CreateLine(sRS) do 
  begin 
    Name := 'RS'; 
    Color := clLime; 
  end; 
end.
Zoals blijkt uit bovenstaand script moet de AEX in Alex en Wall Street met een verschillende naam/code worden geidentificeerd. Met het onderstaande script kunt u achterhalen wat de juiste code is voor een fonds, door de indicator in de grafiek van dat fonds te plaatsen.

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.
Het volgende voorbeeld is een indicator die een tweede timeframe (koerstype) weergeeft. U kunt hiermee dus bijvoorbeeld de weekkoersen onder de dagkoersen weergeven, of de kwartierbars onder de minuutbars. Aangezien u zowel in Wall Street als AlexPro ook een indicator van een indicator kunt maken, is het hierdoor mogelijk in 1 grafiek bijvoobeeld een MACD op dagbasis en op weekbasis te maken zonder hiervoor een speciaal TA-script te hoeven schrijven!

Code: Selecteer alles

{- Filename: Sample - 2e 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.
Als laatste voorbeeld een indicator die indicatoren op twee verschillende timeframes combineert in een handelssysteem. Dit is bedoeld als voorbeeld voor diegenen die zelf iets dergelijks willen maken in TA-script.

Code: Selecteer alles

{- Filename: Sample - 15min MA & dag MA -}

var
  nMADag, nMAkwartier, i: integer;
  sDag: TSeriesEx;
  sMADag, sMAKwartier: TSeries;
begin
{ Indicator parameters }
  nMADag := CreateParameterInteger('MA dag', 1, 999, 13, true);
  nMAKwartier := CreateParameterInteger('MA kwartier', 1, 999, 13, true);

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

{ Indicatorberekening }
  if BarCount > 0 then
  begin
{ MA van kwartierkoersen berekenen }
    sMAKwartier := MA(Close, maSimple, nMAKwartier);
{ dagkoersen ophalen }
    sDag := ReadPrices(Instrument.ID, biDay, DateTime[0], Now, nMADag);
{ MA van dagkoersen berekenen }
    sMADag := MA(sDag.Close, maSimple, nMADag);
{ MA waarden en dagkoersen synchroniseren met de hoofdgrafiek (kwartierkoersen) }
    sMADag := SyncSeries(sMADag, sDag, smInsDuplicate);
    sDag := SyncSeriesEx(sDag, smInsDuplicate);

    for i:=0 to BarCount-1 do
    begin
      if IsValid(sMADag[i]) and IsValid(sMAKwartier[i]) then
      begin
        if (sDag.Close[i] > sMADag[i]) and
           (Close[i] > sMAKwartier[i]) then
          EnterLong(i)
        else
        if (sDag.Close[i] < sMADag[i]) and
           (Close[i] < sMAKwartier[i]) then
          EnterShort(i);
      end;
    end;
  end;

  with CreateLine(sDag.Close) do
  begin
    Name := 'MA dag';
    Color := clRed;
  end;
  with CreateLine(sMADag) do
  begin
    Name := 'Dag';
    Color := clYellow;
  end;
  with CreateLine(sMAKwartier) do
  begin
    Name := 'MA kwartier';
    Color := clWhite;
  end;
end.
Plaats reactie