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

 
Vitaly Muzichenko:

Todo lo anterior hace el código, excepto lo resaltado en amarillo, creo que es innecesario y no del todo correcto. Nunca he visto a nadie volcar a una hora diferente, siempre a la misma hora - 22-00 GMT, aunque podría estar equivocado.

Pero a menudo se ven rollos de diferente duración, algunos de 5 minutos, y otros un poco más de un minuto.

---

Revisa el código, tal vez cambies algo:

Así que y vincula todo a la hora del GMT. Consiguió la diferencia de la hora local y la hora del servidor, y se puede entender de inmediato en cuántos rollover. Y 5 minutos o 1 creo que no hay diferencia significativa. Tómate 5 minutos para todos.

 
Alexey Viktorov:

Por lo tanto, vincula todo a la hora GMT. Obtenga la diferencia entre la hora local y la hora del servidor, y podrá comprender inmediatamente la duración de la prórroga. Y 5 minutos o 1 creo que no es una diferencia significativa. Tómate 5 minutos para todos.

¿En qué sentido su opción es mejor o más fiable?

Si puedes, ¡muéstrame el código!
 
Vitaly Muzichenko:

¿En qué sentido el suyo es mejor o más fiable?

Tal vez no. No he seguido sus códigos. Sólo doy mi opinión.

 

Vitaly Muzichenko:

Si puedes, ¡muéstrame el código!

¿Estás fingiendo?

 
Alexey Viktorov:

Tal vez no sea nada. No he seguido sus códigos. Sólo doy mi opinión.

Aquí está todo en un solo puesto:

Es necesario filtrar la entrada del spread durante el rollover para que el EA no opere en el spread extendido.

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

Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

Vitaly Muzichenko, 2021.02.11 14:04

Nunca había encontrado un código así. De alguna manera nunca he visto que el rollover era alguien en un momento diferente, siempre todos en uno y el mismo - a las 22-00 GMT, aunque puedo estar equivocado.

Pero a menudo se ven rollos de diferente duración, algunos de 5 minutos, y otros un poco más de un minuto.

---

Revisa el código, tal vez cambies algo:

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false); // ролловер
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false); // собираем спред на 500 тиках
   return(res>_sp?true:false);
}

 
Vitaly Muzichenko:

Aquí está todo en un solo mensaje:

Necesitamos eliminar la entrada del spread durante el rollover para que el EA no opere en el spread extendido.


¿No hay comercio durante una hora completa?

   if(dt.hour==22) return(false); // ролловер

¿O has entendido algo mal?

 
Vitaly Muzichenko:

Aquí está todo en un solo mensaje:

Necesitamos filtrar la entrada del spread durante el rollover, para que el EA no opere en el spread extendido.


¿estamos prohibiendo hipotéticamente algún tipo de registro de difusión (archivo, base de datos) específicamente en el rollover?

 
Alexey Viktorov:

¿No hay comercio durante toda una hora?

¿O has entendido algo mal?

Así es, durante una hora completa después, el diferencial se amplía. Y antes del vuelco en 5 minutos también se ensancha en algunos lugares.

 
Alexey Viktorov:

¿No hay comercio durante toda una hora?

¿O he entendido algo mal?

Sin embargo, se puede establecer así:

void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",res );
   } else Comment( "false: ",sp,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  static int ts=0;
  static long tc=0;
  TimeGMT(dt);
   if(dt.hour==22 && res<_sp) return(false); // Если 1 час после ролловера спред упадёт до нормального - торгуем
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   if(tc<500) return(false);
   return(res>_sp?true:false);
}

Esto debería funcionar correctamente.

 
Vitaly Muzichenko:

Sin embargo, se puede prescribir de esta manera:

Eso debería funcionar.

Divertido) No debería)

Si la batalla es para - comercio con un spread normal, sólo hay que poner su "límite" en la entrada y sólo ignorar el comercio si el spread está por encima del límite.

Los diferenciales pueden ser estirados por medio de dillings sin que se produzca un vuelco.