Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1188
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
En general, a juzgar por su respuesta, no entiende realmente cómo funciona el programa. Así que parece una pregunta estúpida. Al igual que el comentarista anterior piensa que se detiene. Sólo por experiencia en programación en otros lenguajes creo que ejecuta su cuerpo en un bucle, y cuando llega un evento, se sumerge en él. Si el programa ejecuta su cuerpo en un bucle, eso explica por qué el programa está escrito de esa manera.
Cuando se produce un nuevo tick, el programa se inicia en el manejador OnTick(), se ejecuta hasta su finalización y se detiene. Con la llegada de una nueva garrapata todo se repite desde el principio. Si durante la ejecución del programa llega un nuevo tick, y el programa no ha terminado de procesar el tick anterior (sigue en marcha), entonces este tick se salta.
Los programas en MQL no tienen bucle. Tienen tres puntos de entrada - OnInit(), OnDeinit() y OnTick().
Al inicio, se ejecuta OnInit(), luego cuando se recibe un tick - OnTick(), cuando se termina la operación - OnDeinit().
También hay otros manipuladores. Pero es mejor que abras la ayuda en lugar de pedir a alguien que lo duplique aquí.
Hola. Mientras trabajaba en mi indicador encontré un error al reiniciar el terminal. Sobre la base de este error hice un pequeño código fuente para su prueba:
Si este ejemplo se lanza sobre un gráfico (o es el primer arranque del terminal tras el inicio del sistema) todo funciona bien. En el registro dice lo siguiente:
2020.06.24 21:05:50.773 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
2020.06.24 21:05:50.773 Loader::Loader bars: 140433
2020.06.24 21:05:50.773 Loader::Loader Error: 0
2020.06.24 21:05:50.773 Loader::Barras de carga (2): 140433
Pero si reinicio el terminal con este indicador me da error:
2020.06.24 21:07:34.963 Loader::Loader símbolo: EURUSD timeframe: PERIOD_H1
2020.06.24 21:07:34.963 Loader::Barras de carga: 0
2020.06.24 21:07:34.963 Loader::Loader Error: 4401
2020.06.24 21:07:34.964 Loader::Barras de carga (2): 140433
Símbolo y marco temporal inicializados ok
2020.06.24 21:07:34.963 Loader::Loader símbolo: EURUSD timeframe: PERIOD_H1
Pero iBars(symbol, timeframe) da 0 por alguna razón
2020.06.24 21:07:34.963 Loader::Barras de carga: 0
En este caso aparece el error 4401.
Pero iBars(Symbol(), Period()) funciona bien.
2020.06.24 21:07:34.964 Loader::Barras de carga (2): 140433
Al menos symbol = Symbol() y timeframe = Period() según los mensajes de registro (incluso durante el lag, cuando el terminal se reinicia). ¿Cómo es posible que iBars(symbol, timeframe), con símbolo y timeframe absolutamente correctos, dé cero, mientras que iBars(Symbol(), Period()) funciona bien, si los parámetros de las funciones son los mismos, según el registro?
¿Cómo abro una cuenta demo de MT4 en MetaQuotes Demo? Antes funcionaba sin problemas, ahora en la última página del diálogo dice: Registro, Espere un poco, por favor, y en este estado permanece inactivo indefinidamente, los campos con el login y la contraseña permanecen vacíos. No hay mensajes en el registro. He probado tanto la "demo" como la "real" y diferentes tipos de cuentas.
UPD Probé con un broker demo - lo mismo.
Cuando se produce un evento de "nuevo tick", el programa se inicia en el manejador OnTick(), se ejecuta hasta su finalización y se detiene. Con la llegada de una nueva garrapata todo se repite desde el principio. Si durante la ejecución del programa llega un nuevo tick, y el programa no ha terminado de procesar el tick anterior (sigue en marcha), entonces este tick se salta.
Los programas en MQL no tienen bucle. Tienen tres puntos de entrada - OnInit(), OnDeinit() y OnTick().
Al inicio, se ejecuta OnInit(), luego cuando se recibe un tick - OnTick(), cuando se termina la operación - OnDeinit().
También hay otros manipuladores. Pero es mejor que abras la ayuda en lugar de pedir a alguien que lo duplique aquí.
Gracias. Sí lo entiendo, es que la función está escrita en el cuerpo del programa. Tal vez no me di cuenta de que se llamaba en alguna parte.
¿Cómo podemos ver de qué está hablando? Danos un ejemplo.
¿Cómo podemos ver de qué está hablando? Danos un ejemplo.
Gracias. Sí, lo entiendo, es que la función está escrita en el cuerpo del programa. Tal vez se me haya escapado una convocatoria en alguna parte.
En mql4 las funciones se escriben en cualquier orden, arriba abajo no importa, puede parecer que funciona antes o después. No hay tal cosa en C++ donde todas las funciones pueden trabajar sólo en orden de escritura y si quieres llamarlo, debe ser definido antes del lugar de la llamada de lo contrario el programa se bloquea. El hombre me mostró cómo escribir funciones en diferente orden pero no recuerdo cómo hacerlo en C++.
Saludos. Por favor, ayúdenme. Tengo esta pregunta. ¿Lo he entendido bien? El programa se ejecuta desde el principio hasta el final, pero se detiene cuando se produce un evento, por ejemplo, un tick, la función ontick comienza a ejecutarse, luego termina su ejecución y el programa se vuelve a ejecutar desde el principio? Esta pregunta está relacionada con lo siguiente, ¿dónde escribo, por ejemplo, el tamaño del lote de negociación, en el cuerpo del programa o en la función ontick?
Miro el bot oficial, que es un ejemplo en el terminal, hay mucho cálculo se realiza en el cuerpo del programa, y no entiendo por qué así.
Mi lote se calcula así
está al principio del Asesor Experto... y lo pongo al final del código
Cuando la función OnTick llama a la variable Lots, entonces EA la encuentra y la recalcula.
@Artyom Trishkin
¿Eres moderador en este hilo?