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

 
Mikhail Mishanin:

¿Si sustituimos el "valor del tiempo" por la diferencia entre el nuevo tiempo y el último calculado?

Es decir, sabremos que hay un nuevo tiempo:

-de un nuevo día

-de una nueva semana

-o con una diferencia superior al tiempo especificado.

No tengo ni idea de cómo aplicar esto.


En la captura de pantalla el rollover y la ampliación del spread a las 22-00, en la mayoría de las otras operaciones a las 00-00, es 1 hora después - ampliación del spread.

¿Cómo puedo averiguar programáticamente cuándo es el rollover, sin limitar el programa a la hora en los parámetros de entrada?

---

P.D. Este código se comporta bien, pero con la condición de que se ejecute 500 ticks antes del rollover

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
  // Comment( res,"=",tc );
   if(tc>500 && res*3<_sp) return(false); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

No tengo ni idea de cómo aplicar esto.


En la captura de pantalla el rollover y la ampliación del spread a las 22-00, en la mayoría de las otras operaciones a las 00-00, es 1 hora después - ampliación del spread.

¿Cómo puedo averiguar programáticamente cuándo es el rollover, sin limitar el programa a la hora en los parámetros de entrada?

---

P.D. Este código se comporta bien, pero con la condición de que se ejecute 500 ticks antes del rollover

La razón de la ampliación de los diferenciales al negociar es la apertura de la sesión de negociación, es decir, el "volcado" de un gran número de órdenes para su procesamiento, y la incertidumbre de cómo (a qué precio) se "liquidará" todo. La negociación asegurará y ampliará el diferencial. Sólo tienes que retrasar el tiempo desde el final/comienzo de la sesión de negociación.

 
Mikhail Mishanin:

La razón de que el diferencial se amplíe al negociar es la apertura de la sesión de negociación, es decir, un gran número de órdenes que se están procesando y, por lo tanto, la incertidumbre de cómo (a qué precio) se "liquidará" todo. La negociación asegurará y ampliará el diferencial. Sólo tienes que reservar el tiempo desde el final/comienzo de la sesión de negociación.

Sí, pero no está en la especificación del instrumento.

Ahí es donde el vuelco es a las 10:00 p.m.

Y este es el rollover a las 00-00.


 
Vitaly Muzichenko:

Sí, pero no está en la especificación de la herramienta

TimeCurrent()-TimeGMT()
 

Esperemos que la versión final tenga todo en cuenta

MqlDateTime dt;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0, res=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);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Esperemos que la versión final tenga en cuenta todos los

dos variables

datetime daLAST=0;

datetime daOLD=0;


En cada función que puede "operar", es decir, puede obtener el tiempo del tick

daOLD = daLAST;

daLAST= "tiempo de tic"

Si ( daLAST - daOLD > "time gap") - se ha iniciado una nueva sesión, ha habido un desfase temporal

{

/Guardar, usar y cancelar esto como quieras

}

 
Mikhail Mishanin:

dos variables

datetime daLAST=0;

datetime daOLD=0;


En cada función que puede "operar", es decir, puede obtener el tiempo del tick

daOLD = daLAST;

daLAST="tiempo de tic"

Si ( daLAST - daOLD > "time gap") - se ha iniciado una nueva sesión, ha habido un desfase temporal

{

/Guardar, usar y cancelar esto como quieras

}

Hay algunos pares y dilemas en los que la sesión asiática puede no tener un tick hasta varios minutos, con un tiempo de rollover de 21-59 a 22-01, que es más rápido que la llegada del tick en Asia.

 
Vitaly Muzichenko:

Hay algunos pares y dillings en los que en la sesión asiática puede no haber ningún tick hasta varios minutos, con tiempo de rollover del 21-59 al 22-01, es decir, más rápido que la llegada del tick en Asia.

Entonces, volvemos a la casilla de salida.

¿cuál es el objetivo? saltar las operaciones con un diferencial exorbitantemente ampliado, ¿no?

Entonces, probablemente podamos ignorar el tiempo y analizar el diferencial en sí.

si Ask - Bid > "umbral" - activar el seguimiento/acumulación.

siAsk - Bid < "umbral" - desactivarlo o también acumular.

A mí también me parece que una "vaca" así me va a venir bien, voy a recoger algo así, va a recoger estadísticas...


Y si no hay una garrapata fresca durante algunos minutos, será más razonable omitir la(s) primera(s) en el comercio.

Las estadísticas deben recogerse en pares y dillings específicos, porque cualquier "curvatura" puede funcionar tanto en "-" como en "+".

 
Mikhail Mishanin:

volvamos al principio entonces.

¿cuál es el objetivo? saltar las operaciones con un diferencial exorbitantemente ampliado, ¿no?

Entonces, probablemente podamos ignorar el tiempo y analizar el diferencial en sí.

si Ask - Bid > "umbral" - activar el seguimiento/acumulación.

siAsk - Bid < "umbral" - desactivarlo o también acumular.

A mí también me parece útil una "vaca" así, voy a recoger algo así, va a recoger estadísticas...


Y si no hay una garrapata fresca durante algunos minutos, será más razonable omitir la(s) primera(s) en el comercio.

Las estadísticas deben recogerse para pares y dilingües particulares, porque cualquier "giro" puede funcionar como un "-" o un "+".

Todo lo que has descrito lo hace el código de arriba, excepto el amarillo - creo que es redundante y no del todo correcto. De alguna manera nunca se reunió, que el vuelco era alguien en otro momento, 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 puedas cambiar 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);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

Todo el mundo está a la misma hora - 10pm GMT, aunque podría estar equivocado.

No te equivocas.

Razón de la queja: