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

 
Сергей Таболин:

La primera vía ayudó a )))) Gracias.

Una pregunta más: arranco 3 instancias del indicador para obtener datos de diferentes TFs. Pero cuando lo adjunto a un gráfico, obtengo esta especie de hoja de cálculo:

¿Qué significaría?

No puedo asegurarlo, pero tal vez el segundo búfer se inicializó tarde.

Para saber exactamente cuál es el motivo, debe ajustar las siguientes líneas así

if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки "+ IntegerToString(GetLastError()));   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

Después de eso podemos decir con más seguridad lo que está mal

 
Oleg Peiko:

No puedo asegurarlo, pero tal vez el segundo búfer se inicializó tarde.

Para saber exactamente cuál es el motivo, debe ajustar las siguientes líneas así

Después podremos decir con más seguridad lo que está mal.

2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        4806
2019.03.23 22:58:11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated() вернул -1, код ошибки 4806
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND    4806    Запрошенные данные не найдены

¿Se puede hacer algo con él?

Por cierto, esta copia se abre en M15.

Sin embargo, lo mismo ocurre en otros TFs también...

 
Сергей Таболин:

¿Hay algo que pueda hacer al respecto?

Por cierto, esta copia se abre en M15.

Es lo mismo en otros plazos también...

En el temporizador, una vez cada dos minutos, pida cualquier dato para el periodo de tiempo requerido. De este modo, siempre tendrá datos actualizados para el periodo de tiempo.

Además: en OnCalculate() al principio de la misma, lo solicitas, por ejemplo:

   if(iTime(NULL,PERIOD_M15,1)==0)
      return 0;

Así, hasta que los datos del marco temporal de quince minutos estén disponibles, el indicador esperará al siguiente tick.
Puede solicitar la cantidad correcta de datos para el cálculo utilizando la función CopyXXX:

   datetime array[];
   if(CopyTime(NULL,PERIOD_M15,0,number_of_datas,array)!=number_of_datas)
      return 0;

En este caso, hasta que se disponga de los datos de number_of_datas necesarios, el indicador esperará al siguiente tick.

Si decide utilizar la función

Bars(NULL,PERIOD_M15);

..., debe tener en cuenta que la cantidad de datos para el cálculo no debe superar el total de tasas, de lo contrario superará los límites del array. En otras palabras, si hay menos barras en el marco temporal actual que en el M15, entonces debemos tomar el número de barras igual a su número en el marco temporal actual = rates_total

 
Artyom Trishkin:

En el temporizador, una vez cada dos minutos, solicite cualquier dato para el periodo de tiempo requerido. De este modo, siempre tendrá datos actualizados para el periodo de tiempo.

Además: en OnCalculate() al principio del mismo se pide, por ejemplo:

Así, hasta que los datos del marco temporal de 15 minutos estén disponibles, el indicador esperará al siguiente tick.
Con la función CopyXXX se puede solicitar la cantidad adecuada de datos para el cálculo:

En este caso, hasta que la cantidad de datos requerida en number_of_datas esté disponible, el indicador esperará al siguiente tick.

Si decide utilizar la función

..., debe tener en cuenta, que la cantidad de datos para el cálculo no debe exceder el rates_total, de lo contrario excederá los límites del array. En otras palabras, si hay menos barras en el marco temporal actual que en el M15, entonces debemos tomar el número de barras igual a su número en el marco temporal actual = rates_total

Gracias.

Lo hizo así:

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[])
  {
   
   if(iTime(NULL,PERIOD_CURRENT,1)==0)  return(0); 
   if(iTime(NULL,periodTF1,1)==0)       return(0); 
   if(iTime(NULL,periodTF2,1)==0)       return(0); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0;
   if(PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF1) && PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF2))   ma_calculated = BarsCalculated(handle_MA);
   else
   if(PeriodSeconds(periodTF1) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF1) < PeriodSeconds(periodTF2))        ma_calculated = BarsCalculated(handle_MA2);
   else
   if(PeriodSeconds(periodTF2) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF2) < PeriodSeconds(periodTF1))        ma_calculated = BarsCalculated(handle_MA3);
   
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 

resultado:

2019.03.24 00:56:38.056 my_HMA5_125 (GBPUSD,M30)        BarsCalculated() вернул -1, код ошибки 4806
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

Me cuesta mucho con los indicadores ))))

 

Hola a todos.
Por favor, asesore sobre la función CopyHigh.
He leído en la definición de esta función: "Obtiene los datos del historial en un array con el precio máximo de la barra para un símbolo y un periodo especificados".

¿Estamos hablando de un conjunto de precios de oferta o de demanda? ¿O hay alguna forma de establecer el tipo de precio necesario?

 
renatmt5:

Hola a todos.
Por favor, asesórese sobre la función CopyHigh.
He leído en la definición de esta función, "Obtiene los datos del historial a un array de precios máximos de barra para un símbolo y periodo especificados".

¿Estamos hablando de un conjunto de precios de oferta o de demanda? ¿O es posible fijar el tipo de precio necesario de alguna manera?

Referencia:Características del trazado

Características de la elaboración de gráficos

Los datos del historial, en base a los cuales se construyen los gráficos, se almacenan en el disco duro. Cuando se abre un gráfico, los datos se descargan del disco y se descargan los últimos datos que faltan del servidor de operaciones. Si los datos históricos de un instrumento financiero no están disponibles en el disco duro, se descargan las últimas 512 barras del historial.

Para descargar los datos anteriores, desplace el gráfico a la zona deseada. Una vez abierto el gráfico, la plataforma comenzará a recibir información sobre las cotizaciones actuales. Así, el movimiento posterior de los precios se forma en tiempo real. Esta información se guarda automáticamente en un archivo histórico y se utiliza cuando se vuelve a abrir este gráfico en el futuro.

  • El parámetro "Barras máximas en el gráfico" se establece enla configuración de la plataforma. Este parámetro permite controlar la cantidad de datos históricos que se muestran en el gráfico.
  • Los gráficos se representan en función de los precios de oferta. Si laprofundidad del mercado está disponible para el símbolo, los gráficos se trazarán a los últimos precios (el precio de la última operación ejecutada).
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov:

Referencia:Características de los gráficos

Características de la elaboración de gráficos

Los datos históricos, en base a los cuales se construyen los gráficos, se almacenan en el disco duro. Cuando se abre un gráfico, los datos se descargan del disco y se descargan los últimos datos que faltan del servidor de operaciones. Si los datos históricos de un instrumento financiero no están disponibles en el disco duro, se descargan las últimas 512 barras del historial.

Para descargar los datos anteriores, desplace el gráfico a la zona deseada. Una vez abierto el gráfico, la plataforma comenzará a recibir información sobre las cotizaciones actuales. Así, el movimiento posterior de los precios se forma en tiempo real. Esta información se guarda automáticamente en un archivo histórico y se utiliza cuando se vuelve a abrir este gráfico en el futuro.

  • El parámetro "Barras máximas en el gráfico" se establece enla configuración de la plataforma. Este parámetro permite controlar la cantidad de datos históricos que se muestran en el gráfico.
  • Los gráficos se representan en función de los precios de oferta. Si laprofundidad del mercado está disponible para el símbolo, los gráficos se trazarán a los últimos precios (último precio de negociación).

Buenos días Vladimir, como siempre me ayudas :) Gracias.

 
Buenos días a todos. Por favor, indique cómo calcular el volumen de la posición en función de los fondos asignados a la operación.
 

¿Cómo encontrar la vela más pequeña de N en mql5?

En mql4

   min=99999;
   N=5;
   for(int i=1;i<=N;i++)
     {
      if(High[i]-Low[i]<min) min=High[i]-Low[i];
     }
 
yiduwi:

¿Cómo encontrar la vela mínima de N en mql5?

En mql4

¿En el Asesor Experto o en un indicador? ¿Para el plazo actual o para otro?