Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1101

 

Ich kann die Indikatordaten des hohen Zeitrahmens nicht aus dem EA abrufen.

2019.07.22 07:23:02.556 Core 1  2017.10.05 07:00:00   Не удалось скопировать значения индикатора. Error =4806,  copied =-1

Und während der Optimierung funktioniert es. Wenn ich es im Visualizer ausführe, erhalte ich diesen Fehler.

Was ist mit dem Indikator nicht in Ordnung?

Dateien:
ind.mq5  11 kb
 
EgorKim:

Ich kann die Indikatordaten des hohen Zeitrahmens nicht aus dem EA abrufen.

Und während der Optimierung funktioniert es. Wenn ich es im Visualizer ausführe, erhalte ich diesen Fehler.

Was ist mit dem Indikator nicht in Ordnung?

Wo ist der EA-Code?

Die wahrscheinliche Ursache - in den Pfad, wo Indikator befindet (geschriebenen Pfad zum Indikator in Advisor durch iCustom). Außerdem sollten sich die Dateien des Indikators mq5 und ex5 im selben Ordner befinden.

 
EgorKim:

Ich kann keine Indikatordaten aus dem hohen Zeitrahmen vom EA erhalten.

Und während der Optimierung funktioniert es. Wenn ich es im Visualizer ausführe, erhalte ich diesen Fehler.

Was ist mit dem Indikator nicht in Ordnung?

Ihr Indikator befindet sich also in [date folder]\MQL5\Indicators\ind.mq5 , dort ist auch die kompilierte Datei.

Ein Beispiel für einen Expert Advisor, der auf den Indikatorpuffer "0" - "Mittel" zugreift:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int      Input1=9;
//---
int    handle_iCustom;              // variable for storing the handle of the iCustom indicator /*
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iCustom
   handle_iCustom=iCustom(Symbol(),Period(),"ind");
//--- if the handle is not created 
   if(handle_iCustom==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double means[];
   ArraySetAsSeries(means,true);
   int start_pos=0,count=3;
   if(!iGetArray(handle_iCustom,0,start_pos,count,means))
      return;

   string text="Means:"+"\n";
   for(int i=count-1;i>=0;i--)
     {
      text=text+"#"+IntegerToString(i)+": "+DoubleToString(means[i],Digits())+"\n";
     }
   Comment(text);
  }
//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
double iGetArray(const int handle,const int buffer,const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code 
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
   return(result);
  }
//+------------------------------------------------------------------+

Und das Ergebnis im Testgerät:


und online:


Dateien:
Test.mq5  7 kb
 
Vladimir Karputov:

Ihr Indikator befindet sich also in [date folder]\MQL5\Indicators\ind.mq5 , dort ist auch die kompilierte Datei.

Ein Beispiel für einen Expert Advisor, der auf den Indikatorpuffer "0" - "Mittel" zugreift:

Und das Ergebnis im Testgerät:


Und online:


Ich habe keinen Fehler im aktuellen Zeitrahmen.

Das Problem tritt auf, wenn ich Daten aus einem höheren Zeitrahmen erhalte.

Offensichtlich liegt das Problem im Indikator und nicht in meinem EA)

Und im Optimierungsmodus tritt kein Fehler auf. Wenn Sie Single Pass und Visualisierung aktivieren, tritt ein Fehler auf. Der Fehler...

Hier ist das Thema des gleichen Themas, so wie ich es verstehe

https://www.mql5.com/ru/forum/190003

Не получается брать данные индикатора со старшего ТФ
Не получается брать данные индикатора со старшего ТФ
  • 2017.04.14
  • www.mql5.com
Уже четвёртый день в индикаторе пытаюсь получить данные стандартного индикатора АО со старшего таймфрейма, и всё никак...
 
EgorKim:

Ich habe keine Fehler im aktuellen Zeitrahmen.

Das Problem tritt auf, wenn ich Daten aus einem höheren Zeitrahmen abrufe.

Das Problem liegt eindeutig im Indikator, nicht in meinem EA)

Und im Optimierungsmodus tritt kein Fehler auf. Wenn Sie Single Pass und Visualisierung aktivieren, tritt ein Fehler auf. Der Fehler...

Hier ist das Thema des gleichen Themas, so wie ich es verstehe

https://www.mql5.com/ru/forum/190003

Sie haben keinen Hinweis auf den älteren Zeitrahmen - seine Daten werden nicht auf dem neuesten Stand gehalten:
Проблема перевода с МТ4 на МТ5. Или, точнее, невозможность без'ошибочного исполнения некоторых алгоритмов в МТ5.
Проблема перевода с МТ4 на МТ5. Или, точнее, невозможность без'ошибочного исполнения некоторых алгоритмов в МТ5.
  • 2019.07.21
  • www.mql5.com
Сначала цитата из справочника языка MQL5. Рубрика Организация доступа к данным...
 

Legen Sie den Indikator wie folgt auf das H1-Diagramm mit Standardparametern.

Es liegt ein Fehler vor

Artjom Trischkin

Ich bitte um Hilfe, was ich an dem Indikator ändern kann

Dateien:
ind2.mq5  22 kb
 
EgorKim:

Ich habe keine Fehler im aktuellen Zeitrahmen.

Das Problem tritt auf, wenn ich Daten aus einem höheren Zeitrahmen abrufe.

Das Problem liegt eindeutig im Indikator, nicht in meinem EA)

Und im Optimierungsmodus tritt kein Fehler auf. Wenn Sie Single Pass und Visualisierung aktivieren, tritt ein Fehler auf. Der Fehler...

Hier ist das Thema des gleichen Themas, so wie ich es verstehe

https://www.mql5.com/ru/forum/190003

Hier ist eine Änderung von COUNTER - Sie können den Zeitrahmen des Indikators in den Parametern festlegen. Funktioniert sowohl im Testgerät als auch online.

//--- create handle of the indicator iCustom
   handle_iCustom=iCustom(Symbol(),Inp_period,"ind",
                          bars_IN,
                          SP,
                          N_Shift1,
                          Forecast,
                          kstd,
                          Oscilator,
                          N_Buff,
                          Ka,
                          La,
                          Za,
                          Oe,
                          Me,
                          DIGf);
Dateien:
Test.mq5  10 kb
 
Vladimir Karputov:

Hier ist eine Modifikation des COUNTERs - Sie können den Zeitrahmen des Indikators in den Parametern einstellen. Es funktioniert im Testgerät und online.

Wie können wir dann erklären, dass der Expert Advisor während der Optimierung handelt? Und in der Visualisierung gibt es nicht einen einzigen Handel?

 
EgorKim:

Wie ist es dann zu erklären, dass der Expert Advisor während der Optimierung handelt. Und während der Visualisierung gibt es keinen Handel?

Was ist die Bedingung für die Eröffnung einer Position (Nummer des Indikatorpuffers und Bar-Nummer)?

 
Vladimir Karputov:

Was ist die Bedingung für die Eröffnung einer Position (Nummer des Indikatorpuffers und Bar-Nummer)?

Zum Beispiel so.

Und einige Optimierungsläufe fallen im Visualizer zusammen.

Und manche Pässe haben überhaupt keinen einzigen Handel

double price1=0.0;
price1=iCustomGet(handle_ind,1,0)
double price2=0.0;
price2=iCustomGet(handle_ind,2,0)
double open=0.0;   
double open          = iOpen(Symbol(),Period(),0);

   if(price1!=0.0 && price2!=0.0 && open!=0.0)
     {
      if(open<price1)
        {
         buy
        }
      if(open>price2)
        {
         sell
        }
      }
//+------------------------------------------------------------------+
//| Get value of buffers for the iCustom                             |
//|  the buffer numbers are the following:                           |
//+------------------------------------------------------------------+
double iCustomGet(int handle,const int buffer,const int index)
  {
   double Custom[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iCustom array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle,buffer,index,1,Custom)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iCustom indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Custom[0]);
  }
//+------------------------------------------------------------------+

Ich denke, das Problem liegt im Indikator.

Und wie Artem zu Recht bemerkt hat, liegt das Problem in den tatsächlichen Daten.

Es will mir nur nicht sagen, wie ich es machen soll.)