door Eppo » di 21 jan 2003, 23:26
Hieronder treffen de liefhebbers de beloofde functie zFourier, die je onder de tab "Systeem" kunt opbergen, ?aan.
Met dit systeem worden de zes krachtigste periodiciteiten berekend en afgedrukt in het TradingReport-venster.
De functie werkt met de N meest recente bars (type Close) en kan dus op de verschillende soorten grafieken worden toegepast.
Er zit een beperking in het maximale aantal bars dat gebruikt kan worden voor de berekening van de periodiciteiten. Die beperking hangt waarschijnlijk samen met de nauwkeurigheid van de Sine- en CoSine-functies. Het programma blokkeert daarom het maximale aantal xNumbersOfBars tot 174. Elk aantal bars van 1 t/m 174 is te gebruiken.
Ik hoop nog een oplossing voor dit probleem te kunnen vinden.
Suggesties zijn uiteraard welkom.
Met vr. gr. Eppo.
-----------------------------------------------------------------
value function zFourier (value xNumberOfBars=128)
{>>>Deze functie, versie 1.0 gedateerd 21 jan 2003, is gemaakt door Eppo R. Kooi.
De Fourier-functie berekent de belangrijkste periodiciteiten, d.w.z. de duur
uitgedrukt in aantallen bars, van een zich herhalend patroon in de recente
historie van het aandeel. <<<}
begin
value xI,xJ,xN,xSumI,xSumQ,xAng,xARe[],xAIm[],xATot[],xAMax[],xMi[],xPiN;
xN := xNumberOfBars;
{>>>xN mag een willekeurige waarde hebben, maar zinvol zijn waarden pas vanaf
bijv. 32 bars.
De functie beperkt het aantal bars waaruit de periodiciteit wordt berekend
tot maximaal 174, omdat de Sine- en CoSine-functies fouten maken boven dat
aantal, waarschijnlijk veroorzaakt door beperkte nauwkeurigheid van die
twee hulpfuncties. <<<}
if xN > 174 then xN:=174;
xPiN := 360/xN;
{>>> Bereken de periodiciteiten alleen voor de xN meest recente bars. <<<}
if CurrentBar = vLastBar then
begin
xAMax[1]:=0;
xAMax[2]:=0;
xAMax[3]:=0;
xAMax[4]:=0;
xAMax[5]:=0;
xAMax[6]:=0;
xMi[1]:=100;
xMi[2]:=200;
xMi[3]:=300;
xMi[4]:=400;
xMi[5]:=500;
xMi[6]:=600;
{>>> Stap door alle frequentie-waarden 1, 2, ... , N/2 <<<}
for xI := 1 to xN/2 do
begin
xSumI := 0;
xSumQ := 0;
{>>> Stap door xN bar-waarden (Close) <<<}
for xJ := 0 to xN-1 do
begin
xAng := xI*xJ*xPiN;
xSumI := xSumI + Close[xJ]*CoSine(xAng);
xSumQ := xSumQ - Close[xJ]*Sine(xAng);
end;
{>>> Bepaal de kracht van de frequentie/periodiciteiten <<<}
xARe[xI] := xSumI;
xAIm[xI] := xSumQ;
xATot[xI] := (xARe[xI]^2+xAIm[xI]^2)^0.5;
{>>> Selecteer de 6 krachtigste periodiciteiten <<<}
{>>> Laat de basis-periodiciteit, lengte xN, buiten beschouwing <<<}
if xATot[xI]>xAMax[1]&xI>1 then
begin
xAMax[1] := xATot[xI];
xMi[1] := xI;
end;
if xATot[xI]#xAMax[1]&xATot[xI]>xAMax[2]&xI>1 then
begin
xAMax[2] := xATot[xI];
xMi[2] := xI;
end;
if xATot[xI]#xAMax[2]&xATot[xI]>xAMax[3]&xI>1 then
begin
xAMax[3] := xATot[xI];
xMi[3] := xI;
end;
if xATot[xI]#xAMax[3]&xATot[xI]>xAMax[4]&xI>1 then
begin
xAMax[4] := xATot[xI];
xMi[4] := xI;
end;
if xATot[xI]#xAMax[4]&xATot[xI]>xAMax[5]&xI>1 then
begin
xAMax[5] := xATot[xI];
xMi[5] := xI;
end;
if xATot[xI]#xAMax[5]&xATot[xI]>xAMax[6]&xI>1 then
begin
xAMax[6] := xATot[xI];
xMi[6] := xI;
end;
end;
{>>> Presenteer de resultaten in het Tranding Report-venster <<<<}
Print('De volgende periodiciteiten zijn berekend uit de meest recente ',xN,' bars. De meest recente koers is ',Close[0],'.');
Print('Interpreteer de periodiciteiten van ',xN/2,' en ',xN/4,' bars met enige voorzichtigheid, daar deze geinduceerd');
Print('kunnen zijn door de basisduur van ',xN,' bars.');
Print('Periodiciteit ',xN/xMi[1],' bars met kracht ',xAMax[1]);
Print('Periodiciteit ',xN/xMi[2],' bars met kracht ',xAMax[2]);
Print('Periodiciteit ',xN/xMi[3],' bars met kracht ',xAMax[3]);
Print('Periodiciteit ',xN/xMi[4],' bars met kracht ',xAMax[4]);
Print('Periodiciteit ',xN/xMi[5],' bars met kracht ',xAMax[5]);
Print('Periodiciteit ',xN/xMi[6],' bars met kracht ',xAMax[6]);
end;
end;
Helaas bleken toch < -tekens in de opdrachtregels fouten te genereren. Ik heb daarom de < -tekens moeten vervangen door #-tekens.
Vervang na het kopieren alle #-tekens door < -tekens.
In commentaren werden de < -tekens niet verminkt, vandaar mijn eerdere opmerkingen hierover in een van de onderstaande berichten.
(Edited by Eppo at 10:38 am op 22,jan. 2003)
(Edited by Eppo at 10:41 am op 22,jan. 2003)