Fast Fourier Transformations

Vragen en suggesties over Vesticode

Moderator: Perry

Fast Fourier Transformations

Berichtdoor do » wo 01 jan 2003, 21:01

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.
do
 
Berichten: 8
Geregistreerd op: wo 01 jan 2003, 20:46

Fast Fourier Transformations

Berichtdoor m trader » vr 03 jan 2003, 19:25

Hoi,

Er heeft ?eens iets op www.traders.com gestaan hierover. Vaak worden formules erbij gegeven voor verschillende platformen.
m trader
 
Berichten: 35
Geregistreerd op: vr 01 maart 2002, 14:28

Fast Fourier Transformations

Berichtdoor m trader » vr 03 jan 2003, 19:25

Hoi,

Er heeft ?eens iets op www.traders.com gestaan hierover. Vaak worden formules erbij gegeven voor verschillende platformen.
m trader
 
Berichten: 35
Geregistreerd op: vr 01 maart 2002, 14:28

Fast Fourier Transformations

Berichtdoor Eppo » ma 13 jan 2003, 21:42

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
Vr. gr. Eppo
Eppo
 
Berichten: 32
Geregistreerd op: ma 08 okt 2001, 21:10
Woonplaats: Leiderdorp

Fast Fourier Transformations

Berichtdoor Eppo » za 18 jan 2003, 11:51

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).
Vr. gr. Eppo
Eppo
 
Berichten: 32
Geregistreerd op: ma 08 okt 2001, 21:10
Woonplaats: Leiderdorp

Fast Fourier Transformations

Berichtdoor 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)
Eppo
 
Berichten: 32
Geregistreerd op: ma 08 okt 2001, 21:10
Woonplaats: Leiderdorp

Fast Fourier Transformations

Berichtdoor Eppo » di 21 jan 2003, 23:30

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.
Vr. gr. Eppo
Eppo
 
Berichten: 32
Geregistreerd op: ma 08 okt 2001, 21:10
Woonplaats: Leiderdorp

Fast Fourier Transformations

Berichtdoor Eppo » di 21 jan 2003, 23:34

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)
Eppo
 
Berichten: 32
Geregistreerd op: ma 08 okt 2001, 21:10
Woonplaats: Leiderdorp


Keer terug naar Vesticode

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 15 gasten

cron