Qué actualiza RefreshRates() - página 6

 
Mikhail Nazarenko:

MT4 es una caja oscura y sólo puedo juzgar lo que sucede allí probando en condiciones reales. Al principio no usaba el sueño para nada, pero cuando me salían chorradas en algunas barras de horas añadí el sueño y el problema desapareció. No sé en qué orden y cómo se actualizan las series temporales de MT4. No estoy seguro de qué hacer con él, lo utilizaré como una oportunidad para solucionar mi problema y compartirlo con los demás.

Yo mismo he experimentado este problema, todo está bien en el probador, pero en el mercado real no es nada.

Llevo utilizando el Asesor Experto desde el lunes y estoy sorprendido.

He abierto varias aperturas rentables y luego he vuelto a comprar en lugar de vender, y viceversa.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta de los novatos sobre MQL4 y MQL5, o cualquier consejo y discusión sobre algoritmos y códigos

Vitaly Muzichenko, 2021.02.15 21:48

Ya he empezado a trabajar con MQL4 para comprobar mi algoritmo.

Nunca lo he probado, pero nunca he visto un algoritmo de este tipo correctamente. Código simple, sólo 2 búferes indicadores



El código es muy sencillo

   double poi=Point();
   for(int i = limit-2; i>0; i--) {
      if(open[i+0] > close[i+0] && MathAbs(open[i+0] - high[i+0]) < 0.1 * poi)
         Dn[i] = high[i+0] + 30 * poi;
      if(open[i+0] < close[i + 0] && MathAbs(open[i+0] - low[i+0]) < 0.1 * poi)
         Up[i] = low[i+0] - 30 * poi;
   }
 
Vitaly Muzichenko:

Yo mismo me he enfrentado a esto, todo está bien en el probador, pero en el mercado real es una porquería.

Llevo con el EA desde el lunes y estoy sorprendido.

Estoy sorprendido. Algunas aperturas son correctas, pero después vuelvo a comprar en lugar de vender y viceversa.


El código del indicador es sencillo.

Este es el mismo problema que tenía antes de iniciar este hilo. Hice la función isRefresh() arriba. Pruébalo. A mí me ha funcionado bien.

¿Pero no es un deslizamiento?

 
Vitaly Muzichenko:

El código del indicador es sencillo

¿el indicador abre operaciones?

las flechas son las mismas - el problema está en el código del EA

 
Mikhail Nazarenko:

Si empiezas a enseñar, entonces ayuda, confirma con código, pruebas, un enlace a un tema del foro o documentación. Todo lo demás es una masturbación cerebral.

Por favor, aclare lo que no está claro. Después de leerlo parece que la cuestión principal está resuelta y queda discutir lo obsoleto que es el 4).

No he tenido problemas después de insertar dicha carga de tiempo

bool HistoryCheck(int TF)
  {
   int err=0;   
   int i=0;
   datetime d1=0,d2=0;
   while(i<10)
    { 
    if((d1=iTime(NULL,TF,0))==0 || (d2=iTime(NULL,TF,InpPeriod*2))==0)          
        PrintFormat("itime=0, %s, %s", TimeToString(d1),TimeToString(d2)) ; 
   err=GetLastError();    
   if(err==4066)    
    {
    	PrintFormat("Error=4066") ; 
    	 Sleep(500);     	
    }
   else break;	
      SleepA(100);
      i++;                 
    } // while
   if(i==10)
	 { Comment("Update failed. Go to the next attempt."); return(false); }
   PrintFormat("HistoryCheck %d , %s, %s",i,TimeToString(d1),TimeToString(d2)) ;
   Comment(""); 
   return(true);
  }

Si necesita acceder rara vez y de forma irregular al marco temporal, debería (pero no necesariamente si el gráfico está abierto) realizar esta carga de nuevo antes de comprobar

  if((iTime(NULL,TF,0)+PeriodSeconds(TF))<TimeCurrent()
   || (iTime(NULL,TF,1)+PeriodSeconds(TF)*2)<TimeCurrent())
   HistoryCheck(TF)
Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
ChartOpen - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Nazarenko:

Esto es lo mismo que me encontré antes de abrir este hilo. Por alguna razón la terminal da datos obsoletos en real, escribí la función isRefresh() arriba. Pruébalo. A mí me ha funcionado bien.

¿Pero no es un deslizamiento?

No, se abre en una nueva barra 0 y la señal se busca en la barra cerrada, es decir, 1.

Esa es la situación a veces cuando un EA no obtiene lo que se espera a través de iCustom(). De nuevo: a veces, pero no a menudo.

Aquí hay otro, uno nuevo. He abierto correctamente una posición de compra según la señal y la siguiente señal del indicador también es de compra (flecha de abajo). Pero el EA a través deiCustom() ha recibido una señal de venta y ha cerrado la posición de compra y ha abierto la de venta, aunque debería haber otra posición de compra abierta.

Algo está mal con las series de tiempo, no lo he entendido todavía, se encontró hace 4 días y probablemente no voy a tratar de cambiarlo. No he visto ningún problema en el probador

Ahora mismo.

--- Y acabo de encontrar


 

Y también, pero ya en lugar de una venta, se abre una compra. Como he dicho, no es frecuente, pero ocurre

El código del indicador es simple - no hay complicados


 
Aleksey Mavrin:

Por favor, aclare lo que no está claro. Después de leer esto, parece que la cuestión principal está resuelta y nos queda discutir lo obsoleto que es el 4)

No he tenido problemas después de insertar la carga de tiempo así

Si necesita acceder rara vez y de forma irregular a un marco temporal, debería (pero no necesariamente si el gráfico está abierto) volver a realizar esta carga antes de comprobarlo, o bien dicha comprobación le ayudará

Esto es correcto,

esto es de la ayuda:

Se accede a los datos del indicador y de la serie temporal independientemente de que los datos solicitados estén listos (lo que se denomina acceso asíncrono). Esto es crítico para el cálculo de indicadores personalizados, por lo que si no hay datos solicitados, funciones como Copy...() devuelven inmediatamente un error. Sin embargo, cuando se accede desde Asesores Expertos y scripts, se realizan varios intentos de recepción de datos, con una pequeña pausa, cuyo objetivo es proporcionar el tiempo necesario para descargar las series temporales requeridas o calcular los valores de los indicadores.


Si se solicita información de otro gráfico (el nombre del instrumento y/o el valor del marco temporal difieren del actual), puede darse la situación de que no haya un gráfico apropiado abierto en el terminal cliente y haya que solicitar los datos necesarios al servidor. En este caso, el error ERR_HISTORY_WILL_UPDATED (4066 - datos históricos solicitados en estado de actualización) será colocado en la variable _Last_error y la solicitud deberá ser reintentada después de algún tiempo (ver el ejemplo de ArrayCopySeries()).

 
Vitaly Muzichenko:

Y también, pero ya en lugar de una venta, se abre una compra. Como he dicho, no es frecuente, pero ocurre

El código del indicador es sencillo - no hay complejidades


El método más fiable es escribir el registro. En cada transacción escriba los valores de las variables clave en el archivo. Por experiencia: la condición no estricta <=0 en lugar de <0 introdujo una terrible curvatura.

 
Vitaly Muzichenko:

Yo mismo me he enfrentado a esto, todo está bien en el probador, pero en el mercado real es una porquería.

Llevo con el EA desde el lunes y estoy sorprendido.

Estoy sorprendido. Algunas aperturas son correctas, pero después vuelvo a comprar en lugar de vender y viceversa.


El código del indicador es sencillo

   double poi=Point();
   for(int i = limit-2; i>0; i--) {
      if(open[i+0] > close[i+0] && MathAbs(open[i+0] - high[i+0]) < 0.1 * poi)
         Dn[i] = high[i+0] + 30 * poi;
      if(open[i+0] < close[i + 0] && MathAbs(open[i+0] - low[i+0]) < 0.1 * poi)
         Up[i] = low[i+0] - 30 * poi;
   }


¿Por qué iba a añadir 0 a [i + 0]?

 
Aleksey Mavrin:

Por favor, aclare lo que no está claro. Después de leer esto, parece que la cuestión principal está resuelta y nos queda discutir lo obsoleto que es el 4)

No he tenido problemas después de insertar los plazos cargados así

Si necesita consultar el marco temporal rara vez y de forma irregular, entonces esta carga debería (pero no necesariamente si el gráfico está abierto) hacerse de nuevo antes de la comprobación, o dicha comprobación ayudaría

Gracias, esa es la cuestión. ¿Realmente el terminal da un error 4066 después de acceder a un marco temporal no actualizado a través de iTime? Me he encontrado con que iClose da información no actualizada en lugar de cero.

Razón de la queja: