[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 670

 
artmedia70:

¿Cuál es la probabilidad de que llegue un nuevo tick antes de que se completen todos los cálculos del EA actual? Me parece que sólo en este caso los datos serán viejos e irrelevantes.

He comprobado cuánto tiempo cuenta tu código - yo también, hace poco tenía mis dudas, es la velocidad de cálculo de MT4 suficiente para mi EA, resultó que es suficiente por ahora, mi código tarda unos 18 ms, es decir, en 1 segundo se comprueba 55 veces, los ticks vienen de 10 a 70 por minuto, si más de 50 ticks por minuto, significa que hay una vela

intente ver cómo funciona su código, así

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

aquí está el indicador que cuenta los ticks - para la reconciliación

Bueno, si tiene un precio de apertura, siento habérmelo perdido

OpnPrice =iOpen(NULL,PERIOD_M5,0); puede cambiar sólo en una barra cerrada - el código anterior con la condición if (counted != barM1) {

Archivos adjuntos:
 

¿Cómo cambiar el número de dígitos después del punto decimal del indicador iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) cuando se calcula en el cuerpo experto? El resultado se muestra con 4 (es decir, 0,0001), mientras que debería mostrarse con 5 (por ejemplo, 0,00012) para un análisis preciso. Y el terminal MT4 muestra valores de 5 dígitos en la ventana del indicador en el gráfico.

 
El operador NormalizeDouble( ) resolverá tus problemas.
 
Roger:
El operador NormalizeDouble() resolverá tus problemas.


Es decir, NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) dará como resultado el deseado 0,00012 ?

P.D. Añadido y probado - nada. La salida es sólo 0,00010, que son los mismos 4 bits...

 

No, no es del todo correcto, Roger.

IndicatorDigits() ver Boris. Pero debe insertarse en el propio indicador, porque se referirá a él y no al EA.

P.D. Otra cosa: esta función es adecuada sólo para el indicador para el cual usted tiene el código. Entonces será posible llamarlo mediante iCustom().

Y para los que se llaman "estándar" como iMACD(), no conozco la solución correcta.

 
pathfinder1:

Entonces, el resultado de NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) será el deseado 0,00000 ?

Sí, así es. ¿La frase clave estaba en el cálculo en el cuerpo del EA? Y aparentemente con el indicador estándar esto es imposible (((
 
pathfinder1:

¿Cómo cambiar el número de dígitos después del punto decimal del indicador iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) cuando se calcula en el cuerpo experto? El resultado se muestra con 4 (es decir, 0,0001), mientras que debería mostrarse con 5 (por ejemplo, 0,00012) para un análisis preciso. Y el terminal MT4 muestra valores de 5 dígitos en la ventana del indicador en el gráfico.

No debes cambiar nada, la precisión en los indicadores estándar está configurada al máximo (hasta 8 dígitos), has llegado a una conclusión errónea sobre la precisión de la salida de datos porque Print( ) da salida a 4 dígitos por defecto, en los cálculos (en la tripa de los Asesores Expertos por ejemplo) se utiliza la máxima precisión, necesitas dar salida al doble a través de DoubleToStr() como ejemplo:

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

y obtenemos esta salida:

 
ToLik_SRGV:

No necesitas cambiar nada, en los indicadores estándar la precisión está configurada al máximo (hasta 8 dígitos), has llegado a una conclusión errónea sobre la precisión de la salida de datos porque Print() da salida a 4 dígitos por defecto, en los cálculos (en la tripa de los Asesores Expertos por ejemplo) se utiliza la máxima precisión, para ver esto necesitas dar salida al doble mediante DoubleToStr(), como ejemplo:

y obtenemos una salida de este tipo:


¡Cierto, cierto, cierto! ¡! ¡! Anatoly - grandes elogios, me estaba colgando de eso.

La verdad de la vida es que "una cabeza es buena, pero dos es mejor" (cita)

 
ToLik_SRGV:

No es necesario cambiar nada, los indicadores estándar están ajustados a la máxima precisión (hasta 8 dígitos)


Así es, yo tenía la misma sospecha :)
 
Como a menudo ha sido el caso - la verdad está en la superficie)) admito mi culpa.
Razón de la queja: