Aber der Strategietester von mt5 kann nicht mit diesen Tickdaten arbeiten - richtig? :(
Würden Sie ein Skript programmieren, das aus den Tickdaten ein künstliches Symbol für MT5 erstellt, so dass dieses künstliche Symbol(e) mit den eigenen lokalen Tickdaten getestet und optimiert werden kann?
== google translate ====>
Aber mt5 strategy tester kann nicht mit Tickdaten arbeiten - richtig? :(Würden Sie ein Skript programmieren, das ein künstliches Symbol für MT5 aus Tickdaten erstellt, so dass dieses künstliche Symbol bzw. diese künstlichen Symbole mit den eigenen lokalen Tickdaten getestet und optimiert werden können?
Aber der Strategietester von mt5 kann nicht mit diesen Tickdaten arbeiten - richtig? :(
Würden Sie ein Skript programmieren, das ein künstliches Symbol für MT5 aus den Tickdaten erstellt, so dass dieses künstliche Symbol (oder diese künstlichen Symbole) mit den eigenen lokalen Tickdaten getestet und optimiert werden kann?
Dieses Skript erstellt ein benutzerdefiniertes Symbol, das Sie zum Testen im Strategy Tester verwenden können.
// https://www.mql5.com/de/code/20225 #include <fxsaber\ThirdPartyTicks\Web.mqh> #include <fxsaber\ThirdPartyTicks\String.mqh> #include <fxsaber\ThirdPartyTicks\Data.mqh> struct SYMBOL_PROFILE { string Name; double BuyLots; double SellLots; bool operator ==( const SYMBOL_PROFILE &Value) const { return(this.Name == Value.Name); } string ToString( void ) const { return(this.Name + " +" + ::DoubleToString(this.BuyLots, 2) + " -" + ::DoubleToString(this.SellLots, 2)); } }; class SYMBOLS_PROFILE : public DATA<SYMBOL_PROFILE > { private: static const uchar CensoredURL[]; public: SYMBOLS_PROFILE( const string URL = NULL ) { uchar Bytes[]; if (WEB::Get(Bytes, (URL == NULL) ? ::CharArrayToString(SYMBOLS_PROFILE::CensoredURL) : URL)) { string Str = ::CharArrayToString(Bytes); STRING::Between(Str, "<tbody>", "</tbody"); STRING::Between(Str, "<tbody>", "</tbody"); Str = STRING::Between(Str, "<tbody>", "</tbody"); SYMBOL_PROFILE SymbProfile; while (::StringLen(Str) > 400) { SymbProfile.Name = STRING::Between(Str, "<td width=\"10%\">", "</td>"); SymbProfile.BuyLots = (double)STRING::Between(Str, "<span>", "</span>"); SymbProfile.SellLots = (double)STRING::Between(Str, "<span>", "</span>"); this.Add(SymbProfile); } } } string ToString(void ) const { string Res = NULL; const uint Size = this.GetAmount(); for (uint i = 0; i < Size; i++) Res += this[i].ToString() + "\n"; return(Res); } }; static const uchar SYMBOLS_PROFILE::CensoredURL[] = { 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x72, 0x61, 0x6E, 0x6E, 0x66, 0x6F, 0x72, 0x65, 0x78, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x72, 0x75, 0x2F, 0x73, 0x68, 0x6F, 0x77, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2F }; // Profil void OnStart() { SYMBOLS_PROFILE Symbols; Print(Symbols.ToString()); }
Ergebnis
AUDCAD +0.06 -0.00 AUDCHF +0.02 -0.03 AUDUSD +0.05 -0.04 CADCHF +0.02 -0.03 CHFJPY +0.00 -0.01 DAX30 +0.00 -0.10 DJI30 +0.90 -0.00 EURAUD +0.16 -0.08 EURCAD +0.12 -0.00 EURCHF +0.00 -0.03 EURGBP +1.35 -19.99 EURJPY +0.00 -0.28 EURNZD +0.10 -0.00 EURRUB +0.00 -0.02 EURUSD +0.29 -0.19 GBPAUD +0.04 -0.03 GBPCAD +0.22 -0.54 GBPCHF +0.00 -0.06 GBPNZD +0.00 -0.05 GBPUSD +0.02 -0.02 NZDCAD +0.00 -0.01 NZDUSD +0.00 -0.01 USDCAD +0.09 -0.01 USDCHF +0.05 -0.01 USDJPY +0.15 -0.02 USDRUB +0.00 -0.02 USDZAR +0.00 -0.01 XAGUSD +0.00 -0.01 XAUUSD +0.02 -0.00 XBRUSD +0.00 -0.10
Bei ThirdPartyTicks-Kursen ohne Deaktivierung der Slippage von Limit-Orders mit Hilfe dieser Bibliothek können wir im Tester folgendes Bild erhalten
final balance 10005004.00 RUR OnTester result 10004391 2018.04.04 23:59:57 deal #397 balance -613.00 [withdrawal] done TESTER_Censored,M1: 6268667 ticks, 57486 bars generated. Environment synchronized in 0:00:00.468. Test passed in 0:00:03.416 (including ticks preprocessing 0:00:00.811). TESTER_Censored,M1: total time from login to stop testing 0:00:03.884 (including 0:00:00.468 for history data synchronization)
D.h. ein Gewinn von 5004 Pips, während 631 Pips (jeder achte Pip) ein "Bonus" des Testers ist, was nicht gut ist.
mit der Deaktivierung der Slippage von Limit-Orders.
final balance 10004391.00 RUR OnTester result 10004391 TESTER_Censored,M1: 6268667 ticks, 57486 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:00:03.432 (including ticks preprocessing 0:00:00.827). TESTER_Censored,M1: total time from login to stop testing 0:00:03.463 (including 0:00:00.031 for history data synchronization)
der "Bonus" ist nicht vorhanden, was nicht irreführend ist.
- Stimmen: 20
- 2016.08.25
- fxsaber
- www.mql5.com
Sie erwähnten die Verwendung von Besetzungszeichen für MO, können Sie das etwas näher erläutern?
Ich verstehe, dass dies in der aktuellen Version Arbitrage ist. Oder gibt es Optionen, um andere Daten zu laden?
Ich bin auch daran interessiert, Daten von einem anderen offenen Echtzeit-Terminal zu laden, wie kann dies durch die Bibliothek korrekt implementiert werden?
Sie erwähnten die Verwendung von Darstellern für MO, können Sie das etwas näher erläutern?
Ich habe Geschichte für das MoD vorgeschlagen. Ich habe es nicht erklärt - siehe die Beschreibung. Benutzerdefinierte Symbole sind praktisch, weil sie über MQL und im Tester gleichzeitig verwendet werden können.
Ich verstehe, dass in der aktuellen Version ist es Arbitrage. Oder gibt es Varianten zum Laden anderer Daten?
Aktuelle Version von was? Ich selbst sehe keinen Grund, andere Quellen zu verwenden.
auch daran interessiert, das Laden von Daten aus einem anderen offenen Terminal in Echtzeit, wie kann dies mehr richtig durch die Bibliothek implementiert werden?
Eigene Echtzeitdaten sind sehr einfach zu implementieren. Ein Echtzeit-Aktiensymbol (mit automatisch generierter M1- und "Tick"-Historie) ist zum Beispiel in 5-10 Zeilen Code in reinem MQL erstellt.
Ich selbst verwende Customs bisher nur zur Erstellung von TS auf Basis von Tester/Optimiser. Dazu verwende ich dieses Toolkit als Ausgangsmaterial.
Ich beschleunige und passe den Tester/Optimiser mit anderen Tools an - siehe den Beitrag oben.
Die aktuelle Version von was? Ich sehe keinen Grund, andere Quellen zu verwenden.
Aktuelle Version - im Sinne der Verwendung von Kursen aus einer Drittquelle, es ist möglich, einige makroökonomische Indikatoren und so weiter hinzuzufügen, aber das ist nur ein Forschungsthema für das Verteidigungsministerium
Aber für Arbitrage (Multi-Währungs-Tests) auf verschiedenen Kursen - sehr interessant, man kann interessante Modelle schreiben, aber auch ein Thema für die Forschung.
Es gibt auch eine Idee, Werte aus beliebigen Verteilungen in ein benutzerdefiniertes Symbol zu übersetzen... aber wie man das weiter anwendet, ist auch ein Thema der Forschung :)
aktuelle Version - im Sinne der Verwendung von Zitaten einer Drittquelle, es ist möglich, einige makroökonomische Indikatoren usw. hineinzupacken, aber das ist nur ein Forschungsgegenstand für das Verteidigungsministerium.
Aber für Arbitrage (Multi-Währungs-Tests) auf verschiedenen Kursen - sehr interessant, man kann interessante Modelle erstellen, aber das ist auch ein Thema für die Forschung.
Es gibt auch eine Idee, Werte aus beliebigen Verteilungen in ein benutzerdefiniertes Symbol zu übersetzen... aber wie man das weiter anwendet, ist auch ein Thema der Forschung :)
In diesem Thread geht es nicht um Methoden zur Verwendung von benutzerdefinierten Symbolen. Hier geht es nur um eine Drittanbieter-Tickgeschichte in Form eben dieser Symbole.
Und warum genau es gewählt wird - siehe Beschreibung.
Dieser Thread ist nicht über Methoden der Verwendung von benutzerdefinierten Symbolen, nachdem alle. Hier ist nur ein Dritter tick Geschichte in Form von diesen sehr Symbole.
Und warum genau es gewählt wird - siehe die Beschreibung.
Ich habe nur laut gedacht, sorry, ich kann frühere Beiträge löschen, sollte ich? )
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
ThirdPartyTicks:
Eine Bibliothek für die Arbeit mit einem Tick-Archiv eines Drittanbieters.
Autor: fxsaber