Mi 1er robot no funciona con los SL y TP

 

He adaptado un robot para que realice lo siguiente:

1. Se activa EA manualmente según tendencia y EA abre inmediatamente una market order (p.e. BUY)

2. Si el mercado se va en contra de la tendencia elegida, el EA tomará nuevas market order al darse la condición de cierta cantidad de pips definidos paramétricamente (p.e. por cada 40 pips de baja , si es un buy) 

3. Para cada nueva market order generada el EA le define un SL y TP particular para esa orden (SL igual a menos 40 pips y TP más 40 pips ambos con respecto al nuevo precio de compra) 

4. Todo lo hace bien salvo que cuando genera la 2da market order para un par coloca perfectamente el nuevo SL y TP calculados para esta orden. Sin embargo, y he aquí el problema, no logro entender porqué este nuevo SL y TP también lo propaga a las ordenes anteriores para ese par. Es decir reemplaza para todas las ordenes tomadas para un par específico con el SL y TP de la última orden para ese par.

5. Agradeceré si alguien me puede ayudar, puedo compartir el código si es necesario. Llego a pensar que puede se una condición del sistema.

De antemano muchas gracias 

 
cavalos55:

He adaptado un robot para que realice lo siguiente:

1. Se activa EA manualmente según tendencia y EA abre inmediatamente una market order (p.e. BUY)

2. Si el mercado se va en contra de la tendencia elegida, el EA tomará nuevas market order al darse la condición de cierta cantidad de pips definidos paramétricamente (p.e. por cada 40 pips de baja , si es un buy) 

3. Para cada nueva market order generada el EA le define un SL y TP particular para esa orden (SL igual a menos 40 pips y TP más 40 pips ambos con respecto al nuevo precio de compra) 

4. Todo lo hace bien salvo que cuando genera la 2da market order para un par coloca perfectamente el nuevo SL y TP calculados para esta orden. Sin embargo, y he aquí el problema, no logro entender porqué este nuevo SL y TP también lo propaga a las ordenes anteriores para ese par. Es decir reemplaza para todas las ordenes tomadas para un par específico con el SL y TP de la última orden para ese par.

5. Agradeceré si alguien me puede ayudar, puedo compartir el código si es necesario. Llego a pensar que puede se una condición del sistema.

De antemano muchas gracias 

¿Estás en MQL5 o MQL4?

Si es en mql5 cada orden se convierte en una transacción de la misma posición, de manera que el precio de una posición es el precio medio ponderado por volumen de todas las órdenes ejecutadas para ese símbolo mientras está la posición abierta y SL y TP se colocan en relación a ese precio y no al de la orden que activas en cada momento.

En mql4 no es posible lo que cuentas si no es haciendo "modificación" en cada orden. 

 

José Miguel,

Muchas gracias por tus comentarios. Estoy con MQL4 y efectivamente la actualización para cada orden la realizo a través de una modificación al momento de la creación de cada orden. El código que utilizo para crear la orden (y modificarla) es el siguiente. Cualquier ayuda la agradeceré enormemente:

  //--- place market order 

          int ticket=OrderSend(Symbol(),OP_BUY,mylotsi,BuyPrice,slippage,0,0,"MyMEFx EA"+MagicNumber,555,0,clrGreen);

          if(ticket<0)

          {

          Print("OrderSend failed with error #",GetLastError());

          }

          else

          OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,ArrowsColor);

          Print("OrderSend placed successfully");

          //--- 

   return(0);

SL y TP los calculo previamente para cada orden y en las pestañas "journal" y "expert" de Metatrader muestran efectivamente que las ordenes se crean con sus respectivos SL y TP, todos distintos para cada orden. Sin embargo el resultado que obtengo es SL y TP todos iguales de acuerdo al SL y TP de la última orden. Adjunto ejemplo: 

Type Size Symbol Price SL TP Price
buy 0.1 eurgbp 0.75973 0.74573 0.75773 0.7547
buy 0.1 eurgbp 0.75773 0.74573 0.75773 0.7547
buy 0.1 eurgbp 0.75573 0.74573 0.75773 0.7547

 

SL Y TP propagados según la última orden. Lo que espero que suceda es:

 Nota:SL=Precio-1000 y TP=precio+200 para cada orden

Type Size Symbol Price SL TP Price
buy 0.1 eurgbp 0.75973 0.74973 0.76173 0.7547
buy 0.1 eurgbp 0.75773 0.74773 0.75973 0.7547
buy 0.1 eurgbp 0.75573 0.74573 0.75773 0.7547

Sorry por lo extenso y de antemano muchas gracias a quien me quiera dar ideas. 

 

Hola,


¿Por qué no le pones los +/- pips del TP y SL directamente en la orden de modificación?


Tal que así:


OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-40*Point,OrderOpenPrice()+40*Point,0,ArrowsColor);


Ya me dirás si te sirve.


Un saludo!

 
Muestranos el codigo donde calculas el SL y TP para las ordenes, creo que error debe estar alli.