Problema de entrada de órdenes múltiples para la cuenta real con un corredor específico - página 4

 
FinanceEngineer:

Hola

Sé que suena extraño. Cuando comprobaba el valor devuelto de OrderSend(request,result) en el código anterior, tenía el problema de los pedidos múltiples. Ahora en mi nuevo código, no compruebo el valor devuelto de OrderSend(request,result) ( pero aún así asigné el valor devuelto a alguna variable para evitar el error en la nueva compilación del terminal.


HolaFinanceEngineer, exactamente lo que te dije, sólo estás enmascarando el verdadero problema, ya que en mi opinión estás imprimiendo esto (###) en tu código anterior (el código devuelto 10008), y no la situación de ruptura.

if(!OrderSend(request,result) || result.deal==0 )
      {
         Print("OrderSend Code: ",result.retcode); // You are printing this (###) -> 10008
         ...
 
figurelli:

Hola Alain,

No me queda claro lo que necesitas saber, ya que sólo estamos hablando del nuevo código de FinanceEngineer, y un consejo sobre la prueba del código de retorno de OrderSend() que fue cambiado del código original.

Ten en cuenta que tanto su código original como el nuevo no tienen la prueba del código 10010, así que si es relevante para ti ¿por qué no has preguntado desde el primer post de él?

De todos modos, ¿puede explicar por qué se necesita el código 10010 de prueba para una política de llenado FOK?

Ya que no es la primera vez que veo que usted y otros moderadores hablan de ello, ¿conoce algunos casos en los que sea realmente necesario este código de prueba para las órdenes FOK (Fill Or Kill), que podría compartir con nosotros?

Gracias de antemano.

Supongo que también puedo hacer preguntas en este foro, y no sólo tiene que responder siempre. Simplemente eso.

Vemos mucho código aquí, probando el código devuelto (MqlResult) contra 10008 o 10009, pero ¿puede alguien explicar cuál es el verdadero significado de estos códigos, cuál es la diferencia entre "Orden colocada" y "Solicitud completada"? Parece que son los únicos dos códigos que no son de error, ¿verdad?

10010 es cuestionable, la documentación dijo:

10008

TRADE_RETCODE_PLACED

Orden colocada

10009

TRADE_RETCODE_DONE

Pedido completado

10010

TRADE_RETCODE_DONE_PARTIAL

Sólo se ha completado una parte de la solicitud

Pero que significa "Solo parte de la solicitud fue completada". Usted ha señalado que con la política de llenado de FOK, que probablemente no puede ser la apertura de 0,5 lotes si se solicita 1 lote (por ejemplo), pero ¿es el único significado?

Anteriormente usted escribió sobre el código 10010 :

No considero este código lo suficientemente seguro y a prueba de futuro y esto es sólo un ejemplo sobre la falta de código de retorno, así que por favor lea de nuevo.

¿Cuál puede ser el significado de esta frase? ¿"A prueba de futuro"? ¿"Suficientemente seguro" para ... ? "Falta de código de retorno", ¿qué es lo que falta? (y no es tan importante pero, "leer de nuevo" ¿qué?).

 
angevoyageur:

Supongo que también puedo hacer preguntas en este foro, y no sólo tener que responder siempre. Simplemente eso.

Vemos mucho código aquí, probando el código devuelto (MqlResult) contra 10008 o 10009, pero ¿puede alguien explicar cuál es el verdadero significado de estos códigos, cuál es la diferencia entre "Pedido realizado" y "Solicitud completada"? Parece que son los únicos dos códigos que no son de error, ¿verdad?

El 10010 es cuestionable, la documentación dice:

10008

TRADE_RETCODE_PLACED

Pedido realizado

10009

TRADE_RETCODE_DONE

Pedido completado

10010

TRADE_RETCODE_DONE_PARTIAL

Sólo se ha completado una parte de la solicitud

Pero que significa "Solo parte de la solicitud fue completada". Usted ha señalado que con la política de llenado de FOK, que probablemente no puede ser la apertura de 0,5 lotes si se solicita 1 lote (por ejemplo), pero ¿es el único significado?

Anteriormente usted escribió sobre el código 10010 :

¿Cuál puede ser el significado de esta frase? ¿"A prueba de futuro"? ¿"Suficientemente seguro" para ... ? "Falta de código de retorno", ¿qué es lo que falta? (y no es tan importante pero, "leer de nuevo" ¿qué?).

Al igual que la mayoría de la gente, aprendí la codificación MQL5 mirando el código de otras personas. Extrañamente para mí, hasta ahora no he visto ningún código que compruebe el código 10010. Sin embargo, podría valer la pena comprobar. Por si acaso.

Por lo que he visto, cuando compruebo el código 10008 solo, tengo la orden de doble entrada. Y cuando compruebo el código 10009 junto con la orden de doble entrada. Cuando compruebo tanto el código 10008 como el 10009, no obtengo la orden de doble entrada.

Pero sólo tengo curiosidad en términos de punto de vista práctico, si usted comprueba el código 10010 en su EA? Si la orden fue realmente parcialmente completada, entonces ¿cuál sería la manera eficiente de manejar este tipo de situación?

Probablemente pienso que la mayor parte de este problema de envío de órdenes podría ser tratado con la comprobación del volumen teniendo PositionGetDouble(POSITION_VOLUME) dentro de nuestro bucle. Sin embargo, no estoy seguro de que esto sea más eficiente que comprobar el código 10008 o 10009.

Si el servidor del broker está ocupado, entonces las posibilidades de no obtener el volumen correcto son tan grandes como las posibilidades de no obtener el código 10008 o 10009.

Saludos cordiales.

 
figurelli:

Hola Alain,

No me queda claro lo que necesitas saber, ya que solo estamos hablando del nuevo código de FinanceEngineer, y de un consejo sobre probar el código de retorno de OrderSend() que fue cambiado del código original.

Ten en cuenta que tanto su código original como el nuevo no tienen el código 10010 de prueba, así que si es relevante para ti ¿por qué no lo preguntaste desde el primer post de él?

De todos modos, ¿puede explicar por qué se necesita el código 10010 de prueba para una política de llenado FOK?

Ya que no es la primera vez que te veo a ti y a otros moderadores hablar de ello, ¿conoces algunos casos en los que es realmente necesario este código de prueba para las órdenes FOK (Fill Or Kill), que podrías compartir con nosotros?

Gracias de antemano.

Bueno, cuando posteamos en el foro MQL5.com suponemos que estamos hablando con gente que puede tener varios tipos de necesidades al codificar asesores expertos... así que en este caso, es obvio que puedes simplificar todo y pedir al usuario que codifique un asesor experto "más simple", una vez que sus necesidades no son tan "avanzadas" como podrías imaginar. Sin embargo, por lo que sé, hay varias situaciones en las que no se puede trabajar con la política de llenado de FOK.

Déjeme darle un ejemplo muy simple: suponga que trabaja con acciones y el volumen elegido es de 10.000 acciones. Ahora suponga que este mismo asesor experto trabaja con "reversiones", por lo que en alguna señal aleatoria usted podría tener que enviar una orden al mercado con un volumen igual a 20.000 acciones para ejecutar la llamada "reversión". En este caso, incluso los valores muy líquidos (por ejemplo, los valores brasileños de peso pesado PETR4 o VALE5) podrían no tener un volumen de compra o venta igual a 20.000 acciones en un momento dado. Entonces, en este caso, ¿cómo trataría esto dentro de su asesor experto? ¿Está realmente convencido de que la política FOK sería el mejor enfoque en este caso? ¿O trataría de considerar este código 10010 dentro de su asesor experto?

Como se ha dicho, cuando se trabaja con lotes pequeños todo el tiempo, entonces la política de llenado FOK podría ser su mejor solución. Sin embargo, a veces la gente tiene necesidades más "avanzadas"...

 
angevoyageur:

Supongo que también puedo hacer preguntas en este foro, y no sólo tener que responder siempre. Simplemente eso.

Vemos mucho código aquí, probando el código devuelto (MqlResult) contra 10008 o 10009, pero ¿puede alguien explicar cuál es el verdadero significado de estos códigos, cuál es la diferencia entre "Pedido realizado" y "Solicitud completada"? Parece que son los únicos dos códigos que no son de error, ¿verdad?

10010 es cuestionable, la documentación dijo:

10008

TRADE_RETCODE_PLACED

Orden colocada

10009

TRADE_RETCODE_DONE

Pedido completado

10010

TRADE_RETCODE_DONE_PARTIAL

Sólo se ha completado una parte de la solicitud

Pero que significa "Solo parte de la solicitud fue completada". Usted ha señalado que con la política de llenado de FOK, que probablemente no puede ser la apertura de 0,5 lotes si se solicita 1 lote (por ejemplo), pero ¿es el único significado?

Anteriormente escribiste sobre el código 10010 :

¿Cuál puede ser el significado de esta frase? ¿"A prueba de futuro"? ¿"Suficientemente seguro" para ... ? "Falta de código de retorno", ¿qué es lo que falta? (y no es tan importante pero, "leer de nuevo" ¿qué?).

Alain, no hay problema, no tienes que responder, ya que probablemente nunca encontrarás un caso, ya que esto es obligatorio en cualquier buen protocolo OMS.

También no es necesario hablar de por qué no preguntó después del primer post, ya que probablemente esto es off-topic.

De todos modos, tenga en cuenta que FOK es una política de llenado de edad, que MQ introdujo probablemente para hacer frente a la comunicación con OMS, por lo que se encuentra en todos los buenos protocolos de OMS, como FIX, por ejemplo(como este tema del foro desde el año 2009, antes de MT5 existe).

Así que, en mi opinión, no veo ninguna razón para preguntar sobre el código de retorno 10010 para una orden de llenado o de eliminación, y este es el punto, ya que esta regla es obligatoria y los corredores y los proveedores de OMS deben respetarla.

FIX Trading Community: // Fill or Kill Order
FIX Trading Community: // Fill or Kill Order
  • General Q/A
  • www.fixtradingcommunity.org
Have doubt regarding FoK order type. In my view if order is not filled a reject message should be sent by an exchange instead of cancel. Can someone confirm this? No, rejections are to convey that the requested action was not carried out. A FoK order not being filled does not fall in this category, it is rather "works as designed". It is...
 
Malacarne:

Bueno, cuando escribimos en el foro de MQL5.com suponemos que estamos hablando con gente que puede tener varios tipos de necesidades al codificar asesores expertos... así que en este caso, es obvio que se puede simplificar todo y pedir al usuario que codifique un asesor experto "más simple", una vez que sus necesidades no son tan "avanzadas" como se podría imaginar. Sin embargo, por lo que sé, hay varias situaciones en las que no se puede trabajar con la política de llenado de FOK.

Déjeme darle un ejemplo muy simple: suponga que trabaja con acciones y el volumen elegido es de 10.000 acciones. Ahora suponga que este mismo asesor experto trabaja con "reversiones", por lo que en alguna señal aleatoria usted podría tener que enviar una orden al mercado con un volumen igual a 20.000 acciones para ejecutar la llamada "reversión". En este caso, incluso los valores muy líquidos (por ejemplo, los valores brasileños de peso pesado PETR4 o VALE5) podrían no tener un volumen de compra o venta igual a 20.000 acciones en un momento dado. Entonces, en este caso, ¿cómo trataría esto dentro de su asesor experto? ¿Está realmente convencido de que la política FOK sería el mejor enfoque en este caso? ¿O trataría de considerar este código 10010 dentro de su asesor experto?

Como se ha dicho, cuando se trabaja con lotes pequeños todo el tiempo, entonces la política de llenado FOK podría ser su mejor solución. Sin embargo, a veces la gente tiene necesidades más "avanzadas"...

La explicación es pegajosa. Yo pensé lo mismo, ya que la mayoría de nosotros probablemente negociamos menos de 1 millón de dólares por cada operación. En un mercado de alta liquidez como el Forex, el cumplimiento parcial de la orden puede ser algo raro. Sin embargo, nunca digas nunca. Vivimos en un mundo probabilístico. Nada es seguro. Algún corredor tenso podría estar por ahí dividiendo 1 lote en 0,5. En términos de consideración práctica, si algún corredor no puede llenar 1 lote en cualquier momento, voy a encontrar otro corredor para el comercio.

Saludos.

 
Malacarne:

Bueno, cuando escribimos en el foro de MQL5.com suponemos que estamos hablando con gente que puede tener varios tipos de necesidades al codificar asesores expertos... así que en este caso, es obvio que se puede simplificar todo y pedir al usuario que codifique un asesor experto "más simple", una vez que sus necesidades no son tan "avanzadas" como se podría imaginar. Sin embargo, por lo que sé, hay varias situaciones en las que no se puede trabajar con la política de llenado de FOK.

Déjeme darle un ejemplo muy simple: suponga que trabaja con acciones y el volumen elegido es de 10.000 acciones. Ahora suponga que este mismo asesor experto trabaja con "reversiones", por lo que en alguna señal aleatoria usted podría tener que enviar una orden al mercado con un volumen igual a 20.000 acciones para ejecutar la llamada "reversión". En este caso, incluso los valores muy líquidos (por ejemplo, los valores brasileños de peso pesado PETR4 o VALE5) podrían no tener un volumen de compra o venta igual a 20.000 acciones en un momento dado. Entonces, en este caso, ¿cómo trataría esto dentro de su asesor experto? ¿Está realmente convencido de que la política FOK sería el mejor enfoque en este caso? ¿O trataría de considerar este código 10010 dentro de su asesor experto?

Como se ha dicho, cuando se trabaja con lotes pequeños todo el tiempo, entonces la política de llenado FOK podría ser su mejor solución. Sin embargo, a veces la gente tiene necesidades más "avanzadas"...

Hola Malacarne,

Lo siento pero esto es un off-topic, ya que como Moderadores no podemos confundir la realidad (lo que el usuario realmente publica) y las condiciones del what if.

En otras palabras, si el usuario pide algo y publica el código, y el código tiene la línea de abajo (como la primera y antigua), como Moderadores nuestra mentalidad debe considerar que está usando FOK.

request.type_filling=ORDER_FILLING_FOK;

¿No crees que es así? Si es que no, creo que tengo que revisar mis conceptos de búsqueda de errores de código y análisis de problemas.

En realidad, si no se utiliza FOK, como sus casos BM&FBovespa brasileños, mi mentalidad cambiará y 10010 código de retorno debe ser considerado, pero esto es absolutamente off-topic, y tal vez una mejor discusión al Foro Portugués.

De todos modos, gracias por compartir eso.

 
FinanceEngineer:

La explicación es pegajosa. Yo pensé lo mismo, ya que la mayoría de nosotros probablemente negociamos menos de 1 millón de dólares por cada operación. En un mercado de alta liquidez como el Forex, el cumplimiento parcial de la orden puede ser algo raro. Sin embargo, nunca digas nunca. Vivimos en un mundo probabilístico. Nada es seguro. Algún corredor tenso podría estar por ahí dividiendo 1 lote en 0,5. En términos de consideración práctica, si algún corredor no puede llenar 1 lote en cualquier momento, voy a encontrar otro corredor para el comercio.

Saludos.

En mi ejemplo estaba hablando de volúmenes alrededor de 200.000 USD... Así que, por lo que sé, varios de nosotros operamos con más de 200.000 USD por operación... :-)
 
FinanceEngineer:

Al igual que la mayoría de la gente, aprendí la codificación MQL5 mirando el código de otras personas. Extrañamente para mí, hasta ahora no vi ningún código que compruebe el código 10010. Sin embargo, podría valer la pena comprobar. Por si acaso.


HolaFinanceEngineer, no se ve porque probablemente estos casos son con respecto a la política de llenadoORDER_FILLING_FOK, como usted está utilizando también, por lo que, en mi opinión, esto no es necesario, como se explica en mis otros mensajes aquí.
 
figurelli:

Hola Malacarne,

Lo siento pero esto es off-topic, ya que como Moderadores no podemos confundir la realidad (lo que el usuario realmente publica) y las condiciones de what if.

Es decir, si el usuario pide algo y publica el código, y el código tiene la línea de abajo (como la primera y antigua), como Moderadores nuestra mentalidad debe considerar que está usando FOK.

¿No lo crees? Si no, creo que tengo que revisar mis conceptos de búsqueda de errores en el código y análisis de problemas.

En realidad, si no utiliza FOK, como sus casos de BM&FBovespa Brasil, mi mentalidad cambiará y el código de retorno 10010 debe ser considerado, pero esto es absolutamente fuera de tema, y tal vez una mejor discusión al Foro Portugués.

De todos modos, gracias por compartir eso.

Gracias por tu opinión... No es mi intención traer "confusión" a la mente de la gente.

Sin embargo, no creo que sea off-topic porque si no compruebas el código 10010 tu expert advisor podría saltarse esta posibilidad y enviar múltiples órdenes (totalmente relacionado con el tema, ¿no crees?)...

Eso es lo que estamos "intentando" alertar desde los dos últimos posts sobre este mismo tema...