[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 166

 
Xaoss1990:

Señores profesionales, ¡necesito su ayuda de nuevo!

A continuación se muestra un fragmento de código encargado de cerrar las operaciones, pero la cuestión es que cuando no se ejecutan las órdenes pendientes no las borra, no consigo averiguar por qué. Pero cuando necesito cerrar una orden pendiente que ya ha sido ejecutada, todo va correctamente y si la orden no ha sido ejecutada entonces se queda colgada hasta que se ejecuta...

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
Magic = OrderMagicNumber();
orderticket = OrderTicket();

if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0) {
if (H1_BUY_5 == 0 || H1_BUY_1 == 0) {
OrderClose(orderticket, lots, Bid, 5, Yellow);
if (OrdersTotal() == 1) OrderDelete(orderticket, Brown);
}

}



Esta es la condición que selecciona sólo las órdenes de compra,

if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)

por lo que no hay manera de eliminar la orden pendiente

 
Roger:


Probablemente porque primero se calcula el lote y luego

Gracias, he cambiado el cálculo del lote, pero sigue sin funcionar.
 
Sancho77:
Gracias, he cambiado el cálculo del lote, pero sigue sin funcionar.


¿Cómo no funciona, qué dice en los registros?

Comprueba qué valores toma np, aquí

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
 
No hay mensajes de error en el cuaderno de bitácora. ¿Puedes mirar el código completo de EA? Debería cerrar 1/3 del lote si el stoploss ya se ha movido al punto de equilibrio por el arrastre.
Archivos adjuntos:
 
Sancho77:
No hay mensajes de error en el cuaderno de bitácora. ¿Puedes mirar el código completo de EA? Debería cerrar 1/3 del lote si el stoploss ya se ha movido al punto de equilibrio por el arrastre.

Oooooooo que desordenado está todo. En general, todo está mal, es más fácil tirarlo y escribir uno nuevo. Los parámetros se definen de forma incorrecta, las funciones se llaman de forma incorrecta, un montón de cálculos innecesarios. Es bueno para un tutorial sobre cómo no escribir código.
 
Roger:

En definitiva, todo está mal, es más fácil tirarlo y escribir uno nuevo. Los parámetros se definen de forma incorrecta, las funciones se llaman de forma incorrecta, un montón de cálculos innecesarios. Será bueno para un tutorial sobre cómo no escribir código.
Bien, empecemos por el principio)
 
Sancho77:
...Debería cerrar 1/3 del lote si se dispara un stop loss ya movido al punto de equilibrio por el arrastre.
Veo todo esto y pienso: ¿por qué emprender estas tareas si no estás seguro de lo básico? Este tipo de autoaprendizaje hace más bien que mal. La chispa del pensamiento se ahoga en un montón de errores.
 
granit77:
Veo todo esto y pienso: ¿por qué asumir estas tareas si no estás seguro de lo básico? Este tipo de autoaprendizaje hace más bien que mal. La chispa del pensamiento se ahoga en un montón de errores.

Probablemente, la intención es más perjudicial que buena.
 
Sí, una errata.
 

¡Por favor, aconséjennos, señores!

Imagínese la situación: se activa una parada, debido a la activación de la condición N-ésima. Pero después de un par de velas, la condición N-ésima ha caído. Con la ayuda de qué función se puede volver a abrir el trato después de que la condición N-ésima caiga. Es decir, hay que determinar que se activó un stop hace un número de barras, y como la condición N-ésima ha caído, ¡repite la operación!