Expert Advisor
// MQL4&5-code #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #ifdef __MQL5__ #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID)) #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK)) #endif // __MQL5__ // Idea - https://www.mql5.com/ru/code/7464 #property strict input int Shift = 3; input int Limit = 18; input double Lots = 0.1; int PriceToInteger( const double Price ) { return((int)(Price / _Point + 0.1)); } void OnTick() { static int PrevBid = PriceToInteger(Bid); static int PrevAsk = PriceToInteger(Ask); const int IntBid = PriceToInteger(Bid); const int IntAsk = PriceToInteger(Ask); const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps if (TradeTime && (IntAsk - IntBid < Limit)) { if ((IntBid - PrevBid >= Shift)) OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0); if (PrevAsk - IntAsk >= Shift) OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0); } PrevBid = IntBid; PrevAsk = IntAsk; for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) || ((OrderType() == OP_BUY) && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) || ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); }
Die Ergebnisse
MT4-Bericht
Symbol | EURUSD (Euro gegenüber US Dollar) | ||||
Zeitraum | 1 Minute (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16) | ||||
Modell | Alle Ticks (genaueste Methode auf der Grundlage aller kleinsten verfügbaren Zeitrahmen) | ||||
Parameter | Shift=3; Limit=18; Lots=0.1; | ||||
Bars in der Geschichte | 7292 | Modellierte Zecken | 1865515 | Qualität der Modellierung | 99.00% |
Diagrammabweichungsfehler | 0 | ||||
Ersteinlage | 100000.00 | Verbreitung | Variabel | ||
Reingewinn | -10863.90 | Gesamtgewinn | 2528.70 | Totalverlust | -13392.60 |
Rentabilität | 0.19 | Erwartete Auszahlung | -0.49 | ||
Absolute Absenkung | 10864.70 | Maximale Absenkung | 10864.70 (10.86%) | Relative Absenkung | 10.86% (10864.70) |
Handel insgesamt | 21954 | Short-Positionen (% Gewinn) | 12016 (68.60%) | Long-Positionen (% Gewinn) | 9938 (67.03%) |
Gewinnbringende Geschäfte (% von allen) | 14904 (67.89%) | Verlustgeschäfte (% von allen) | 7050 (32.11%) | ||
Größte | ertragreicher Handel | 3.00 | Verlustgeschäft | -4.40 | |
Durchschnitt | profitables Geschäft | 0.17 | Verlustgeschäft | -1.90 | |
Maximale Anzahl | kontinuierliche Gewinne (Gewinn) | 155 (46.60) | Kontinuierliche Verluste (Verlust) | 115 (-210.10) | |
Max. | kontinuierliche Gewinne (Anzahl der Siege) | 46.60 (155) | Dauerverlust (Anzahl der Verluste) | -210.10 (115) | |
Durchschnitt | laufende Gewinne | 5 | Dauerschaden | 2 |
MT5 Bericht
Strategie-Tester-Bericht | ||||||||||||
Alpari-MT5 (Build 1596) | ||||||||||||
Einstellungen | ||||||||||||
Sachverständiger Berater: | Glücklich | |||||||||||
Symbol: | EURUSD | |||||||||||
Zeitraum: | M1 (2017.04.10 - 2017.04.16) | |||||||||||
Parameter: | Verschiebung=3 | |||||||||||
Grenze=18 | ||||||||||||
Lose=0,1 | ||||||||||||
Makler: | Alpari International GmbH | |||||||||||
Währung: | USD | |||||||||||
Erste Einzahlung: | 100 000.00 | |||||||||||
Hebelwirkung: | 1:100 | |||||||||||
Backtest | ||||||||||||
Qualität der Geschichte: | k.A. | |||||||||||
Bars: | 7192 | Tiki: | 1865415 | Zeichen: | 1 | |||||||
Reingewinn: | -10 863.90 | Absolute Inanspruchnahme der Bilanz: | 10 863.90 | Absolute Inanspruchnahme der Mittel: | 10 864.70 | |||||||
Gesamtgewinn: | 2 528.70 | Maximale Inanspruchnahme des Saldos: | 10 863.90 (10.86%) | Maximale Inanspruchnahme der Mittel: | 10 864.70 (10.86%) | |||||||
Totalverlust: | -13 392.60 | Relative Inanspruchnahme der Bilanz: | 10.86% (10 863.90) | Relative Inanspruchnahme der Mittel: | 10.86% (10 864.70) | |||||||
Rentabilität: | 0.19 | Erwartete Auszahlung: | -0.49 | Höhe der Marge: | 863.58% | |||||||
Erholungsfaktor: | -1.00 | Sharpe Ratio: | -0.50 | Z-Score: | -52.22 (99.74%) | |||||||
AHPR: | 1.0000 (-0.00%) | LR-Korrelation: | -1.00 | OnTester Ergebnis: | 0 | |||||||
GHPR: | 1.0000 (-0.00%) | LR Standardfehler: | 149.82 | |||||||||
Gesamter Handel: | 21954 | Short Trades (% der Gewinner): | 12016 (68.60%) | Long Trades (% Gewinne): | 9938 (67.03%) | |||||||
Gesamter Handel: | 43908 | Gewinnbringende Abschlüsse (% aller Abschlüsse): | 14904 (67.89%) | Verlustgeschäfte (% aller Geschäfte) | 7050 (32.11%) | |||||||
Größter profitabler Handel | 3.00 | Größter Verlusthandel | -4.40 | |||||||||
Durchschnittlich profitabler Handel: | 0.17 | Durchschnittlicher Verlusthandel: | -1.90 | |||||||||
Maximale Anzahl von aufeinanderfolgenden Gewinnen (Gewinn): | 155 (46.60) | Maximale Anzahl von kontinuierlichen Verlusten (Verlust): | 115 (-210.10) | |||||||||
Max. kontinuierliche Gewinne (Anzahl der Gewinne): | 46.60 (155) | Max. Dauerverlust (Anzahl der Verluste): | -210.10 (115) | |||||||||
Durchschnittliche Dauergewinne: | 5 | Durchschnittliche kontinuierliche Verluste: | 2 |
Das Ergebnis ist eine Übereinstimmung!
Leistung
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)
MT5-Protokoll
2017.05.08 02:04:53.278 Core 1 EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).
MT4-Tester hat es geschafft, 3 Mal schneller zu sein als MT5-Tester. Wenn Zweifel bestehen, dass das MT5-Logging durch die Verwendung einer Bibliothek eines Drittanbieters verursacht wird, kann derjenige, der möchte, die einfache MT4-Logik dieses Expert Advisors in MQL5 auf seine eigene Weise neu schreiben und die Hypothese überprüfen.
HZ arbeitete der MT5-Tester viel langsamer, bis ich alle Basisordner von Hand bereinigte. Die Ergebnisse werden unter Berücksichtigung dieser Tatsache angegeben.
Auf dem Alpari-MT5-Demo-Server in der neuen Version (die in einer Woche veröffentlicht werden soll) mit schnellem Zugriff auf die Geschäftshistorie ist mir das gelungen:
EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.
MT5 hat einen System-Overhead für die Übertragung von Daten und der Aufgabe selbst an einen externen Agentenprozess, der bei kleinen (sekundenlangen) Aufgaben einen großen Fehler im Vergleich einführt.
Und die Komplexität und Qualität des Testers in MT5 ist viel höher: synchrone Modellierung vieler Instrumente mit Millisekunden-Genauigkeit, echte Slips/Verzögerungen beim Scrollen von Weltveränderungen und eine Menge weiterer kleinerer Funktionen. Es ist nicht so, dass es eine for-Schleife gibt.
Um Größenordnungen langsamer - sind Sie nicht mit der Initialisierung/Synchronisierung und dem Hochladen aller Daten verwirrt? Alles wird in Protokollen festgehalten. Die Dateien auf dem Datenträger sollten auf keinen Fall berührt werden.
Ich empfehle, das Verzeichnis %userdata%\MetaQuotes (z. B. C:\Users\%Benutzername%\AppData\Roaming\MetaQuotes) in den Antivirenpass zu legen. Hier befinden sich die Daten, und durch das Hinzufügen des Virenschutzes zum Pass wird die Zugriffsgeschwindigkeit auf die Daten des Terminals und des Testers erheblich verbessert.
Andernfalls geraten sie in helle Aufregung, wenn sie sehen, dass metatester[64].exe läuft, einen Netzwerkport öffnet und eine Menge großer Dateien, die von Terminal und Tester geschrieben wurden, enthält. Bei manchen Händlern fällt der Tester sogar aus, weil das Antivirenprogramm keine Zeit hat, die Datei metatester[64].exe auch nur in ein paar Sekunden zu überprüfen, und das Terminal nicht auf sie zugreifen kann.
Die Komplexität und Qualität des Testers im MT5 ist um eine Größenordnung höher: synchrone Modellierung mehrerer Instrumente mit Millisekundengenauigkeit, ehrliche Slips/Verzögerungen beim Scrollen durch Weltveränderungen und eine Reihe kleinerer Funktionen.
Das ist auch im MT4+TDS-Paket enthalten. Plus einige weitere Funktionen, die dem MT5 fehlen... Aber natürlich gibt es keine Mehrwährungsfähigkeit.
Um Größenordnungen langsamer.
Zuerst dachte ich, dass TDS MT5 absichtlich verlangsamt, also habe ich seinen Speicher bereinigt. Ich habe auch die Basis-Ordner gelöscht (mir ging der Speicherplatz aus). Danach war MT5 bei einem einzigen Durchlauf um zwei Größenordnungen schneller (Neustarts halfen vorher nicht). Die Hypothese über TDS-Blöcke konnte nicht bestätigt werden, obwohl ich es versucht habe. Ich habe keine Antivirenprogramme auf meinem Computer installiert.
Der Alpari-MT5-Server ist echt.
ZZY führte MT4-optimizer bei voller Ausführung aus - 14 Minuten. MT5 (nur noch ein Agent) - es wird wohl noch viele Stunden dauern. Ich werde die Gesamtzahl am Morgen/Nachmittag bekannt geben.
Woher stammen die Zettel?
Sie haben etwas ganz anderes im Sinn. Spielen Sie mit dem Feld Delay im MT5-Tester und Sie werden sehen, dass es etwas ganz anderes ist. Selbst das übliche Sleep(2500) im MQL5-Code führt bei der Ausführung im Tester zu einer Verzögerung im Code, wenn die ganze Welt weiter simuliert. Das Feld für die Ausführungsverzögerung zeigt an, wie der Handel ausgeführt wird, wenn Sie dort Ihren 100-ms-Ping zum Server eingeben.
Es kann keine Verzögerung um eine Größenordnung geben. Und warum sollte es Add-ons für MT5 geben, wenn es auch ohne diese funktioniert?
Zum Thema Überschreitung: Es gibt keine Einstellungen und keine Grenzwerte.Was das Fehlen eines Antivirenprogramms betrifft, so verfügen alle Versionen seit Version 7 seit langem über einen internen und unauffälligen Windows Defender, der alle Dateien gut überprüft.
Manchmal kommt es sogar auf SSD-Festplatten zu spürbaren Verzögerungen bei Dateioperationen.
Was das Fehlen eines Virenschutzes betrifft, so verfügen alle Versionen ab 7 seit langem über einen hauseigenen und unauffälligen Windows Defender, der alle Dateien scannt.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
fxsaber, 2017.05.07 21:55
Alpari-MT5 Handelsserver
Warum gibt es doppelte Ticks (Geld- und Briefkurs sind gleich) in der FOREX-Tick-Historie?
Der Tester macht ein Rennen mit EAs auf Duplikaten und es gibt die Hälfte davon. Ist es notwendig, die entsprechende Leistung um die Hälfte zu reduzieren?
Sie haben immer noch nicht verstanden, von welchen Zetteln ich spreche. In MT4 funktioniert das prinzipiell nicht.
Nicht in Ticks, sondern im Prozess des mcl5-Programms, wenn es aufhört und die Ticks weiterlaufen und die Welt sich dreht. Schreiben Sie Sleep(3000) und das Programm wird 3 Sekunden lang warten. Während dieser Zeit werden die Ticks ticken, der Markt wird simuliert.
Wenn Sie das Feld Ausführungsverzögerung im Tester auf 200ms setzen, wird eine Nettolatenz von 200 bei der Ausführung von Geschäften simuliert, was entweder zu Marktslippage oder Requotes führt.
Dies ist eine ganz andere Ebene der Modellierung von Marktprozessen, und zwar in einem System mit mehreren Währungen. Und, was noch wichtiger ist, in einem entfremdeten Prozess. Beispielsweise erhält ein 10.000-km-Agent bei der Ausführung einer Aufgabe plötzlich eine dynamische Anfrage für den Zugriff auf fehlende Symbole aus dem Code und ist in der Lage, diese Daten vom Master anzufordern, sie in die Marktwelt einzubetten und weiter zu spinnen.
Sie haben immer noch nicht verstanden, von welchen Zetteln ich spreche. In MT4 funktioniert das prinzipiell nicht.
Nicht in Ticks, sondern im Prozess des mcl5-Programms, wenn es aufhört und die Ticks weiterlaufen und die Welt sich dreht. Schreiben Sie Sleep(3000) und das Programm wird 3 Sekunden lang warten und in dieser Zeit werden die Ticks ticken, der Markt wird simuliert werden.
In MT4 funktioniert das nicht mehr.
Wenn Sie das Feld Ausführungsverzögerung im Tester auf 200 ms einstellen, wird bei der Ausführung von Geschäften eine Nettolatenz von 200 simuliert, was entweder zu Marktslippage oder zu Requotes führen wird.
Dies funktioniert jetzt in MT4.
Das ist eine ganz andere Ebene der Modellierung von Marktprozessen, und zwar in einem System mit mehreren Währungen. Und, was noch wichtiger ist, in einem entfremdeten Prozess. Beispielsweise erhält ein 10.000-km-Agent bei der Ausführung einer Aufgabe plötzlich eine dynamische Anfrage für den Zugriff auf fehlende Symbole aus dem Code und ist in der Lage, diese Daten vom Master anzufordern, sie in die Marktwelt einzubetten und weiter zu spinnen.
- 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.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Diskussion über "Vorgefertigte EAs von MQL5 Wizard funktionieren in MetaTrader 4"
fxsaber, 2017.03.09 13:02
Ich schlage vor, Tick Data Suite zu testen (Kompatibel: MT4 build 940 - 1052), um zu vergleichen.
Wählen Sie im MT5-Tester den Modus "nach echten Ticks". Speichern Sie sie und geben Sie sie über TDS an den MT4-Tester weiter.
Dann werden die Kurse in beiden Testern zu 100 % übereinstimmen, so dass sie nicht nur in Bezug auf den Handel, sondern auch auf die Geschwindigkeit verglichen werden können.
Es wäre dann möglich, die Umwandlung/Erstellung von EAs in beide Richtungen zu vergleichen.
MT4 build 1072, MT5 build 1596 Handelsserver Alpari-MT5.
MT4-Tester-Einstellungen auf dem Bildschirmfoto
Die Währung in beiden Testern ist USD. Dies ermöglicht in der gleichen MT5-Tester für EURUSD nicht zu einem anderen Tick der Umwandlung Symbol ziehen.
Jetzt führen wir den folgenden plattformübergreifenden Expert Advisor in beiden Testern aus
MT4-Tester-Protokoll
MT5-Tester-Protokoll
Wir bestätigen, dass die von den einzelnen Testern erhaltenen Dateien identisch sind - die Häkchen der Tester stimmen überein.
Zu diesem Zeitpunkt ist die Vorbereitung der beiden Prüfer auf den neuen Dienst abgeschlossen.