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

 
kopeyka2:

Eso es exactamente lo que pensé. La cuestión del malentendido es la palabra "parámetros". Así que empecé a mirar TODAS las variables que están involucradas en el handle --> CopyBuffer

1) Mi pregunta desde el principio era para cambiar la PANTALLA de tiempo para guardar los datos de la manija. Como en MT4.

Y de hecho resulta que sí:

SIEMPRE y en TODOS los plazos da el mismo valor de 10

Al no haber conseguido nada aquí, seguí adelante.

2) Y cito: "Obtiene los datos del buffer especificado del indicador especificado en la cantidad especificada en el array del buffer".

Es decir, al establecerel recuento a mano deberíamos tener un INTERVALO con los valores . ¡Y ahí están! ¡¡¡¡¡¡BUT!!!!!! Sólo cuando el período de la manija corresponde a

PERIOD_H1en la pantalla del monitor. Todos los valores se transmiten con claridad. Pero al pasar a otro marco temporal, NO hay datos en la pantalla.

¡¡¡¡NO se transmiten de ninguna manera!!!! Y mi pregunta era exactamente esa. ¡¡¡¡Y el número de barras no es tan importante aquí si NO están allí!!!!


He mirado el indicador propuestoMTF_LRMA.mq5 Pero tiene lo mismo. Cambia a otro marco temporal en la pantalla y los datos pasan por el marco temporal de la pantalla. Lo necesito en una computadora de mano.

Por ejemplo: iClose(NULL, PERIOD_H1, 5); en todos los plazos dará el mismo valor - 10 barras en H1.

Hasta ahora todos los ejemplos estaban en la corrección dela cuenta del CopyBuffer. Pero la matriz está vacía.


Te equivocas. Manejar da datos en cualquier marco temporal. Te daré un ejemplo en unas 10 horas. No puedo hacerlo en mi teléfono móvil.
 
Artyom Trishkin:
Te equivocas. Manejar da datos en cualquier marco temporal. Te daré un ejemplo en unas 10 horas. No podré hacerlo desde mi móvil.

DE ACUERDO. Gracias por la respuesta.


Me he corregido.

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1. 

Pensé que podría ser así

MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize(params,4); 
//--- set ma_period 
   params[0].type         =TYPE_INT; 
   params[0].integer_value=0; 
//--- set ma_shift 
   params[1].type         =TYPE_INT; 
   params[1].integer_value=0; 
//--- set ma_method 
   params[2].type         =TYPE_INT; 
   params[2].integer_value=MODE_EMA; 
//--- set applied_price 
   params[3].type         =TYPE_INT; 
   params[3].integer_value=PRICE_CLOSE; 
//--- create MA 
   h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params); 
//--- release indicators (first h_MACD) 
   
  if(h_MA==INVALID_HANDLE)
     {
      Print("The iMA (",string(PERIOD_M15),") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//---
   return(INIT_SUCCEEDED);

Pero si cambia de opinión, esperaré al primer método para obtener el valor del indicador técnico (iMA). Pero sigo sin entenderlo.

 
kopeyka2:

DE ACUERDO. Gracias por la respuesta.


Me he corregido.

Pensé que podría ser así

Pero si cambia de opinión, esperaré al primer método para obtener el valor del indicador técnico (iMA). Pero ahora no lo entiendo...

Más arriba mostré que el número de barras en diferentes TFs es diferente, y por lo tanto diferente número de barras a copiar, dependiendo del TF donde el indicador debe ser calculado. Debería comprobar el número de barras, calculado por BarsCalculated() y utilizarlo como base.

//+------------------------------------------------------------------+
//| 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[])
  {
   if(rates_total==prev_calculated) return(rates_total);
//---
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//---
   if(TF!=PERIOD_CURRENT)
   {
      if(handle==INVALID_HANDLE)
        {
         handle=iCustom(Symbol(),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down,PERIOD_CURRENT);
         return(0);
        }
      else
        {
         int bars_calculated=BarsCalculated(handle);
                  //Print("Начнем расчет - " , bars_calculated);
         if(bars_calculated<=0) return(0);
         if(Bars(Symbol(),TF)!=bars_calculated)
           {
            for(i=rates_total-prev_calculated-1;i>=0;i--)
              {
               Delta[i]=0.0;   
              }
            return(prev_calculated);
           } 
        }
 
Aleksey Vyazmikin:

He mostrado arriba que el número de barras en diferentes TFs es diferente, y por lo tanto debe solicitar un número diferente de barras para copiar, dependiendo del TF, que debe ser calculado por el indicador. Deberías comprobar el número de barras, calculado por el indicador a través de BarsCalculated() y utilizarlo como base, aquí tienes un ejemplo para MTF

Gracias. Lo probaré. Pero, como se ha indicado anteriormente, la matriz está totalmente vacía. He estado haciendo sdigs a mano en la matriz. Está todo vacío.
 
kopeyka2:
Gracias. Lo intentaré. Pero, como se ha señalado anteriormente, la matriz está totalmente vacía. He estado haciendo sdigs a mano en la matriz. Está todo vacío.
¿Ignoran que hay que esperar a que se carguen los datos de otro marco temporal? Te he dado ejemplos. Los datos del indicador mostrado se toman sólo de los plazos más altos. Si establecemos un valor inferior o igual al marco temporal actual, los datos se toman del actual. Todo esto está en el código, pero no se ha molestado en investigarlo. Pero estás haciendo una declaración.
 
Artyom Trishkin:
¿Ignora que tiene que esperar a que se carguen los datos de un marco temporal diferente? Te he dado ejemplos. Los datos del indicador mostrado se toman sólo de los plazos más altos. Si establecemos un valor inferior o igual al marco temporal actual, los datos se toman del actual. Todo esto está en el código, pero no se ha molestado en investigarlo. Pero estás haciendo una declaración.
No me limité a mirar, sino que desmonté su indicador en pedazos. Tuve la idea de retrasar los datos desde el principio. E inmediatamente, desde el primer visionado, vi su Timer. Miraré en esa dirección.
 
kopeyka2:
No sólo miré, sino que desmonté su indicador pieza por pieza. Esta era la idea sobre el retraso de los datos desde el principio. E inmediatamente, desde el primer visionado, vi su Timer. Miraré en esa dirección.
El último ciclo con la conversión de datos al marco de tiempo actual comentó, y en cualquier búfer gráfico pasar los datos de los búferes calculados MAshek, y verás en el gráfico lo que quieres ver.
 

por ahora

otro marco temporal (no nativo)


 
kopeyka2:

por ahora

otro marco temporal (no nativo)


¿Ha comentado deliberadamente la cadena de retorno en caso de que no se reciban los datos? ¿Por qué? Si se desatornillan las ruedas y se dice que el motor zumba, el volante gira pero el coche no va, y por lo tanto no está en condiciones de funcionar, es un poco duro.
 
kopeyka2:
Lo intentaré. Lo probaré. Pero como he señalado antes, la matriz está vacía en absoluto. Utilicé mis manos para hacer lecturas de la matriz. Está todo vacío.

Antes te he dado un trozo de código de tu indicador con impresión, ¿has intentado copiarlo? No aparece nada en el registro, ni errores ni números?