eine Handelsstrategie auf der Grundlage der Elliott-Wellen-Theorie - Seite 67

 
Wahrscheinlich sind solche Zahlen in Echtzeit akzeptabel (obwohl es keine Grenze der Perfektion gibt :), aber bei historischen Tests ist die Situation, soweit ich weiß, ziemlich schwierig, selbst bei einer kurzen Stichprobe. Ich hoffe, Sie verdächtigen mich nicht, ein Gegner des Einsatzes von Computerberechnungen zu sein? :). Nach dem Lesen des Threads hatte ich den Eindruck, dass es wünschenswert wäre, den Algorithmus erheblich zu beschleunigen.

Natürlich besteht kein Zweifel daran, dass wir gerne einen schnelleren Algorithmus für Berechnungen hätten, insbesondere für historische Tests, aber andererseits erfordert diese Methodik keine Multimillionen von Durchläufen auf dem Tester, wie es für die traditionelle Anpassung an historische Daten erforderlich ist, die die meisten MT4-Benutzer gerne verwenden, um die Schöpfer dieses Produkts eifrig anzugreifen (Geben Sie mehr gierige Pillen!!!); o). Man muss sich darüber im Klaren sein, dass ein Lauf eines Expert Advisors, der nach dieser Methode erstellt wurde, in Bezug auf die Anwendbarkeit der Ergebnisse wissentlich einem optimierten EA mit 10000000000 Läufen überlegen sein wird, auf dessen Ergebnisse sein Autor in diesem Leben ewig warten kann;o))). Ich sage das nur auf der Grundlage meiner Erfahrungen mit der Erstellung eines Zufalls-Ratesystems, das ich oben in diesem Thread ganz am Anfang beschrieben habe. Die Optimierung eines Expert Advisors auf der Grundlage von Methoden der Mathematik besteht hauptsächlich in einer logischen Verbesserung des Algorithmus mit einem Minimum an anzupassenden Parametern (jeder Parameter hat auch einen begrenzten Variationsbereich), aber nicht in der Suche nach einigen "optimalen" Werten der verschiedenen Oszillatoren und gleitenden Durchschnitten und einigen Verhältnissen, die auf dem globalen Maximum im n-dimensionalen Raum gefunden wurden, wie es für die Standard-Historienanpassung erforderlich ist. Das in den obigen Beiträgen gezeigte Ergebnis wurde wahrscheinlich durch die Durchführung von nicht mehr als fünfzig vollständigen Durchläufen des Algorithmus mit der verfügbaren Historie erzielt. Nach jedem Durchlauf wurde der Algorithmus verfeinert und verbessert. Und im Moment tue ich immer noch das Gleiche. Ich mache 2-3 Durchläufe pro Tag, analysiere die Ergebnisse und verbessere den Algorithmus. Ich bin noch nicht ganz fertig, aber ich habe bereits die erste, mehr oder weniger funktionierende Version auf dem echten Konto gestartet. Ich habe noch keine Geschäfte damit gemacht. Der Expert Advisor wartet auf eine Abwärtsbewegung des Euro.
 
solandr, um die Testzeit zu beschleunigen/optimieren - haben Sie einen benutzerdefinierten Indikator oder Arrays verwendet, die X, X^2, usw. enthalten?
 
Ich verwende die benutzerdefinierten Indikatoren nicht, da ich geschrieben habe, dass jeder Aufruf davon im Testerprotokoll gestanzt wird. Ich habe einen Murray-Level-Indikator im Expert Advisor selbst eingeführt. Ich habe noch keine Arrays erfunden , die speziell die Berechnungen des Expert Advisors beschleunigen. Ehrlich gesagt, weiß ich nicht, was man erfinden kann. Die Informationen über die Berechnung der vorherigen Balken (Kanalgrenzen) werden natürlich in Arrays gespeichert und bei einem neuen Balken nicht neu berechnet. Ich glaube, ich habe meinen Algorithmus in Bezug auf die Geschwindigkeit praktisch ausgeschöpft und werde ihn nicht mehr beschleunigen können. Aber ich bin mir nicht ganz im Klaren über Arrays, die X,X^2 enthalten. Inwieweit kann die Suche nach Werten über ein großes Feld von X,X^2 die Rechenzeit reduzieren (Quadrieren)? Haben Sie rechnerische Vergleichsdaten? Es wäre interessant, einen Blick darauf zu werfen.
 
Das ist für Y=A*X+B auf jedem neuen Balken für jeden neuen Kanal?

Jetzt habe ich angefangen zu suchen und festgestellt, dass es möglich ist, den EA zu optimieren. Die Verstärkung sollte (N+1)/2 betragen, wobei N die maximale Kanallänge ist (Ihre aktuelle Version verwendet 300 - die Verstärkung sollte also das 150-fache betragen).
 
Soweit ich verstehe, schlagen Sie vor, ein kubisches Array zu organisieren, wobei jede Zeile einige Millionen beträgt und darin nach fertigen Antworten Y mit 3 verschiedenen Parametern A, X, B gesucht wird? Oder verstehe ich die Idee nicht ganz?
 
Nein, ich schlage nur vor, die Berechnung für jeden Balken nur einmal durchzuführen und diesen Wert dann N-mal zu verwenden (es wird ein Array gebildet, kein Zweifel :))
 
Wie ist das möglich, wenn sich die Kanäle auf jedem Balken leicht bewegen und ihre Grenzen verändern?
 
Ich kann den Algorithmus nicht vollständig ersetzen (ich muss noch einiges an Arbeit leisten), aber ich kann einen Teil eines optimierten Algorithmus in einen regulären Algorithmus einfügen. Das bedeutet, dass alle Vorberechnungen für den optimierten Algorithmus durchgeführt werden, der Kanal jedoch auf die übliche Weise berechnet wird. Hier ist das Protokoll:
2006.07.04 23:04:37 ChannelStDev3 GBPCHF,M15: Ausführen von deinit()<br / translate="no"> 2006.07.04 23:04:37 ChannelStDev3 GBPCHF,M15: Normale Skriptdauer+Optimierung579 ms
2006.07.04 23:04:36 KanalStDev3 GBPCHF,M15: a=-0.0001 b=2.2628 lastBar1 firstBar=105 StDev=0.001
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15: Es wurden 140 Kanäle auf 1000 Balken gefunden, die das Kriterium erfüllen
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15: Sie sind in 1 Serie
2006.07.04 23:04:36 KanalStDev3 GBPCHF,M15: initialisiert
2006.07.04 23:04:35 ChannelStDev3 GBPCHF,M15: erfolgreich geladen
2006.07.04 23:04:28 KanalStDev GBPCHF,M15: entfernt
2006.07.04 23:04:28 KanalStDev GBPCHF,M15: deinitialisiert
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15: Deinit() wird ausgeführt
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15: Normale Skriptdauer 547 ms
2006.07.04 23:04:27 KanalStDev GBPCHF,M15: a=-0.0001 b=2.2628 lastBar1 firstBar=105 StDev=0.001
2006.07.04 23:04:27 ChannelStDev GBPCHF,M15: Es wurden 140 Kanäle über 1000 Balken gefunden, die das Kriterium erfüllen


Die Zeit des optimierten Algorithmus sollte also etwa (579-547)=32 Millisekunden betragen. Grob gesagt, beträgt der Gewinn 547/32=17 Mal. Das sind sicherlich nicht 500 Mal, wie ich angenommen habe, das müssen Sie noch überprüfen. Vielleicht habe ich nicht berücksichtigt, dass inkompressible Verfahren mehr Zeit benötigen, als ich dachte. Ich werde versuchen, das morgen zu überprüfen.
 
Die beiden Berechnungsblöcke wurden getrennt gemessen.
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: deinitialisiert<br/ translate="no"> 2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Execute deinit()
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: a=0.0071 b=146.7474 lastBar1 firstBar=50 StDev=0.1056
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: 820 Kanäle gefunden, die das Kriterium über 1000 Bars erfüllen
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Sie sind in 8 Serien
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Zeit des konventionellen Algorithmus390 ms
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Zeit des optimierten Algorithmus0 ms
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: initialisiert
2006.07.05 14:34:15 ChannelStDev3 EURJPY,M15: erfolgreich geladen


Es bleibt abzuwarten, ob der optimierte Block korrekt berechnet wird. Gleichzeitig habe ich festgestellt, dass das Arbeiten mit Objekten erhebliche Zeit in Anspruch nimmt (fast ein Drittel der nicht optimierten Variante) - das Zeichnen im Backtest ist unerwünscht. Obwohl
 
Neu gemacht, mit Print
<br/ translate="no"> 14:54:04 ChannelStDev3 EURJPY,M15: k=64 a=0.002 b=146.8379 sigma=-1370529.6008
14:54:04 ChannelStDev3 EURJPY,M15: k=63 a=0.0025 b=146.829 sigma=-1348950.2071
14:54:04 ChannelStDev3 EURJPY,M15: k=62 a=0.0029 b=146.8197 sigma=-1327370.2369
14:54:04 ChannelStDev3 EURJPY,M15: k=61 a=0.0033 b=146.8105 sigma=-1305795.8008
14:54:04 ChannelStDev3 EURJPY,M15: k=60 a=0.0038 b=146.8016 sigma=-1284233.323
14:54:04 ChannelStDev3 EURJPY,M15: k=59 a=0.0042 b=146.7921 sigma=-1262664.9732
14:54:04 ChannelStDev3 EURJPY,M15: k=58 a=0.0046 b=146.7844 sigma=-1241133.5221
14:54:04 ChannelStDev3 EURJPY,M15: k=57 a=0.005 b=146.7769 sigma=-1219610.1431
14:54:04 ChannelStDev3 EURJPY,M15: k=56 a=0.0055 b=146.7678 sigma=-1198064.4492
14:54:04 ChannelStDev3 EURJPY,M15: k=55 a=0.0058 b=146.7611 sigma=-1176563.0841
14:54:04 ChannelStDev3 EURJPY,M15: k=54 a=0.0062 b=146.754 sigma=-1155059.1345
14:54:04 ChannelStDev3 EURJPY,M15: k=53 a=0.0066 b=146.7469 sigma=-1133558.635
14:54:04 ChannelStDev3 EURJPY,M15: k=52 a=0.007 b=146.7398 sigma=-1112061.7881
14:54:04 ChannelStDev3 EURJPY,M15: k=51 a=0.0073 b=146.7342 sigma=-1090593.6002
14:54:04 ChannelStDev3 EURJPY,M15: k=50 a=0.0074 b=146.7327 sigma=-1069186.857
14:54:04 ChannelStDev3 EURJPY,M15: k=49 a=0.0074 b=146.733 sigma=-1047808.1245
14:54:04 ChannelStDev3 EURJPY,M15: k=48 a=0.0073 b=146.7346 sigma=-1026446.748
14:54:04 ChannelStDev3 EURJPY,M15: k=47 a=0.0069 b=146.7404 sigma=-1005141.2611
14:54:04 ChannelStDev3 EURJPY,M15: k=46 a=0.0064 b=146.7494 sigma=-983876.6836
14:54:04 ChannelStDev3 EURJPY,M15: Optimierte Algorithmuszeit 31 ms
14:54:05 ChannelStDev3 EURJPY,M15: Gewöhnliche Algorithmuszeit 875 ms
14:54:05 ChannelStDev3 EURJPY,M15: Sie sind in 6 Serien
14:54:05 ChannelStDev3 EURJPY,M15: 824 Kanäle gefunden, die die Kriterien erfüllen, über 1000 Balken
14:54:05 ChannelStDev3 EURJPY,M15: a=0.0064 b=146.7494 lastBar1 firstBar=46 StDev=0.1044
14:54:05 ChannelStDev3 EURJPY,M15: Execute deinit()
14:54:05 ChannelStDev3 EURJPY,M15: deinitialisiert
14:54:05 ChannelStDev3 EURJPY,M15: entfernt


Allerdings gibt es Probleme mit Sigma :)