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

 

¿Qué te parece esto?

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
   if(tc>50 && res*3<_sp) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<50) return(false);
   return(res>_sp?true:false);
}

De nuevo la trampa, si ejecutas el código durante el rollover y no antes, escribirá un spread enorme de 50 ticks y esta línea no tiene sentido.

¿Cómo arreglar el código?

 
Vitaly Muzichenko:

¿Qué te parece esto?

De nuevo la trampa, si ejecutas el código durante el rollover y no antes, escribirá un spread enorme de 50 ticks y esta línea no tiene sentido.

¿Cómo arreglar el código?

La lógica no es buena. Por qué exactamente la media de 50 ticks con un contador a longmax, que puede durar mucho tiempo.

Hay una dispersión declarada en las propiedades del símbolo. Debe ser introducido inicialmente por una entrada. Y si no se ingresa, se recibe. Y si obtenemos un aumento del diferencial, lo consideramos erróneamente como media. Necesitamos el valor medio en un rango bastante corto para detectar el cambio.

Si hay un spread intradía, lo comparamos en cada tick y obtenemos el valor medio al necesario. La cuestión es que no podemos calcular la media sin recordar los valores intermedios. Yo uso así, memorizo todos los valores, y cuando obtengo el último valor más uno, lo sumo a la suma y le resto el primero, y cambio de numeración (en la matriz A(n) = A(n+1)). Es más barato que marcar el contador a valores enormes. Y hasta 10 - 20 valores utilizo variables.

No sé qué es más caroSymbolInfoInteger o la diferencia entre Bid y Ask).

 
Valeriy Yastremskiy:

La lógica no es buena. Por qué exactamente la media de 50 ticks con un contador a longmax, que puede durar mucho tiempo.

Hay una dispersión declarada en las propiedades del símbolo. Debe ser introducido inicialmente por una entrada. Y si no se ingresa, se recibe. Y si obtenemos un aumento del diferencial, lo consideramos erróneamente como media. Necesitamos el valor medio en un rango bastante corto para detectar el cambio.

Si hay un spread intradía, lo comparamos en cada tick y obtenemos el valor medio al necesario. La cuestión es que no podemos calcular la media sin recordar los valores intermedios. Yo uso así, memorizo todos los valores, y cuando obtengo el último valor más uno, lo sumo a la suma y le resto el primero, y cambio de numeración (en la matriz A(n) = A(n+1)). Es más barato que marcar el contador a valores enormes. Y hasta 10 - 20 valores utilizo variables.

No sé, qué es más caroSymbolInfoInteger o diferencia entre Bid y Ask).

Sólo la palabra "Flotante", ese es el problema.


 
Vitaly Muzichenko:

Sólo la palabra 'Flotante', ese es el reto.


se emocionó un poco). Entonces la lógica de creer que los primeros valores son correctos. O espere 10 minutos, recoja las estadísticas de la suavidad del cambio de la dispersión durante este tiempo, encuentre el gráfico mínimo promedio de 50 o 100 ticks, y tómelo como promedio. Controla la hora de inicio, para que no caiga en el momento en que las centrales no estén funcionando. Si quieres una protección total de un tonto también)

 
Valeriy Yastremskiy:

(Me emocioné un poco). Entonces la lógica de creer que los primeros valores son correctos. O espere 10 minutos, reúna las estadísticas sobre la suavidad del cambio de la dispersión durante este tiempo, encuentre la parcela mínima media de 50 o 100 ticks y tómela como media. Controla la hora de inicio, para que no caiga en el momento en que las centrales no estén funcionando. Si en la protección completa de un tonto también).

Esto debería evitarse de alguna manera.

El algoritmo funciona, si sólo no ejecutamos el Asesor Experto en el rollover, y esto sucederá todo el tiempo después del fin de semana.

 
Vitaly Muzichenko:

Esto debería evitarse de alguna manera.

El algoritmo funciona, siempre y cuando no ejecutemos el Asesor Experto en un rollover, lo que ocurrirá siempre después del fin de semana.

Un control, que debería evitarse de todos modos, debería ser sustituido por algo. El tiempo entre los ticks. No es demasiado caro. Y si el tiempo entre ticks es de más de 10 segundos, algo va mal.

 
Vitaly Muzichenko:

Esto debería evitarse de alguna manera.

El algoritmo funciona, siempre y cuando no ejecutemos el Asesor Experto en un rollover, lo que ocurrirá siempre después del fin de semana.

Necesitamos hacer parámetros de tiempo separados para el rollover: inicio/fin.
Y no hacer nada en ese momento (excepto el comentario "rollover, esperar").

 
Taras Slobodyanik:

Tienes que hacer parámetros de tiempo separados para el rollover: inicio/fin.
Y no hacer nada en ese momento (excepto el comentario "rollover, esperar").

Había un parámetro "trabajar por tiempo", cambié el trato y empecé con los búhos - el trato se abrió en el rollover.

La hora de negociación resultó ser -1 gmt, en lugar del habitual +2gmt.

Por eso había un gran deseo de alejarse de la prescripción del tiempo.

 
Vitaly Muzichenko:

Había un parámetro "Trabajar por tiempo", cambié el trato y empecé con los búhos - el comercio se abrió en el rollover.

La hora de negociación resultó ser -1 gmt, en lugar del habitual +2gmt.

Por eso tengo muchas ganas de alejarme de la prescripción del tiempo.

¿Funcionaría sustituir el "valor del tiempo" por la diferencia entre el tiempo entrante (nuevo) y el último tiempo calculado?

Es decir, sabremos que el nuevo tiempo ha llegado:

-de new day

-de una nueva semana

-o con una diferencia superior a la especificada

 
Vitaly Muzichenko:

Había un parámetro "Trabajar por tiempo", cambié el trato y empecé con los búhos - el comercio se abrió en el rollover.

La hora de negociación resultó ser -1 gmt, en lugar del habitual +2gmt.

Por eso había un gran deseo de alejarse de la prescripción del tiempo.

Hacer si el comienzo de la semana "rollover, esperando" y no importa la hora del servidor
Razón de la queja: