Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1101

 

No puedo obtener los datos del indicador del marco de tiempo alto del EA.

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

Y durante la optimización funciona. Cuando empiezo a ejecutarlo en el visualizador me sale este error.

¿Qué ocurre con el indicador?

Archivos adjuntos:
ind.mq5  11 kb
 
EgorKim:

No puedo obtener los datos del indicador del marco de tiempo alto del EA.

Y durante la optimización funciona. Cuando empiezo a ejecutarlo en el visualizador me sale este error.

¿Qué ocurre con el indicador?

¿Dónde está el código EA?

La causa probable - en la ruta donde se encuentra el indicador (ruta escrita al indicador en el asesor a través de iCustom). Además, el indicador mq5 y el archivo ex5 deben estar en la misma carpeta.

 
EgorKim:

No puedo obtener los datos del indicador del marco de tiempo alto del EA.

Y durante la optimización funciona. Cuando empiezo a ejecutarlo en el visualizador me sale este error.

¿Qué ocurre con el indicador?

Así, su indicador se encuentra en [carpeta de fecha]\MQL5\Indicators\ind.mq5 , hay archivo compilado también.

Un ejemplo de Asesor Experto que accede al buffer de indicadores "0" - "Medios":

//+------------------------------------------------------------------+
//|                                                         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);
  }
//+------------------------------------------------------------------+

Y el resultado en el probador:


y en línea:


Archivos adjuntos:
Test.mq5  7 kb
 
Vladimir Karputov:

Así, su indicador se encuentra en [carpeta de fecha]\MQL5\Indicators\ind.mq5 , hay archivo compilado también.

Un ejemplo de Asesor Experto que accede al buffer de indicadores "0" - "Medios":

Y el resultado en el probador:


Y en línea:


No tengo ningún error en el marco temporal actual.

El problema aparece si recibo datos de un marco temporal superior.

Claramente el problema está en el indicador y no en mi EA)

Y no hay ningún error en el modo de optimización. Cuando se activa el pase único y la visualización - hay un error. El error...

Este es el tema del mismo asunto, según tengo entendido

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

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

No tengo errores en el marco temporal actual.

El problema aparece si obtengo datos de un marco temporal superior.

El problema está claramente en el indicador, no en mi EA)

Y no hay ningún error en el modo de optimización. Cuando se activa el pase único y la visualización - hay un error. El error...

Este es el tema del mismo asunto, según tengo entendido

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

No tiene ninguna referencia al marco temporal de los mayores: sus datos no se mantienen actualizados:
Проблема перевода с МТ4 на МТ5. Или, точнее, невозможность без'ошибочного исполнения некоторых алгоритмов в МТ5.
Проблема перевода с МТ4 на МТ5. Или, точнее, невозможность без'ошибочного исполнения некоторых алгоритмов в МТ5.
  • 2019.07.21
  • www.mql5.com
Сначала цитата из справочника языка MQL5. Рубрика Организация доступа к данным...
 

Ponga el indicador así en el gráfico H1 con los parámetros por defecto.

Hay un error

Artyom Trishkin

Pido ayuda sobre qué arreglar en el indicador

Archivos adjuntos:
ind2.mq5  22 kb
 
EgorKim:

No tengo errores en el marco temporal actual.

El problema aparece si obtengo datos de un marco temporal superior.

El problema está claramente en el indicador, no en mi EA)

Y no hay ningún error en el modo de optimización. Cuando se activa el pase único y la visualización - hay un error. El error...

Este es el tema del mismo asunto, según tengo entendido

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

Aquí hay una modificación de COUNTER - usted puede establecer el marco de tiempo del indicador en los parámetros. Funciona tanto en el probador como en línea.

//--- 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);
Archivos adjuntos:
Test.mq5  10 kb
 
Vladimir Karputov:

Aquí hay una modificación del CONTADOR - usted puede establecer el marco de tiempo del indicador en los parámetros. Funciona en el probador y en línea.

¿Cómo se explica entonces que el Asesor Experto opere durante la optimización? ¿Y en la visualización no hay ni un solo comercio?

 
EgorKim:

Cómo se explica entonces que durante la optimización el Asesor Experto opere. ¿Y durante la visualización no hay intercambios?

¿Cuál es la condición para abrir una posición (número de búfer del indicador y número de barra)?

 
Vladimir Karputov:

¿Cuál es la condición para abrir una posición (número de búfer del indicador y número de barra)?

Así.

Y algunos pases del optimizador coinciden en el visualizador.

Y algunos pases no tienen ni un solo oficio

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]);
  }
//+------------------------------------------------------------------+

Creo que el problema está en el indicador.

Y como bien ha señalado Artem, el problema está en los datos reales.

Simplemente no quiere decirme cómo hacerlo)