Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Warum funktioniert dieser Code im Debugger aber nicht als ex5 (http://www.expert-advisor.com/forum/showthread.php?t=5328)

Kronenchakra 03.12.16 22:16

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());
        }
    }
  }

Zeilen33/34 wurden eingefügt

Hoffentlich kommt da jemand drauf, ich habe bereits einen ganzen Nachmittag versch...wendet und bin stocksauer.

Grüße Otto


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:05 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum