Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 580

 
Hola. Por favor, ayúdenme con un problema. Necesito obtener datos de un EA para diferentes símbolos/TF. El manual dice:"El mecanismo de acceso al servidor para los datos no depende de cómo se haya iniciado una solicitud: por un usuario al navegar por un gráfico o por el programa en MQL4". Sin embargo, en la práctica, si en tiempo real, por ejemplo, si seguimos el número de barras en un símbolo/TF diferente al símbolo en el que se está ejecutando el EA, sucede lo siguiente El nuevo símbolo carga un pequeño número de barras en el primer acceso (alrededor de 1000 para M1) y este número no cambia. He probado diferentes funciones para acceder a las series de tiempo, he intentado especificar el desplazamiento de las barras y el tiempo más profundo en el historial de lo que se carga en este momento, he intentado mover el ChartNavigate(_ID, CHART_BEGIN) - los nuevos datos no se cargan y el número de barras no cambia. Sin embargo, si abro una ventana programáticamente desde el mismo Asesor Experto (la he abierto antes para la función ChartNavigate()) y muevo el gráfico hacia la izquierda utilizando el botón de flecha/Home/PgUp, se produce el aumento de las matrices de series de tiempo, el número de barras se incrementa en tiempo real, es decir, los datos se cargan. ¿Qué hay que hacer para cargar el historial de forma programada sin pulsar las teclas físicas del teclado? Gracias)
 
Ihor Herasko:

Hazlo así. El código es casi correcto. Sólo falta una palabra:

Gracias.
 
Alexandr Mordashov:
¡Hola! Ayúdame a resolver el problema. Necesito obtener datos de un EA para diferentes símbolos/TF. La Ayuda dice:"El mecanismo de acceso al servidor para los datos no depende de cómo se haya iniciado la solicitud: por un usuario al navegar por un gráfico o por un programa en MQL4". Sin embargo, en la práctica, si en tiempo real, por ejemplo, si seguimos el número de barras en un símbolo/TF diferente al símbolo en el que se está ejecutando el EA, sucede lo siguiente El nuevo símbolo carga un pequeño número de barras en el primer acceso (alrededor de 1000 para M1) y este número no cambia. He probado diferentes funciones para acceder a las series de tiempo, he intentado especificar el desplazamiento de las barras y el tiempo más profundo en el historial de lo que se carga en este momento, he intentado mover el ChartNavigate(_ID, CHART_BEGIN) - los nuevos datos no se cargan y el número de barras no cambia. Sin embargo, si abro una ventana programáticamente desde el mismo Asesor Experto (ya la he abierto para la función ChartNavigate()) y muevo el gráfico hacia la izquierda utilizando la flecha/botón Home/PgUp, se produce el aumento de las matrices de series de tiempo, el número de barras se incrementa en tiempo real, es decir, los datos se cargan. ¿Qué hay que hacer para cargar el historial de forma programada sin pulsar las teclas físicas del teclado? Gracias)

Hay que ser más explícito en la pregunta. Si no se plantea el problema, no se puede resolver.

 
Galim_V:
¿Puedes decirme cómo obtener los indicadores de fondo de un marco temporal distinto al que el búho está rondando?
double iRev()
{
 static int wtf;
 static int tf;  
 int xtf =Period();       // таймфрейм текущего графика 
 
                          //PERIOD_CURRENT;
 if(xtf != PERIOD_CURRENT)
 {
 Print("xtf  ",xtf);
   switch(xtf)
   {
    case 1: tf = PERIOD_H1;
    break;
    case 5: tf = PERIOD_H4; wtf = PERIOD_H1;
    break;
    case 15: tf = PERIOD_D1;
    break;
   }
     
 }
Print("tf == ",tf,"wtf ==",wtf);
 double  iRa =  NormalizeDouble(iCustom(NULL,tf,"iRevers",InpSARStep,InpSARMaximum,0),Digits);
 double  wRa =  NormalizeDouble(iCustom(NULL,wtf,"iRevers",InpSARStep,InpSARMaximum,0),Digits);
   if(iRa != 0) ObjectCreate("Ra",OBJ_HLINE,0,Time[0],iRa,0,0);
     
     ObjectSet("Ra",OBJPROP_TIME1,Time[0]);
     ObjectSet("Ra",OBJPROP_PRICE1,iRa);
   
   if(wRa != 0) ObjectCreate("weRa",OBJ_HLINE,0,Time[0],wRa,0,0); 
     ObjectSet("weRa",OBJPROP_TIME1,Time[0]);
     ObjectSet("weRa",OBJPROP_PRICE1,wRa); 
    
     
  Print("iRa   ",iRa,wRa);
 return(iRa);
}  
Funciona, pero no siempre correctamente. He adjuntado objetos para la evaluación visual. Algún consejo o dónde buscar.
 
Galim_V:
Funciona, pero no siempre correctamente. Adjunté los objetos para la evaluación visual. Por favor, aconséjeme o dónde buscar.

¿Para qué sirve DRAW_LINE?

 double  iRa =  NormalizeDouble(iCustom(NULL,tf,"iRevers",InpSARStep,InpSARMaximum,DRAW_LINE,0),Digits);
 double  wRa =  NormalizeDouble(iCustom(NULL,wtf,"iRevers",InpSARStep,InpSARMaximum,DRAW_LINE,0),Digits);
 
Alexey Viktorov:

¿Para qué sirve DRAW_LINE?

He corregido el código. Pero no funcionó correctamente, ni siquiera por errores en el código. Yo hago pruebas en el terminal de mi broker y no siempre miro la conexión con el servidor. Es muy crítico en este caso. Gracias.
 

Hola. ¿Cómo puedo saber el precio de cierre en M30 si el EA está en el gráfico H1?

Close_M30= iClose(Symbol(),PERIOD_M30,1);
 
bij:

Hola. ¿Cómo puedo saber el precio de cierre en M30 si el EA está en el gráfico H1?

Me gusta cuando la gente hace una pregunta y la responde ella misma ))

Básicamente, todo es correcto. Sólo hay un punto sutil: antes de utilizar datos obtenidos de otro marco temporal, tenemos que asegurarnos de que esos datos existen.

Así que el código correcto completo sería el siguiente

ResetLastError();
Close_M30= iClose(Symbol(),PERIOD_M30,1);
if (GetLastError() != ERR_NO_ERROR)
{
  // Значение Close_M30 использовать нельзя
}
 
Ihor Herasko:

Me gusta cuando la gente hace una pregunta y luego la responde ella misma ))

En general, todo es correcto. Sólo hay un matiz: antes de utilizar los datos de otra TF, hay que asegurarse de que esos datos existen.

Así que el código correcto completo sería el siguiente:

Gracias, la acción sólo después del cierre H1, pero la condición se cumple 30 minutos antes del cierre H1.

 ResetLastError();
   niz_=NormalizeDouble(iCustom(NULL,PERIOD_M30,"mand v.1",2,1),Digits);
   Close_M30=iClose(Symbol(),PERIOD_M30,1);
   if(GetLastError() != ERR_NO_ERROR)return;
   if(Close_M30>niz_)//условие
     {
      //действие
     }
 
bij:

Gracias, la acción es sólo después del cierre H1, pero la condición se cumple 30 minutos antes del cierre H1.

Si quiere tomar la vela M30 que cerró con el último cierre H1, puede ser una vela con índice no sólo 1, sino también 2. Otra cosa es que entonces no está claro por qué se toma el precio de cierre de la M30 cuando es el mismo precio de cierre de la vela H1 anterior. Es decir, en este caso no tiene sentido interrogar el precio de cierre de otro TF, porque coincide con el precio de cierre del TF actual.