|
Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Warum funktioniert dieser Code im Debugger aber nicht als ex5
Hallo Spezialisten,
also eigentlich denke ich, daß es sich um einen Bug im Metaeditor handelt. Wir hatten ja wieder ein Zwangsupdate (2.12.16) Es geht quasi um den Suizid eines Indikators, allerdings soll er vorher noch Hilfe schreien. Alles sehr bildhaft ausgedrückt. Der Code ist aus der Dokumentation, lediglich die MessageBox sollte zusätzlich ausgegeben werden (der Hilfeschrei) Das verrückte ist, daß sich der Code im Debugger anders verhält als fertig kompiliert. Code:
//+------------------------------------------------------------------+ //| Demo_ChartIndicatorDelete.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Histogram #property indicator_label1 "Histogram" #property indicator_type1 DRAW_HISTOGRAM #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int first_param=1; input int second_param=2; input int third_param=3; input bool wrong_init=true; //--- indicator buffers double HistogramBuffer[]; string shortname; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { int res=INIT_SUCCEEDED; if(wrong_init) MessageBox("\nWrong INIT", "* ERROR *", MB_ICONSTOP); //--- Link the HistogramBuffer array to the indicator buffer SetIndexBuffer(0,HistogramBuffer,INDICATOR_DATA); //--- Construct a short indicator name based on input parameters shortname=StringFormat("Demo_ChartIndicatorDelete(%d,%d,%d)", first_param,second_param,third_param); IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- If forced completion of an indicator is set, return a non-zero value if(wrong_init) res=INIT_FAILED; return(res); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Starting position for working in a loop int start=prev_calculated-1; if(start<0) start=0; //--- Fill in the indicator buffer with values for(int i=start;i<rates_total;i++) { HistogramBuffer[i]=close[i]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| A handler of the Deinit event | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { PrintFormat("%s: Deinitialization reason code=%d",__FUNCTION__,reason); if(reason==REASON_INITFAILED) { PrintFormat("An indicator with a short name %s (file %s) deletes itself from the chart",shortname,__FILE__); int window=ChartWindowFind(); bool res=ChartIndicatorDelete(0,window,shortname); //--- Analyse the result of call of ChartIndicatorDelete() if(!res) { PrintFormat("Failed to delete indicator %s from window #%d. Error code %d", shortname,window,GetLastError()); } } } Hoffentlich kommt da jemand drauf, ich habe bereits einen ganzen Nachmittag versch...wendet und bin stocksauer. Grüße Otto |
Lesezeichen |
Stichworte |
code, ex5, fehler ex5, kompilieren, mql5, programmierung, programmierung metatrader, programmierung mql5 |
|
|