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
Ahora se actualiza y se intenta resolver de nuevo. He puesto huellas en casi todas las líneas. Informaré de los resultados.
Aquí está la corrida con su inserto, en el momento en que se fijó el stop loss:
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 Posición larga por EURUSD a cerrar de stop-loss2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 -----------------Deal #63 sl 1.33328
2011.08.09 00:41:08 Core 1 2011.01.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 CSampleExpert::Trade
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 orden ejecutada vender 0.15 a 1.33328 [#63 vender 0.15 EURUSD a 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal performed [#63 sell 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal #63 sell 0.15 EURUSD at 1.33328 done (based on order #63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss activado comprar 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 vender 0.15 EURUSD a 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 Posición larga de EURUSD a modificar trailing
Coloco órdenes pendientes con una duración de 1 hora. Transcurrida una hora, las órdenes que no se han activado se cierran a la hora de su vencimiento. Si se cierran varias órdenes simultáneamente, y antes del cierre, la función HistoryOrdersTotal() tenía un valor distinto de cero, entonces pierde algunas órdenes. Por ejemplo, antes del cierre de 8 órdenes, la función tenía un valor de 4, pero después del cierre, tiene un valor de 10. Se han perdido dos órdenes.
¿Qué quiere decir con que "las órdenes se perdieron"? Hay que tener en cuenta que los mensajes que llegan a OnTrade() pueden llevar información sobre más de un evento comercial. Además, si se envían varios mensajes simultáneamente, al procesar el primer mensaje, la caché histórica puede haber cambiado ya, y se puede tener la sensación de "eventos perdidos".
Por favor, lea el artículo Eventos comerciales en MetaTrader 5:
Conclusión
Todas las operaciones en la plataforma comercial MetaTrader 5 son asíncronas, y el envío de mensajes sobre todos los cambios en la cuenta comercial se realiza de forma independiente, por lo que no hay que tratar de rastrear un solo evento según la regla "Una solicitud - Un evento comercial". Si se quiere determinar exactamente lo que ha cambiado después del evento Trade, hay que analizar todas las operaciones, posiciones y órdenes en cada llamada del manejador OnTrade y compararlas con el estado que teníamos antes de que apareciera el evento.He solicitado específicamente el valor de HistoryOrdersTotal(), que era igual a 4, antes de cerrar las órdenes. Después de cerrar 8 órdenes, el valor de HistoryOrdersTotal() debería haber sido igual a 12 (4 + 8), pero era igual a 10. He adjuntado un archivo de registro, en él podemos ver situaciones similares en más de una ocasión. También he adjuntado el Asesor Experto, con el que se obtiene esto. Hazlo tú mismo y lo verás todo.
Intenta cambiar la función, ¿qué pasará?
El informe HTML de la ejecución del comprobador no siempre se guarda en un archivo.
Describa con más precisión. En qué circunstancias.
Describa con más precisión. En qué circunstancias.
Rara vez, aproximadamente una de cada 20-30 pruebas - abrir la pestaña "Resultados
hago clic en guardar informe XML - obtengo el archivo de informe, ¡todo está bien!
haga clic en guardar informe HTML - aparece la ventana para guardar el archivo, se cuelga con la ProgressBar vacía durante un rato (brevemente), luego la ProgressBar se llena rápidamente y la ventana se cierra... Pero no se crea ningún archivo de informe.
No puedo especificar un patrón de cuándo ocurre esto exactamente.
Intenta cambiar la función, ¿qué pasará?
La clave es que"hay que analizar todas las operaciones, posiciones y órdenes en cada llamada al gestor OnTrade y compararlo con el estado en el que estaba antes de aparecer" . En el ejemplo de que estamos considerando, con órdenes pendientes, esto sólo se aplica a las órdenes en el historial. Para evitar la pérdida de pedidos, yo cambiaría el código de esta manera:
Introduce una variable global int oldHistoryOrders; y en Ontrade, algo así:
No es así como trabajo con OnTrade() tal y como lo has descrito. En mi código adjunto, he eliminado todo, dejando sólo la parte que resalta el error de la función. Prácticamente no tengo bucles en mi EA. El EA maneja un solo símbolo en un solo tick. Por lo tanto, no necesito ciclos. Procesé todos los símbolos dentro de los 12 ticks.
PS: OnTrade() me informa de un evento de comercio. Y qué evento ha ocurrido es definido por mis funciones sin bucles.