Problemas de cierre, por favor, ayuda - página 3

 

Hola a todos
Con la ayuda de todos, el síntoma ha cambiado.
La sentencia ....if(OrderSelect(index, SELECT_BY_TICKET) ha sido cambiada por..SELECT_BY_POS. El código está lejos de ser correcto. El programa vende y cierra inmediatamente después de un pip. El resultado muestra que no hay SL o TP. Así que para una comprobación de cordura, he insertado en OrderSend el SL y el TP (500) una pieza. No hay cambios. Todas las ejecuciones están dentro de 1 o 2 pips. Esto se está poniendo interesante. ¡No estoy seguro de por qué, todavía! Más de mil ejecuciones ocurren en una barra de 4 horas.
Estaré investigando, pero cualquier ayuda será bienvenida.

 

Hola Ais
Acabo de postear para descubrir que has posteado antes que yo. ¿Qué tienes en marcha?

 

Hola de nuevo
Estoy tratando de reestructurar ligeramente el programa para una mejor comprensión de la lógica
Me gustaría que el programa para complacer a usted

 
Ais wrote >>

Hola de nuevo
Estoy tratando de reestructurar ligeramente el programa para una mejor comprensión de la lógica
Me gustaría que el programa por favor Usted

Hola Ais
Eres muy amable. Gracias. Su tiempo es precioso. El restyling estoy seguro de que será de su agrado.
He desbloqueado una parte del problema, desde mi último post. El programa se cerrará, pero no como yo quiero.
La clave del problema de cierre ha sido el hecho, de que no inicialicé correctamente el ATR.
Os mostraré el antes y el después de cerrar la posición de venta.

Then....if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2)
Ahora.....if (OrderClosePrice() >= OrderOpenPrice() + (40*Point)...Esto cerrará la posición de Venta

Esta no era la forma en que pretendía que el programa operara. Pero para probarlo inserté el nuevo código.
Ayuda a probar que el problema está dentro del ATR. Debe ser que no inicialicé correctamente el ATR.
Para seguir probando, intenté insertar el iATR en lugar de intentar construir una nueva variable llamada ATR.
Os muestro cómo he intentado codificarlo.

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point)

Esto tampoco funcionó.
Gracias de nuevo.
Espero su respuesta.
 

Hola Ais
Gracias por la sugerencia. La idea de utilizar 365 (anual) frente a mi_método, está bien tomada. Los propósitos de prueba con un marco temporal más corto
debe ser sólo por conveniencia.
Tengo mucho más que aprender. Finalmente he descubierto cómo insertar el ATR, sin embargo, no puedo multiplicar. Ejemplo sigue:

En este momento esto es lo que tengo......if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1)) // =Hard Stop
Esto funciona pero no es lo que quiero
Estoy trabajando en ...................if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2 ),
Esto no funciona. Espero que le demuestre a usted y a otros, como lo que tengo en mente. El iATR se multiplica por 2.
¿Alguna sugerencia para esto? Una vez que esto se resuelve, podría la mitad de la ATR para las posiciones de entrada también.

Hubo otra forma que intenté pero no funcionó...if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)

Gracias de nuevo por tu tiempo. Seguro que hay muchos que están llamando a tu puerta en busca de sabiduría.
Saludos
 

Hola Huckleberry,
Me quedé haciendo sólo la función de apertura.
Y ahora mismo estoy tratando de entender la lógica de la fijación de beneficios.
Faltan los Stops y las tomas en tu OrderSend(), está bien, pero la orden de cierre se ejecuta sólo en caso de pérdida.
Y me gustaría saber tu opinión sobre la comprensibilidad del nuevo estilo de programa, https://www.mql5.com/en/forum/124521/page2.
Adiós por ahora,
:)

 

Hola Ais
Gracias por su respuesta.
Permíteme explicar la razón por la que no hay StopLoss o TakeProfit.
Al no insertar el SL y el TP en el OrderSend, el SL se encuentra en una ubicación diferente, bajo la expresión....

si (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1)))

Aunque esto funciona, no es exactamente el SL adecuado. El ejemplo está en mi último post....

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2)

El cambio en el... iATR, en la expresión anterior puede cambiar de una barra a la siguiente. Al utilizar el OrderSend con SL y TP, no puedo aprovechar el cambio de turno.

Cada función funciona en este momento, sólo que tengo que aprender a ajustar las funciones.
Gracias por su observación y su pregunta.
Saludos

 

Está bien trabajar sin SL y TP.
Pero todavía necesitamos la condición decerrar la orden en caso de beneficio.
Por favor, eche un vistazo a la función renovada "iSignalClose",
https://www.mql5.com/en/forum/124521/page2.
Ahora es, por supuesto, la condición de SL virtual.
Pero todavía necesitamos la condición de TP virtual.
Esperando su respuesta.
:)

 

Inserté para el TP virtual lo similar con la condición SL, pero usando otro factor.
En el futuro será fácil y conveniente optimizar estos parámetros.

Para optimizar declare los parámetros deseables como "externos".
Ejemplo:


////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

Después de la optimización cambie los valores de los parámetros originales por los optimizados y elimine las declaraciones "externas".

Ejemplo de optimización para "A System: Campeonato 2008 Edición Final" también conocido como "ACB6", https://www.mql5.com/en/forum/112633/page7#276861:
Archivos adjuntos:
1e.txt  46 kb
1r.txt  49 kb