|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Codeschnipsel Codeschnipsel für MQL5. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
MyAlert, bequeme und einfache Fehlerbehandlung
Fehler abzufangen ist wichtig, Informationen über den Fehler auszugeben hilfreich.
Das wird aber oft als mühsam empfunden und deshalb oft weggelassen. Mir geht es jedenfalls so. Weiters sind mehrere Programmzeilen notwendig, der Code wird auch nicht kompakter dadurch, der Fehler sollte ja auch noch zurückgesetzt werden. Also habe ich MyAlert.mqh implementiert. Der nächste Codeschnipsel wird diese Funktion verwenden, gleich als Anwendungsbeispiel. Ist nicht getestet, sollte aber auch unter MQL4 laufen. Code:
//+------------------------------------------------------------------+ //| MyAlert.mqh | //| Copyright © 2016 Ing. Otto Pauser | //+------------------------------------------------------------------+ //| Bequeme und sichere Fehlerbehandlung. 3 überladene Funktionen | //| 1. MyAlert(max 6 Parameter Typ String) | //| 2. MyAlert(int AnyRetval, max 6 Parameter Typ String) | //| 3. MyAlert(ENUM_INIT_RETCODE Retval, max 6 Parameter Typ String) | //| | //| Das Macro StdErrMsg kann nur von der aufrufenden Funktion | //| verwendet werden, da ja hier sinnlos und vom Compiler abgelehnt | //+------------------------------------------------------------------+ #include <ErrorDescription.mqh> // falls nicht vorhanden, hier ist der downloadlink: https://www.mql5.com/en/code/79 // ist nicht ganz aktuell, aber der Service-Desk ist informiert und wird das demnächst aktualisieren static bool AlertPrintOnly = false; // Steuerung des Verhaltens bei Fehler. Nur Print, oder Print + Alert #define StdErrMsg ", Function: "+__FUNCTION__+"(), Line:"+(string)__LINE__ // nur in der aufrufenden Funktion verwendbar // hier wird der ganze Text zusammengebastelt string StringMake(string str1="", string str2="", string str3="", string str4="", string str5="", string str6="") { string ErrMsg = str1; if(str2=="") return(ErrMsg); else ErrMsg = ErrMsg+" "+str2; if(str3=="") return(ErrMsg); ErrMsg = ErrMsg+" "+str3; if(str4=="") return(ErrMsg); ErrMsg = ErrMsg+" "+str4; if(str5=="") return(ErrMsg); ErrMsg = ErrMsg+" "+str5; if(str6=="") return(ErrMsg); ErrMsg = ErrMsg+" "+str6; return(ErrMsg); } // in OnInit() gut plaatziert oder auch allgemeine Verwendung int MyAlert(string str1="", string str2="", string str3="", string str4="", string str5="", string str6="") { string ErrMsg="*ERROR* "+IntegerToString(GetLastError())+" - "+ErrorDescription(GetLastError())+" "; ErrMsg = ErrMsg + StringMake(str1, str2, str3, str4, str5, str6); Print(ErrMsg); // print the errormessage if(AlertPrintOnly) PlaySound("Alert"); else Alert(ErrMsg); // do the alert if requested ResetLastError(); // reset lasterror return(INIT_FAILED); } // ist diversn Einsatz vorgesehen der Rückgabe benütigt int MyAlert(int aRetVal, string str1="", string str2="", string str3="", string str4="", string str5="", string str6="") { MyAlert(str1, str2, str3, str4, str5, str6); return(aRetVal); } // ist für die OnInit() vorgesehen int MyAlert(ENUM_INIT_RETCODE aRetVal, string str1="", string str2="", string str3="", string str4="", string str5="", string str6="") { MyAlert(str1, str2, str3, str4, str5, str6); return(aRetVal); } PS: Falls jemand Verbesserungmöglichkeiten sieht, nur her damit. PPS: Wollte noch die Datei im nachhinein anhängen, geht aber nicht bei Änderung. Ich versuche es nochmals nach dem nächsten Post der schon draussen ist Geändert von Kronenchakra (30.12.16 um 22:00 Uhr) Grund: Anhang hinzugefügt |
|
|||
Ein PowerTool zum gleichschalten aller offenen Charts
Das ist gleich ein Beispiel für die Verwendun von MyAlert.mqh
Die Einstellungen eines Charts auf alle anderen offenen Charts anwenden. Verwendet die Funktionen ChartSaveTemplate() und ChartApplyTemplate(). Ist nicht wirklich auf meinem Mist gewachsen, aber ist wesentlich verbessert worden. Und mit ErrorCheck! Code:
//+------------------------------------------------------------------+ //| ApplyTemplate.mq5 | //| Copyright © 2017 Ing. Otto Pauser | //| https://www.opa-trader.at | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017 Ing. Otto Pauser" #property link "https://www.opa-trader.at" #property version "1.00" #include <MyAlert.mqh> string TmplName = "LastApplied"; // unter diesem Namen wird die aktuelle Einstellung gespeichert // wird immer kommentarlos überschrieben void OnStart() { ENUM_TIMEFRAMES initPeriod = _Period; // Werte des aktuellen Charts merken long initScale = ChartGetInteger(ChartID(),CHART_SCALE); long initChartID = ChartID(); long currChartID = ChartFirst(); // Schleifenvariable über alle Charts if(!ChartSaveTemplate(initChartID,TmplName)) // hier wird die aktuelle Einstellung in Datei geschrieben MyAlert(StdErrMsg); while(currChartID>=0) // hier laden wir das Template { if(currChartID!=initChartID) { if(!ChartApplyTemplate(currChartID, TmplName)) MyAlert(); } currChartID=ChartNext(currChartID); } currChartID = ChartFirst(); // reset auf ersten Chart while(currChartID>=0) // hier werden Periode und Scale eingestellt { if(currChartID!=initChartID) { if(ChartPeriod(currChartID)!=initPeriod) ChartSetSymbolPeriod(currChartID,ChartSymbol(currChartID),initPeriod); if(ChartGetInteger(currChartID,CHART_SCALE)!=initScale) ChartSetInteger(currChartID,CHART_SCALE, initScale); } currChartID=ChartNext(currChartID); } PlaySound("ok"); // machma a bisserl Lärm } |
Lesezeichen |
Stichworte |
alert, codeschnipsel, codeschnipsel mql5, fehlerbehandlung, programmierung, programmierung metatrader |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|