Pregunta OrderModify() - página 3

 

Simón,

Estoy tratando de pensar cómo podría hacer esto, pero no se me ocurre nada. Estoy rastreando el diccionario en el MetaEditor en busca de posibles rutas. Estoy considerando el uso de las funciones OrderSymbol() y OrderSelect() en conjunto. Si me dan una opción para una pista, obviamente la tomaré. ¿Cuál es la pista? ;) Considero esto más una discusión que un reto. Si lo consideras un reto, aceptaré que no haya pistas. Confío plenamente en mi capacidad.

Gracias.

 

¿Por qué usar MarketInfo() ? para decir qué ?


Antes de que puedas codificar esto necesitas averiguar cómo hacerlo y luego ser capaz de expresar eso usando un lenguaje simple, no código.


El código necesario para cumplir este requisito contiene muchos aspectos de lo que necesitabas hacer con el código que pusiste en la Base de Código.


Es hora de ir a la cama para mí ahora ... así que aquí está una pista para empezar, usted tiene múltiples órdenes, por lo que necesita hacer un bucle a través de todos ellos para encontrar la correcta ... o tal vez más de uno, cubrir tantas opciones como usted puede ver.

Si no puedes encontrar la manera, házmelo saber y te daré lo que creo que es una solución y la publicaré... entonces puedes leerla, entenderla y destrozarla y pedirme que justifique cualquier parte que creas que es incorrecta o que no es necesaria.

De cualquier manera estoy convencido de que aprenderás en el proceso.

 

Simon,

Richard Bhauer me envió una versión revisada de lo que publiqué antes. Definitivamente NO es mi estilo de codificación preferido, pero creo que es impresionante. Pensé en compartirlo contigo para ver si este código tiene alguna conexión con un método que estás promoviendo para la selección y el cierre de órdenes. Gracias de nuevo a Richard. También, una razón por la que pensé en probar el OrderSymbol() fue porque he escrito EAs usando múltiples ordersends de OrderSend("GBPUSD"...); o cualquier par de divisas. Asumí, que podría simplemente intentar un proceso similar para cerrar órdenes. Aparentemente, el trabajo de seleccionar la orden (para cerrarla) se hace dentro de la función OrderSelect(). En el post anterior, mencionaste como pista, intentar ejecutar un bucle para localizar el número de ticket correcto (estoy suponiendo que el bucle se ejecuta primero y cuando se encuentra el ticket, baja al siguiente bloque de código que contiene en primer lugar la función OrderSelect(). Dentro de la función OrderSelect() estaría la variable utilizada en el bloque de código anterior del bucle para encontrar el número de billete correcto. La función OrderSelect() utilizaría la variable para seleccionar el billete. Una vez seleccionado el billete, todo lo demás es bastante sencillo. Leeré tu respuesta por la mañana.

Gracias.

Archivos adjuntos:
 
WhooDoo22:

Aparentemente, el trabajo de seleccionar la orden (para cerrarla) se realiza dentro de la función OrderSelect().

Lea la documentación de las siguientes funciones, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() todas ellas tienen lo siguiente:Nota: La orden debe ser previamente seleccionada por la funciónOrderSelect().

OrderClose() no tiene esta declaración porque usted pasael número de ticket a OrderClose() como primer parámetro. . . con todas las funciones listadas arriba no lo hace, así que para usarlas primero tiene que seleccionar la orden que le interesa, ese es el trabajo de OrderSelect() . . luego puedes encontrar su tamaño de posición con OrderLots() o su precio de apertura con OrderOpenPrice(), pero primero tiene que ser seleccionada.


Debe captar este concepto y entenderlo. . . . .

WhooDoo22:

En el post anterior, mencionaste como pista, intentar ejecutar un bucle para localizar el número de entrada correcto (supongo que primero se ejecuta el bucle y cuando se encuentra la entrada, se baja al siguiente bloque de código que contiene en primer lugar la función OrderSelect(). Dentro de la función OrderSelect() estaría la variable utilizada en el bloque de código anterior del bucle para encontrar el número de billete correcto.

¿Cómo vas a encontrar el número de billete correcto desde dentro de un bucle? no sabes qué número de billete es el correcto... ¿qué información tienes que puedas utilizar?
 

Simon,

Las siguientes funciones, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() deben ser seleccionadas previamente por la función OrderSelect().

La función OrderClose() no requiere ser seleccionada previamente por la función OrderSelect() porque la función OrderClose() pasa el número de ticket como primer parámetro.

El propósito de OrderSelect() es seleccionar un pedido.

Conceptos entendidos, revisaré la documentación.

Como se puede encontrar..

RE: Todavía estoy trabajando en esto.

Gracias

 

Simón,

Parece que sigues señalando el "número de billete". Lo entiendo. Sin embargo, sólo conozco dos formas de aislar los tickets mediante la función OrderSelect(). Puedo usar la forma "Order pool", donde no hay una variable específica de número de ticket o puedo usar la otra forma, donde puedo usar una variable específica de nombre de ticket "ticket", "bababab22", "lambchops", cualquier cosa, para aislar el ticket. Creo que usar la manera "Order pool" es lo más práctico, así que estoy considerando usar esta función de esta manera. Me gusta.


También, hojeé la revisión de Robert y noté que cuando cerró órdenes, simplemente usó la función OrderSelect(), (la que se selecciona de un pool de órdenes) y la única condición "if" usada además de la obvia señal de cierre fue el tamaño del lote y si la orden era de compra/venta. Eso era todo. Me gusta, pero esto no es actualmente la tarea. En esta tarea, si claro, podría escribir lo mismo, pero no se aprendería nada. Lo que es difícil actualmente es ¿Cómo puedo aprender lo que es que desea enseñar, si no sé lo que está tratando de enseñarme. Creo que si pudieras ser más directo con tus pensamientos, podría captar lo que deseas compartir con mayor rapidez. Intentaré ser más comprensivo.

Gracias.

 
WhooDoo22:

Simon,

Parece que sigue señalando el "número de billete". Lo entiendo. Sin embargo, sólo conozco dos formas de aislar los tickets mediante la función OrderSelect(). Puedo usar la forma "Order pool", donde no hay una variable específica de número de ticket o puedo usar la otra forma, donde puedo usar una variable específica de nombre de ticket "ticket", "bababab22", "lambchops", cualquier cosa, para aislar el ticket. Creo que usar la manera "Order pool" es lo más práctico, así que estoy considerando usar esta función de esta manera. Me gusta.

En este caso no puedes almacenar el número de ticket en una variable ya que las órdenes se colocan manualmente, por lo que el código no conoce ningún número de ticket hasta que lo descubre, por lo que sólo puedes utilizar la primera opción utilizando un bucle y OrderSelect().

Guardar los números de los tickets es un gran inconveniente y debe evitarse a menos que deba hacerlo, lo que significa que no hay manera posible de evitarlo... ¿por qué? porque su código debe ser capaz de recuperarse de un reinicio de MT4, por lo que significa guardar la información sobre los tickets en archivos e idealmente copiar los archivos a un segundo PC para la cobertura de la copia de seguridad adicional. Luego, cuando el código se reinicia tiene que leer el archivo obtener los números de los tickets y tratar de continuar desde donde lo dejó... . este tipo de complejidad no es necesaria para la mayoría de la gente, pero a menudo piensan que guardar los números de los billetes es la opción más simple . . . y que realmente no necesitan guardar la información en archivos, etc, etc . . luego cuando todo va mal desearían haberlo hecho.

OK, codifiqué mi versión del código para cumplir con mi requisito, añadí algunas comprobaciones para detectar múltiples órdenes USDJPY y modificar y cerrar todas las órdenes USDJPY . . aquí hay algunas capturas de pantalla para mostrar cómo fue la versión final.


Las órdenes que coloqué manualmente .

Todos los pedidos

Las órdenes de USDJPYi que mi código modificó (nótese el TP & SL) y cerró, y también el número de Ticket. Nótese también la mezcla de órdenes de Compra y Venta.

Órdenes cerradas USDJPYi

El resto de órdenes...

Pedidos restantes

 

Simon,

En este caso no puedes almacenar el número de ticket en una variable...

RE: Así que usted va con la ruta "pool de pedidos" para este ejemplo, ¿correcto?

// order pool example

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

Guardar los números de los tickets es un gran inconveniente...

RE: De acuerdo.

guardando la información de los tickets en archivos e idealmente copiando los archivos a un 2º PC para una cobertura de seguridad adicional...

RE: Sí, pero guardar la información sobre los tickets en archivos, es un grupo separado de bloques de código para mi situación actual. Yo no empezaría a codificar esto hasta que los fundamentos estén escritos.

He codificado mi versión del código para cumplir con mi requisito...

RE: Si, puedo ver eso. Parece bien. :)


Después de completar esta tarea, continuaré con el volumen II. No se va a escribir solo;)

Gracias.

 
WhooDoo22:

Simon,

En este caso no puedes almacenar el número de ticket en una variable...

RE: Así que usted va con la ruta de "pool de pedidos" para este ejemplo, ¿correcto?


¿Hay otra opción?
 

Simon,

No, no que yo sepa. Parece que sólo hay dos opciones y esta opción parece la mejor para el volumen II. Además, parece menos complicada, y eso no me molesta en absoluto ;)

Entonces, volviendo a esta tarea, entiendo que usaste el método de pool de órdenes para seleccionar la orden en el par us djpy, pero ¿qué condición usaste para aislar la orden en usdjpy?

Gracias.

Razón de la queja: