[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 191

 
eddy:

el precio equivocado es 1,37197000.

el precio correcto es 1,37197 o 1,3719, según el DNS.

NormalizeDouble() se utiliza para establecer el número de dígitos después del punto decimal


Añadido NormalizeDouble() al precio en OrderSend(), ahora no hay error, ¡gracias!
 
artmedia70:

Esto es lo más fácil que se puede hacer:

Coloque las funciones propias fuera de la función start(), o al final de todo el código.



Gracias.
 
eddy:

Necesito recordar GetTickCount en el primer tick después de iniciar el indicador, pero el código de abajo no funciona - el terminal se cuelga. tal vez RefreshRates no funciona en absoluto en init()...

while(true){ if(RefreshRates()) { tik=GetTickCount(); break; } Sleep(1 ); }

¿Alguien tiene alguna idea de cómo implementar esto? Me gustaría hacerlo en el init, porque si establezco una bandera en el inicio - se comprobará cada vez
 
eddy:
¿Quién tiene alguna idea de cómo implementarlo? Quiero hacerlo en el init, porque si se hace una bandera en el inicio, se comprobará cada vez
Al declararuna variable global, asigne un valor a la misma y póngala a cero al inicio. Entonces tendrá valor inicial sólo en el primer tick, antes de asignar, y en todos los ticks posteriores - el valor asignado al inicio. Entonces todas las acciones, que se realizan una vez al inicio del EA, pueden ser transferidas al inicio.
 
eddy:

¿Podría aconsejarme cómo cargar el indicador en un gráfico de forma programada?

Existe la función bool ServiceLoadCustomIndicator(int hwndChart , ... ); //hwndChart- Descriptor del sistema de la ventana del gráfico, donde se carga el indicador.

No sé cómo conocer el descriptor de la ventana del gráfico.

Sólo necesito memorizar GetTickCount en el primer tick después del inicio del indicador, pero el código de abajo no funciona - el terminal se cuelga. ¿Tal vez en init() RefreshRates no funciona en absoluto...?

https://docs.mql4.com/ru/windows/WindowHandle
 
granit77:
Asignar un valor a la variable global en la declaración y restablecerla al inicio. Entonces tendrá el valor original sólo en el primer tick, antes de asignar, y en todos los ticks posteriores - el valor asignado al inicio. Entonces todas las acciones, que se realizan una vez al inicio del EA, pueden ser transferidas al inicio.

No necesito asignar nada a esta variable al inicio.

he decidido crear un indicador separado para memorizar los ticks en una variable global, cuyo valor será conocido por el indicador principal al iniciarse

Zhunko, ¿y si hay varias ventanas con el mismo TF y símbolo?

 
eddy:

No necesito asignar nada a esta variable al inicio. Sólo una vez para recordar el tick.

he decidido crear un indicador separado para memorizar los ticks en una variable global, cuyo valor será evaluado por el indicador principal al iniciarse

Zhunko, ¿y si hay varias ventanas con el mismo marco temporal y símbolo?

Comprobado hace tiempo (tú también puedes hacerlo) devuelve el último o el activo.
 
Zhunko: Devuelve el último o el activo.

es decir, si ninguno de ellos está activo, devuelve el último?

Sin embargo, no importa, creo que al añadirlo, el que debe ser añadido siempre está activo de todos modos.

 
eddy:

Sin embargo, no importa, creo que siempre está activo cuando lo añades de todos modos, donde quieras añadirlo

Sí. Exactamente. Tengo una función que devuelve los descriptores de todas las ventanas del mismo gráfico en orden Z. No lo incluyó en la biblioteca. Pero no servirá de mucho.
 
eddy:

No necesito asignar nada a esta variable al inicio.

Decidí hacer un indicador separado para memorizar los ticks en una variable global, cuyo valor reconoce el indicador principal al iniciarse

Lo que quería decir era esto:
bool FirstStart=true;

int start(){

    if(FirstStart){
      if(RefreshRates()) tik=GetTickCount();
      FirstStart=false;
    } 
}