Ich habe diese Fehlerbehandlung in meiner Klasse durchgeführt
#property strict#ifdef __MQL5__#include <MQL4_To_MQL5.mqh> // https://www.mql5.com/de/code/16006#endif // __MQL5__#define GetLastError GetOrderError
// Muss nicht nur in MT5, sondern auch in MT4 vorhanden sein.// https://www.mql5.com/ru/forum/93352/page19#comment_6730221#include <MT4Orders.mqh>
#define BUY 0#define SELL 1#define ALL -1#define LAST 0#define NOMODY -1bool LogInfo=true;//Drucken ins Fehlerprotokoll
/*
Hier sind die Funktionen der Klasse für die Arbeit mit Aufträgen
*/
Am Ende der Klasse habe ich eine Funktion
//+-------------------------------------------------------------------------------------------------------------------+//|| Umwandlung von Fehlern von MT5 nach MT4//+-------------------------------------------------------------------------------------------------------------------+int GetOrderError()
{
//int error=MT4ORDERS::LastTradeResult.retcode_external; // Gibt eigene Codes zurückint error=(int)MT4ORDERS::LastTradeResult.retcode; // Gibt Fehlercodes zurück, nachdem die Bestellung an den Server gesendet wurdeif(LogInfo==true)Print("error MT5=",error);
switch(error)
{
case10016:
error=130;//Falsche Füßebreak;
case10018:
error=132;//Markt geschlossenbreak;
case10020:
error=135;//Preis hat sich geändertbreak;
case136:
error=136;//Keine Preise - kein Code im MT5break;
case10004:
error=138;//Neue Preisebreak;
case145:
error=145;//Modifikation ist verboten, weil die Order zu nahe am Markt ist - kein Code in MT5break;
case146:
error=146;//Handels-Subsystem beschäftigt - kein Code in MT5break;
default:
error=error;//Unbeschriebener Fehler
}
return (error);
}
#undef GetLastError
Ошибки времени выполнения - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Keine schlechte Option. Denken Sie nur daran, dass andere Fehlercodes nicht verfügbar sein werden.
Ich denke, diese Änderung gilt nur für den Code um meine Klasse herum, und danach schalte ich die #undef GetLastError-Ersetzung aus, und wenn ich es richtig verstehe, wird der Compiler GetLastError nicht mehr ersetzen, oder liege ich falsch?
Es scheint, dass diese Änderung nur für den Code rund um meine Klasse gültig ist, und nachdem ich die Substitution #undef GetLastError ausschalten und, wenn ich richtig verstehe, wird der Compiler nicht GetLastError weiter ersetzen, oder bin ich falsch?
Sie haben recht. Ich habe nicht sofort verstanden, was du gemeint hast.
Viele Male bedauert, dass ich es gepostet, da es nichts mit MT4Orders zu tun hat. Es war nur eine Ergänzung zu den Beispielen. Ich kann mich nicht mehr an den Sinn erinnern. Ich möchte nicht näher darauf eingehen.
Ich habe mich daran erinnert, dass ich hier eine ausführlichere Lösung für die "Konvertierung" gemacht habe.
Kims Funktionen unter MT4 sind recht beliebt, daher habe ich alle Quellen von seiner Seite heruntergeladen und einen einfachen "Konverter" für sie unter MT5 geschrieben.
Ich selbst verwende MT4Style nur für die Orderfunktionen. Andere Standard-MT4-Funktionen konvertiere ich für meine Arbeit absolut nicht, und ich sehe diese Option als Krücke. Ich empfehle, Margin-Funktionen auf native Funktionen zu schreiben und nicht zu versuchen, sie zu konvertieren. Ich habe mir meinen Kurs über die Arbeit mit Margin angeschaut - eine anständig große mqh-Datei. Und das ist nur für reguläre Forex.
Sie verwenden eine uralte, hastig zusammengestellte Lösung.
Ich habe es oft bereut, sie zu posten, da sie nichts mit MT4Orders zu tun hat. Es war nur eine Ergänzung zu den Beispielen. Ich erinnere mich nicht mehr an den Sinn der Lösung. Ich habe keine Lust, mich damit zu befassen.
Ich habe mich daran erinnert, dass ich hier eine ausführlichere Lösung der "Umwandlung" gemacht habe.
Ich selbst verwende MT4Style nur bei Orderfunktionen. Andere MT4-Standardfunktionen konvertiere ich für meine Arbeit absolut nicht und sehe diese Möglichkeit als Krücke. Ich empfehle, Margin-Funktionen auf native Funktionen zu schreiben und nicht zu versuchen, sie zu konvertieren. Ich habe mir meinen Kurs über die Arbeit mit Margin angeschaut - eine anständig große mqh-Datei. Und das ist nur für reguläre Forex.
Ich hatte nur die Aufgabe, kompilierbaren Code für MT4 und MT5 auf den Funktionen der EA-Logik zu machen, und ich konvertierte das Zeug, das mit der Umgebung und der Arbeit mit Aufträgen zusammenhängt, mit Hilfe der oben erwähnten inkludniks, oder nahm separate Funktionen heraus und überarbeitete sie für jede Plattform. Das Projekt ist sehr umfangreich geworden, und Ihre Lösung hat mir sehr geholfen, vielen Dank für Ihre Arbeit.
Ich hatte noch einen weiteren Fehler - die minimale Losgröße wurde falsch bestimmt, also habe ich hier Flags hinzugefügt. Früher habe ich das Traversal ohne Berücksichtigung Ihres Codes gemacht (MQL4_To_MQL5.mqh ist nicht Ihr Code?) - es wurde kompiliert, funktionierte aber nicht richtig.
#define MODE_BID 9#define MODE_ASK 10#define MODE_DIGITS 12#define MODE_SPREAD13#define MODE_STOPLEVEL 14#define MODE_LOTSIZE 15#define MODE_POINT 11#define MODE_TICKVALUE 16#define MODE_TICKSIZE 17#define MODE_MAXLOT 18#define MODE_MINLOT 19#define MODE_LOTSTEP 20//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+double MarketInfo(conststring Symb,constint Type)
{
switch(Type)
{
case MODE_BID:
return(::SymbolInfoDouble(Symb, ::SYMBOL_BID));
case MODE_ASK:
return(::SymbolInfoDouble(Symb, ::SYMBOL_ASK));
case MODE_DIGITS:
return((double)::SymbolInfoInteger(Symb, ::SYMBOL_DIGITS));
caseMODE_SPREAD:
return((double)::SymbolInfoInteger(Symb, ::SYMBOL_SPREAD));
case MODE_STOPLEVEL:
return((double)::SymbolInfoInteger(Symb, ::SYMBOL_TRADE_STOPS_LEVEL));
case MODE_LOTSIZE:
return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_CONTRACT_SIZE));
case MODE_POINT:
return(::SymbolInfoDouble(Symb, ::SYMBOL_POINT));
case MODE_TICKVALUE:
return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_TICK_SIZE));
case MODE_TICKSIZE:
return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_TICK_VALUE));
case MODE_MAXLOT:
return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_MAX));
case MODE_MINLOT:
return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_MIN));
case MODE_LOTSTEP:
return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_STEP));
}
return(-1);
}
Ich habe diese Fehlerbehandlung in meiner Klasse durchgeführt
Am Ende der Klasse habe ich eine Funktion
Die Fehlerbehandlung in meiner Klasse funktioniert folgendermaßen
Am Ende der Klasse habe ich eine Funktion
Keine schlechte Variante. Denken Sie nur daran, dass andere Fehlercodes nicht verfügbar sein werden.
Keine schlechte Option. Denken Sie nur daran, dass andere Fehlercodes nicht verfügbar sein werden.
Ich denke, diese Änderung gilt nur für den Code um meine Klasse herum, und danach schalte ich die #undef GetLastError-Ersetzung aus, und wenn ich es richtig verstehe, wird der Compiler GetLastError nicht mehr ersetzen, oder liege ich falsch?
Es scheint, dass diese Änderung nur für den Code rund um meine Klasse gültig ist, und nachdem ich die Substitution #undef GetLastError ausschalten und, wenn ich richtig verstehe, wird der Compiler nicht GetLastError weiter ersetzen, oder bin ich falsch?
Sie haben recht. Ich habe nicht sofort verstanden, was du gemeint hast.
Sie haben Recht. Ich habe nicht sofort erkannt, was gemeint war.
Danke dafür! Jetzt muss ich es nur noch testen :)
Können Sie helfen, die Funktion zu entschlüsseln, weil alle diese Doppelpunkte und Fragezeichen - ich verstehe nicht.
Es gibt einen Wert kleiner als Null, mit Geld 9k Hebelwirkung 1k100 viel 0,01 - was ist falsch?
Druckt die Informationen in das Protokoll
Im Prüfgerät:
Im wirklichen Leben:
Es scheint, dass die Berechnung nicht geschieht OrderCalcMargin() aus unbekannten Gründen - irgendwelche Ideen?
Fehler 4002 bedeutet:Fehlerhafter Parameter im internen Aufruf der Client-Terminal-Funktion
Aber was es bedeutet, ist nicht klar....
Können Sie mir helfen, die Funktion zu entschlüsseln, denn all diese Doppelpunkte und Fragezeichen verstehe ich nicht.
Sie verwenden eine uralte, eilig zusammengestellte Lösung.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.
Bibliotheken: MT4Orders
Aleksey Vyazmikin, 2022.07.21 11:58 AM
Made so mit Fehlern in meiner Klasse arbeiten
Ich habe mich daran erinnert, dass ich hier eine ausführlichere Lösung für die "Konvertierung" gemacht habe.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: MT4Orders
fxsaber, 2019.01.13 17:23 PM.
Kims Funktionen unter MT4 sind recht beliebt, daher habe ich alle Quellen von seiner Seite heruntergeladen und einen einfachen "Konverter" für sie unter MT5 geschrieben.Ich selbst verwende MT4Style nur für die Orderfunktionen. Andere Standard-MT4-Funktionen konvertiere ich für meine Arbeit absolut nicht, und ich sehe diese Option als Krücke. Ich empfehle, Margin-Funktionen auf native Funktionen zu schreiben und nicht zu versuchen, sie zu konvertieren. Ich habe mir meinen Kurs über die Arbeit mit Margin angeschaut - eine anständig große mqh-Datei. Und das ist nur für reguläre Forex.
Sie verwenden eine uralte, hastig zusammengestellte Lösung.
Ich habe mich daran erinnert, dass ich hier eine ausführlichere Lösung der "Umwandlung" gemacht habe.
Ich selbst verwende MT4Style nur bei Orderfunktionen. Andere MT4-Standardfunktionen konvertiere ich für meine Arbeit absolut nicht und sehe diese Möglichkeit als Krücke. Ich empfehle, Margin-Funktionen auf native Funktionen zu schreiben und nicht zu versuchen, sie zu konvertieren. Ich habe mir meinen Kurs über die Arbeit mit Margin angeschaut - eine anständig große mqh-Datei. Und das ist nur für reguläre Forex.
Ich hatte nur die Aufgabe, kompilierbaren Code für MT4 und MT5 auf den Funktionen der EA-Logik zu machen, und ich konvertierte das Zeug, das mit der Umgebung und der Arbeit mit Aufträgen zusammenhängt, mit Hilfe der oben erwähnten inkludniks, oder nahm separate Funktionen heraus und überarbeitete sie für jede Plattform. Das Projekt ist sehr umfangreich geworden, und Ihre Lösung hat mir sehr geholfen, vielen Dank für Ihre Arbeit.
Ich hatte noch einen weiteren Fehler - die minimale Losgröße wurde falsch bestimmt, also habe ich hier Flags hinzugefügt. Früher habe ich das Traversal ohne Berücksichtigung Ihres Codes gemacht (MQL4_To_MQL5.mqh ist nicht Ihr Code?) - es wurde kompiliert, funktionierte aber nicht richtig.
oder ist MQL4_To_MQL5.mqh nicht Ihr Code?
Es ist meine, aber es ist ziemlich alt. Es ist besser, in Kim's mqh schauen, gibt es eine ausgefeiltere Lösung für MarketInfo.