Con el código anterior, se crea una nueva variable para almacenar el número de ticket, entonces se puede seleccionar la operación por su número de ticket
Con el código anterior, se crea una nueva variable para almacenar el número de ticket, entonces se puede seleccionar la operación por su número de ticket
Impresionante!!!!!! Muchas gracias por esto.Después de muchas semanas todo funciona.He aprendido mucho.Gracias a todos!!!
Trader3000: Awesome!!!!!! Muchas gracias por esto. Después de muchas semanas todo funciona ahora. He aprendido mucho. Gracias a todos!!!
Lo siento, pero he hablado demasiado pronto. El Trailingstop sólo se activa a veces, así que creo que el código todavía está roto en alguna parte. Aquí está el EA completo. ¿Podría alguien comprobarlo y avisarme si detecta algún error? Gracias
#define magicNumber 12345// Kicks in when position reaches at least TrailingStop pips of profit.externstring Label_Trailingstart = "Pip threshold to activate Trailing stop";
externdouble TrailingStart = 10;
externstring Label_Trailingstop = "Pips trailing behind";
externdouble TrailingStop = 5;
//Set it to some value above 0 to activate Hedgeexterndouble Hedge = 10;
externdouble Multiplier = 3;
externstring Label_StopLoss = "Set StopLoss of original trade";
externdouble StopLoss = 11;
externstring Label_Stoploss1 = "Set Stoploss of Hedge trade";
externstring Label_Stoploss2 = "Value should be less than 'Hedge'";
externstring Label_Stoploss3 = "otherwise a second Hedge trade will open";
externdouble Stoploss = 9;
externstring Label_Percentage = "Lotsize percentage of Equity";
externdouble Percentage = 1;
externdouble Lotsize = 0.01;
int i, result, total;
double stoplevel;
int init()
{
stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; // get broker's stoplevelif(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss withif(Stoploss<=stoplevel) Stoploss=stoplevel; // stoplevel and adjust it when error occuredif(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop; // we compared our TakeProfit// as we compared our StopLossif ((StopLoss || Stoploss || TrailingStop) < stoplevel)
{
MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
"\nand/or TrailingStop are below the minimum levels"+
"\nrequired by your broker, they will automatically"+
"\nbe increased to "+StringConcatenate(stoplevel));
}
return(0);
}
int deinit()
{
return(0);
}
int start()
{
//double Lots = NormalizeDouble(AccountEquity()*Percentage*Lotsize/100, 2);int buy_ticket=0;
int sell_ticket=0;
total=0;
for(i = OrdersTotal()-1; i >= 0 ; i--)
if ( OrderSelect(i, SELECT_BY_POS)
&& OrderMagicNumber() == magicNumber
&& OrderSymbol() == Symbol())
{
total++;
if(OrderType()==OP_BUY)
buy_ticket=OrderTicket();
if(OrderType()==OP_SELL)
sell_ticket=OrderTicket();
}
if(total==0 && Close[1]>Close[2])
{
result=OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Ask - StopLoss*Point*10, 0, "Original", magicNumber, 0, Blue);
Print("Error setting Original order: ",GetLastError());
}
if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Blue))
Print("Error setting Buy trailing stop: ",GetLastError());
}
}
elseif (OrderOpenPrice() > Bid + NormalizeDouble(Hedge*Point*10,Digits))
if(total == 1)
{
result=OrderSend(Symbol(), OP_SELL, NormalizeDouble(OrderLots() * Multiplier, 2), Bid, 3,
Bid + Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Blue);
Print("Error setting Sell Hedge: ", GetLastError());
}
}
elseif (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() > Ask + NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask + NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Red))
Print("Error setting Sell trailing stop: ",GetLastError());
}
}
elseif (OrderOpenPrice() < Ask - NormalizeDouble(Hedge*Point*10,Digits))
if(total == 1)
{
result=OrderSend(Symbol(), OP_BUY, NormalizeDouble(OrderLots() * Multiplier, 2), Ask, 3,
Ask - Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Red);
Print("Error setting Buy Hedge: ", GetLastError());
}
}
return(0);
}
if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY)
{
//Code
}
elseif (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
{
//If there is an open buy order code here will not be executed//The else is not necessary
}
Muchas gracias por señalarlo. He corregido el error y ya funciona. Tengo otra pregunta. Estoy intentando que el cuadro de mensaje aparezca cuando mi stoploss es menor que el STOP_LEVEL del broker, pero aparece incluso cuando es mayor. He intentado ponerlo en la sección 'start' en vez de en la sección 'init', pero tampoco funciona ahí.Podría alguien echarle un vistazo y decirme qué es lo que falla.Gracias
int init()
{
stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; // get broker's stoplevelif(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss withif(Stoploss<=stoplevel) Stoploss=stoplevel; // stoplevel and adjust it when error occuredif(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop; // we compared our TakeProfit// as we compared our StopLossif ((StopLoss || Stoploss || TrailingStop) < stoplevel)
{
MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
"\nand/or TrailingStop are below the minimum levels"+
"\nrequired by your broker, they will automatically"+
"\nbe increased to "+StringConcatenate(stoplevel));
}
return(0);
}
Hola a todos, me he vuelto a encontrar con un inconveniente. Es muy extraño y no puedo entender por qué ocurre esto. Como ya he comentado, el EA funcionaba bien, pero ahora simplemente quiero cambiar de este
No estoy tocando nada más, pero después de este simple cambio ni el Trailing stop ni la cobertura se activan. Es extraño. El código completo está arriba
Gracias por su respuesta, pero no entiendo. El código para el Trailing stop está aquí
{
if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Blue))
Si tengo un Stoploss, el EA funciona y el Trailingstop y la cobertura se activan, pero si cambio el Stoploss a 0, no funciona nada. No veo cómo y por qué el Stoploss tendría alguna influencia en el Trailingstop y la cobertura?
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Sí, tiene que volver a seleccionar la orden
Con el código anterior, se crea una nueva variable para almacenar el número de ticket, entonces se puede seleccionar la operación por su número de ticket
Sí, tiene que volver a seleccionar la orden
Con el código anterior, se crea una nueva variable para almacenar el número de ticket, entonces se puede seleccionar la operación por su número de ticket
Awesome!!!!!! Muchas gracias por esto. Después de muchas semanas todo funciona ahora. He aprendido mucho. Gracias a todos!!!
Lo siento, pero he hablado demasiado pronto. El Trailingstop sólo se activa a veces, así que creo que el código todavía está roto en alguna parte. Aquí está el EA completo. ¿Podría alguien comprobarlo y avisarme si detecta algún error? Gracias
,
,
Muchas gracias por señalarlo. He corregido el error y ya funciona. Tengo otra pregunta. Estoy intentando que el cuadro de mensaje aparezca cuando mi stoploss es menor que el STOP_LEVEL del broker, pero aparece incluso cuando es mayor. He intentado ponerlo en la sección 'start' en vez de en la sección 'init', pero tampoco funciona ahí.Podría alguien echarle un vistazo y decirme qué es lo que falla.Gracias
if ((StopLoss || Stoploss || TrailingStop) < stoplevel)no tiene sentido
¿quieres decir?
if ((StopLoss < stoplevel || TrailingStop) < stoplevel)no tiene sentido
¿quieres decir?
Hola a todos, me he vuelto a encontrar con un inconveniente. Es muy extraño y no puedo entender por qué ocurre esto. Como ya he comentado, el EA funcionaba bien, pero ahora simplemente quiero cambiar de este
a
No estoy tocando nada más, pero después de este simple cambio ni el Trailing stop ni la cobertura se activan. Es extraño. El código completo está arriba
Gracias por su respuesta, pero no entiendo. El código para el Trailing stop está aquí
{ if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits)) { if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits)) { if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits), OrderTakeProfit(), Blue))Si tengo un Stoploss, el EA funciona y el Trailingstop y la cobertura se activan, pero si cambio el Stoploss a 0, no funciona nada. No veo cómo y por qué el Stoploss tendría alguna influencia en el Trailingstop y la cobertura?