Trader3000: Awesome!!!!!! Thank you so much for this. After many weeks everything is now working. I have learned a lot. Thank you everyone!!!
Sorry but I spoke too soon. The Trailingstop only kicks in sometimes, so I think the code is still broken somewhere. Here is the entire EA. Will someone please check and let me know if you spot a mistake. Thank you
#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
}
Thank you so much for pointing that out. I fixed the mistake and its working now. I have another question. I'm trying to have the message box pop-up when my stoploss is less than the broker's STOP_LEVEL, but it pops up even when it is more. I tried to put it in the 'start' section rather than the 'init' section, but it does not work there either. Will someone please take a look and let me know what is wrong. Thank you
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);
}
Hi Everyone, I ran into a snag again. It's very strange and I cannot understand why this is happening. As I mentioned above, the EA worked fine, but now I simply want to change from this
I am not touching anything else, but after this simple change neither the Trailing stop nor the hedge gets triggered. Its weird. The full code is above
Thank you for your reply, but I do not understand. The code for the Trailing stop is here
{
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))
If I have a Stoploss, the EA works and the Trailingstop and hedge kicks in, but if I change the Stoploss to 0, nothing works. I don't see how and why the Stoploss would have any influence on the Trailingstop and hedge?
Yes, you have to reselect the order
With the above code, you create a new variable to store the ticket number, then you can select the trade by its ticket number
Yes, you have to reselect the order
With the above code, you create a new variable to store the ticket number, then you can select the trade by its ticket number
Awesome!!!!!! Thank you so much for this. After many weeks everything is now working. I have learned a lot. Thank you everyone!!!
Sorry but I spoke too soon. The Trailingstop only kicks in sometimes, so I think the code is still broken somewhere. Here is the entire EA. Will someone please check and let me know if you spot a mistake. Thank you
,
,
Thank you so much for pointing that out. I fixed the mistake and its working now. I have another question. I'm trying to have the message box pop-up when my stoploss is less than the broker's STOP_LEVEL, but it pops up even when it is more. I tried to put it in the 'start' section rather than the 'init' section, but it does not work there either. Will someone please take a look and let me know what is wrong. Thank you
if ((StopLoss || Stoploss || TrailingStop) < stoplevel)doesn't make sense
do you mean?
if ((StopLoss < stoplevel || TrailingStop) < stoplevel)doesn't make sense
do you mean?
Hi Everyone, I ran into a snag again. It's very strange and I cannot understand why this is happening. As I mentioned above, the EA worked fine, but now I simply want to change from this
to
I am not touching anything else, but after this simple change neither the Trailing stop nor the hedge gets triggered. Its weird. The full code is above
Thank you for your reply, but I do not understand. The code for the Trailing stop is here
{ 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))If I have a Stoploss, the EA works and the Trailingstop and hedge kicks in, but if I change the Stoploss to 0, nothing works. I don't see how and why the Stoploss would have any influence on the Trailingstop and hedge?