Errores, fallos, preguntas - página 2219

 
fxsaber:


Resultado enForexTimeFXTM-Demo01


El script abre y cierra posiciones hasta que detecta una "orden fantasma", ni entre las actuales ni en el historial. ¿Debo considerarlo un error o una característica de la plataforma?


El guión está escrito de tal manera que pueden abrirse varios puestos debido a este matiz. Pero no impide que se reciba una "orden fantasma".

No quiero ser nerd, pero las expresiones como estas:

(ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE))

Puede que usted recuerde de memoria todos los valores numéricos de un enum determinado y en qué orden van, pero otras personas pueden no conocer estas tripas. No debería manejar un enum de esta manera. La brevedad es ciertamente la hermana del talento, pero sólo si no daña la calidad.

Y hablando del tema que nos ocupa, se debe comprobar la posición que se va a abrir en order.deal, no en result.order. Respectivamente, se debe encontrar entre las posiciones, no entre las órdenes, ¿no es así?

 
Alexey Navoykov:

La brevedad es, por supuesto, hermana del talento, pero no en detrimento de la calidad.

Parece ser una operación común de MQL.

Y hablando del tema que nos ocupa, para la posición que se va a abrir se debe comprobar el orden.deal, no el resultado.order, por lo que se debe buscar entre las posiciones, no entre las órdenes, ¿no es así?

La orden inicial que se envía inmediatamente después de OrderSend podría no encontrarse en ningún sitio. La posición es muy posterior a la orden.


ZZY En el código, he dejado a propósito el comentario con el lenguaje más comprensible del algoritmo de comercio - MQL4.

 
fxsaber:

El pedido original que se envía inmediatamente después de OrderSend puede no estar en ningún sitio. La posición es muy posterior a la orden.

No se trata de eso, de hecho, según la documentación, OrderSend no tiene que recibir ningún ticket:

Cuando se envía una orden de mercado (MqlTradeRequest.action=TRADE_ACTION_DEAL) el resultado exitoso de la función OrderSend() no significa que la orden se haya ejecutado (se han ejecutado las operaciones correspondientes). En este caso true sólo significa que la orden se ha colocado con éxito en el sistema de comercio para su posterior ejecución. El servidor de operaciones puede rellenar los valores delos campos de resultadosen laestructura de resultados devuelta, si estos datos le son conocidos en el momento de la generación de la llamada OrderSend(). En el caso general, el evento o eventos de tratos correspondientes a una orden pueden ocurrir después de que la respuesta de la llamada OrderSend() haya sido enviada. Por lo tanto, para cualquier tipo de solicitud de comercio, al recibir el resultado de OrderSend(), debe comprobar primero el código de retorno del servidor de comercioretcode y el código de respuesta del sistema de comercio externoretcode_external(si es necesario) disponibles en laestructura deresultados devuelta.

Por lo tanto, no podemos prescindir de OnTradeTransaction en ningún caso.

Así, resulta que no hay operaciones comerciales sincrónicas garantizadas en MQL5.

 
Alexey Navoykov:

En realidad no importa, porque según la documentación, OrderSend no está obligado a recibir ninguna entrada:

Por lo tanto, OnTradeTransaction debe comprobarse en cualquier caso.

En cualquier caso, no tienes que comprobarlo. Sólo es opcional.

Un Result.order distinto de cero después del OrderSend síncrono nos indica siempre que se ha recibido una respuesta del servidor de comercio con una orden registrada en él. Este billete viene exactamente del servidor. Y si OrderSend tiene éxito, este ticket siempre se recibe.

Sin embargo, parece que el fastidio no se debe a OrderSend, sino al momento de aceptar la orden en una operación. Aunque existeORDER_STATE_REQUEST_ADD para estos casos. De todos modos, espero una respuesta de MQ. En mi opinión, se trata de un error cuando hay una orden en el servidor de comercio, pero después del OrderSend sincrónico en el terminal no se dice nada al respecto.

 
fxsaber:

De todos modos, espero una respuesta de MQ. En mi opinión, se trata de un error, cuando hay una orden en el servidor de comercio, pero tras el OrderSend sincrónico en el terminal no hay rastro de ella.

Digo más, habría que pedir a los desarrolladores que garanticen el sincronismo total de OrderSend, tanto en el terminal como en el servidor. De lo contrario, si no se garantiza el sincronismo de ejecución, ¿para qué necesitamos esta función? Para eso ya existe OrderSendAsync.

 
Dmitriy:

Hola. Hoy he actualizado a la versión 1860 y mientras optimizaba el Asesor Experto me he encontrado con este problema:

El retraso entre pases es de 1 minuto. ¿Puede indicar cuál puede ser el problema?

p.d. Antes de la actualización todo funcionaba como un reloj.

Por casualidad, ¿utilizas la función Bares?
Si es así, vea esto.

 

Sólo una pregunta:

¿Tal vez tenga sentido hacer archivos comunes? Lo único que me molesta es el constante cambio de nombre de mq4 y mq5. En relación con los proyectos, estaba pensando, tal vez debería hacer una extensión común como mq ?

Y puedes simplemente copiar el código de un terminal a otro sin necesidad de editar las extensiones...

 
Vladimir Pastushak:

Sólo una pregunta:

¿Tal vez tenga sentido hacer archivos comunes? Lo único que me molesta es el constante cambio de nombre de mq4 y mq5. En relación con los proyectos, estaba pensando, tal vez debería hacer una extensión común como mq ?

Y puedes simplemente copiar el código de un terminal a otro sin necesidad de editar las extensiones...

Y que prohíbe escribir estos códigos en archivos mqh y conectarlos usando (#include). Eso es lo que he estado haciendo durante bastante tiempo.

 
Konstantin Nikitin:

Y que prohíbe escribir estos códigos en archivos mqh y conectarlos con (#include). Lo que he estado haciendo durante bastante tiempo.

se conecta, cambio las extensiones ... vecinos.

 
Alexey Navoykov:

Diré más, deberíamos pedir a los desarrolladores que se aseguren de que OrderSend es totalmente síncrono, tanto en el terminal como en el servidor. De lo contrario, si no se garantiza la ejecución síncrona, ¿para qué necesitamos esta función? Ya existe OrderSendAsync para este propósito.

A ver si lo entiendo. Sincronización de la contabilización de órdenes en el sistema de negociación de la plataforma y en el propio terminal.