Pagina 1 van 1

Fast Fourier Transformations

BerichtGeplaatst: wo 01 jan 2003, 21:01
door do
Wie heeft er ervaring met het gebruik van ?Fast Fourier Transformations (FFT) en wellicht easy language code hiervoor.
In C en Basic heb ik eventueel wel de code hiervoor gevonden echter niet in easy language.

Fast Fourier Transformations

BerichtGeplaatst: vr 03 jan 2003, 19:25
door m trader
Hoi,

Er heeft ?eens iets op www.traders.com gestaan hierover. Vaak worden formules erbij gegeven voor verschillende platformen.

Fast Fourier Transformations

BerichtGeplaatst: vr 03 jan 2003, 19:25
door m trader
Hoi,

Er heeft ?eens iets op www.traders.com gestaan hierover. Vaak worden formules erbij gegeven voor verschillende platformen.

Fast Fourier Transformations

BerichtGeplaatst: ma 13 jan 2003, 21:42
door Eppo
Beste Do, ik gebruik FFT in Excel, maar zou de FFT ook in Vesticode willen omzetten, want dan wordt het back-testen wat gemakkelijker. Als Do of iemand anders de Basic-code heeft, dan zou ik die kunnen omzetten in Vesticode. Als tegenprestatie plaats ik die dan op dit forum.
Graag ontvang ik dan ook de Basic-source van FFT (of DFT). Het gaat me dus vooral om een FFT-subroutine en niet primair om een programma dat gebruik maakt van een FFT-subroutine. Zonodig pluk ik de FFT daar dan wel tussen uit.
Epost-adres: E.R.Kooi@XS4all.NL

Fast Fourier Transformations

BerichtGeplaatst: za 18 jan 2003, 11:51
door Eppo
Inmiddels heb ik de codes van een aantal CFT-, DFT- en FFT-programma's ontvangen en opgespoord en ben al een eind gevorderd met het maken van een FFT/DFT-programma in Vesticode.
Mijn eerste doel is om middels een Print-opdracht in het TradingReports-venster de drie belangrijkste periodiciteiten, zoals deze in de laatste periode met duur van N bars voorkomen, weer te geven.
Momenteel zoek ik uit hoe ik het beste de DFT uitsluitend op de laatste N bars kan uitvoeren en dus niet voor alle bars in de historie achtereenvolgend, want dat vergt veel te veel rekenwerk en is bovendien niet interessant. Althans niet voor het doel wat mij momenteel voor ogen staat, nl de belangrijkste periodiciteit bepalen over de meest recente periode in de historie (lengte N bars).

Fast Fourier Transformations

BerichtGeplaatst: di 21 jan 2003, 23:26
door Eppo
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)

Fast Fourier Transformations

BerichtGeplaatst: di 21 jan 2003, 23:30
door Eppo
Na verzenden van het vorige bericht ontdekte ik, dat dit forum alle inspringingen in het programma heeft verwijderd. Kennelijk worden de tabs die ik voor het inspringen heb gebruikt niet herkent.
Jammer.

Fast Fourier Transformations

BerichtGeplaatst: di 21 jan 2003, 23:34
door Eppo
Nog een waarneming: het kleiner-dan teken (<) is ongeschonden gebleven en niet door een emoticon vervangen. Ik heb het vinkje dan ook verwijderd.

Helaas was deze opmerking wat voorbarig. Het bleek alleen te gelden voor < -tekens in commentaarregels en niet voor opdrachtregels. Niet alleen werden daarin de < -tekens weggelaten, maar ook nog extra stukken van de opdracht.

(Edited by Eppo at 10:45 am op 22,jan. 2003)