Mi EA hace una doble entrada - página 10

 
angevoyageur: No sé si entiendo lo que quieres decir. Este problema que estamos hablando en este tema no es causado por una mala codificación sino por un mal diseño en mql5 (es mi opinión, o tal vez es simplemente un error?). ¿A qué te refieres con "múltiples hilos de negociación"?

He vuelto a leer lo que consideras un mal diseño.

En el viejo mt4 estas clases no existen. El método normal de comprobación de Successful_Orders dentro es Ticket#==(-1) && GetLastError(). Nunca he visto un caso en el que su orden devuelva un ticket# válido y GLE=0. Pero en el siguiente tick, su OrdersTotal() sigue devolviendo 0.

Ahora ten en cuenta que no he revisado toda la documentación de mql5. Sin embargo, si dice que PositionSelect_Information no se actualiza hasta más tarde. Y alguien está usando PositionSelect para evaluar su lógica de entrada. Entonces esa persona debe esperar hasta que PositionSelect_Information se actualice antes de salir de la lógica de OrderSend.

Para lo del hilo... Me refería a los hilos múltiples frente a los hilos únicos para el envío de órdenes. Como en las órdenes simultáneas que se abren al mismo tiempo. Puede o no ser relevante aquí.

 
Ubzen:

He vuelto a leer lo que consideras un mal diseño.

Dentro de old-mt4 estas clases no existen. El método normal de comprobación de Successful_Orders dentro es Ticket#==(-1) && GetLastError(). Nunca he visto un caso en el que su orden devuelva un ticket# válido y GLE=0. Pero en el siguiente tick, su OrdersTotal() sigue devolviendo 0.

Ahora ten en cuenta que no he revisado toda la documentación de mql5. Sin embargo, si dice que PositionSelect_Information no se actualiza hasta más tarde. Y alguien está usando PositionSelect para evaluar su lógica de entrada. Entonces esa persona debe esperar hasta que PositionSelect_Information se actualice antes de salir de la lógica de OrderSend.

Para lo del hilo... Me refería a los hilos múltiples frente a los hilos únicos para el envío de órdenes. Como en las órdenes simultáneas que se abren al mismo tiempo. Puede o no ser relevante aquí.

La documentación sobre PositionSelect no dice nada sobre "no se actualiza hasta más tarde". Sólo dice que incluso si PositionSelect es cierto, la información sobre una posición puede ser obsoleta, que no está relacionado con su problema aquí.

Me tomaré el tiempo de hacer algunas pruebas cuando se abra el mercado para estar seguro de no decir nada estúpido, respuesta más completa después.

 
angevoyageur:

La documentación sobre Position Select no dice nada sobre "no se actualiza hasta más tarde". Sólo dice que incluso si PositionSelect es cierto, la información sobre una posición puede ser obsoleta, que no está relacionado con su problema aquí.

Me tomaré el tiempo de hacer algunas pruebas cuando se abra el mercado para estar seguro de no decir nada estúpido, respuesta más completa después.

K..... y por cierto, si el documento no dice nada entonces estoy totalmente de acuerdo contigo.

La pregunta que vamos a hacer al Service_Desk en última instancia es "¿por qué no se puede actualizar la Position_Information cuando trade.PositionOpen()==true?"

Probablemente tendrán una buena respuesta para nosotros .

 
angevoyageur:

No. Estaba pensando en eso... Probablemente sería útil que todos los afectados escribieran un ticket al ServiceDesk sobre este problema. Sin embargo, soy muy escéptico si MQ está dispuesto a cambiar este diseño. Pero podemos intentarlo.

La gente puede escribir a ServiceDesk y reportar el ticket# aquí. El mío es

Errores, MetaTrader 5 MQL, Abrir, Iniciar: 2013.12.23 19:08, #916435


También he informado a la mesa de servicio, #933192 | 2014.01.19 14: 44

 

MQ puede rediseñar fácilmente esto para tener una función de tiempo de espera?

Por ejemplo, si no hay respuesta, se producirá un error, algo así.

 
doshur:

MQ puede rediseñar fácilmente esto para tener una función de tiempo de espera?

Por ejemplo, si no hay respuesta, obtendremos un error, algo así.


Hicieron exactamente lo contrario. Cuando mql5 fue creado había un parámetro de tiempo de espera para la función como PositionSelect.

Pero lo quitaron después, ver el punto 9 aquí https://www.mql5.com/en/forum/53/page5#comment_14479

 

Estoy de acuerdo con los argumentos de un mal diseño, pero en mi opinión el principal problema de MQL5 fue adaptar un código exitoso basado en Forex para que funcione como tal con los mercados de valores (lo que es realmente una gran cosa).

Por ejemplo, varios mercados de valores utilizan el protocolo FIX como estándar, y para mí este protocolo de comunicación no es fácil de adaptar cualquier código o arquitectura.

De todos modos, creo que los chicos de MQ tuvieron un reto de tiempo, y tuvieron que crear MQL5 basado en MQL4, y no desde cero. Recuerdo que el campeonato de ese año se suspendió para que tuvieran más tiempo.

Así que, tal vez este tema puede ser un gran consejo para el futuro MQL6 y para una arquitectura realmente nueva desde cero, principalmente en lo que respecta a la resiliencia de las transacciones y las soluciones agnósticas para trabajar en cualquier mercado.

 
doshur:

MQ puede rediseñar fácilmente esto para tener una función de tiempo de espera?

Por ejemplo, si no hay respuesta, obtendremos un error, algo así.

Tradicionalmente, el TimeOut no significa que la orden no vaya a convertirse en una posición. Tendrás que esperar un periodo de tiempo prolongado... comprobando si se convierte en una posición... y acabarás suspendiendo la negociación si la orden no se ejecuta.

Creo que MQ estaría de acuerdo con figurelli en que esto es un error de programación. Porque las funciones sobre las que se construye el trade.PositionOpen establecen claramente que hay que comprobar otras cosas.


****** (Añadiendo agenda personal... puede dejar de leer en este punto) *******

Esta es la razón por la que no acoso a los nuevos programadores sobre las funciones y sus valores de retorno cuando les ayudo en mql_forum. No veo el sentido de decir que siempre se haga lo siguiente

if( OrderSend()<0 ) { Print( GetLastError() ); }

Esto se supone que es un trader automatizado ... podría estar fuera ... y lo que hace es Print()?

En mi mente, Error_Handling y Error_Reporting son 2_monstruos muy diferentes. Tratar de explicar las formas correctas de manejar un error podría tomar páginas y es muy personal para el comerciante cuántas veces debe volver a intentar o incluso si debe terminar el comercio.

**** Ahora no estoy diciendo que si un novato está codificando un EA y tiene problemas de comercio ... Que no deberían Print( GetLastError(); ) <- Esto debería ser obvio. Pero si voy a decirles que siempre Get_Error, entonces también debería estar diciendo que siempre Handle_Error. *** Fin del programa. ****

 
angevoyageur:


Hicieron exactamente lo contrario. Cuando mql5 fue creado había un parámetro de tiempo de espera para la función como PositionSelect.

Pero lo quitaron después, ver el punto 9 aquí https://www.mql5.com/en/forum/53/page5#comment_14479

¿Es hora de revivirlo?
 
doshur:
¿Es hora de revivirlo?

No lo creo. Una solicitud de negociación sincrónica tiene que ser sincrónica en todos los aspectos. Es tan simple como eso.

Aquí la petición es sincrónica pero luego hay que gestionar cosas asíncronas. Y no hay nada documentado al respecto.