Eric
Geregistreerd op: 10-9-2005 Berichten: 1413 Woonplaats: Den Haag
|
Geplaatst: Wo Jun 18, 2008 5:53 pm Onderwerp: Multi-fonds en -timeframe functies in Wall Street build 224 |
|
|
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: |
{- 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: | {- 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: | {- 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: | {- 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. |
|
|