Hi All, The problem I encounter when drop my EA on USD/JPY & XAU/USD (2 symbols). On the USD/JPY it displays the stoploss of XAU/USD & then as price change's it displays the original stoploss (when trailing), so on & so forth.
My code below, I tried changing a few things but no luck & my order magic & order symbol are their.
This is what I'm facing :(
If you had used the styler, you would see this
for(int l=OrdersTotal()-1; l>=0; l--) { if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_BUY) TickValue=OrderLots(); AboveTrail=((TotalProfit()!=0)&&(TickValue!=0))*Pips(); NewTrailBuy=OrderOpenPrice()+AboveTrail; double NewBuySL=Bid-TrailAmountSL*Pips(); if(NewBuySL>NewTrailBuy&&(NewBuySL>OrderStopLoss()||OrderStopLoss()==0.0)) bool TrailModBuy=OrderModify(OrderTicket(),OrderOpenPrice(),NewBuySL,OrderTakeProfit(),0,clrNONE); }
so that you can easily see that the only thing tied to
if(OrderType()==OP_BUY)
is
TickValue=OrderLots();
You are missing braces
for(int l=OrdersTotal()-1; l>=0; l--) { if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_BUY) { TickValue=OrderLots(); AboveTrail=((TotalProfit()!=0)&&(TickValue!=0))*Pips(); NewTrailBuy=OrderOpenPrice()+AboveTrail; double NewBuySL=Bid-TrailAmountSL*Pips(); if(NewBuySL>NewTrailBuy&&(NewBuySL>OrderStopLoss()||OrderStopLoss()==0.0)) bool TrailModBuy=OrderModify(OrderTicket(),OrderOpenPrice(),NewBuySL,OrderTakeProfit(),0,clrNONE); } }
If you had used the styler, you would see this
so that you can easily see that the only thing tied to
is
You are missing braces
I inserted braces but still get the incorrect Stoploss
for(int l=OrdersTotal()-1;l>=0;l--) { if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_BUY) { TickValue=OrderLots(); AboveTrail=((TotalProfit()!=0)&&(TickValue!=0))*Pips(); NewTrailBuy=OrderOpenPrice()+AboveTrail; double NewBuySL=Bid-TrailAmountSL*Pips(); if(NewBuySL>NewTrailBuy&&(NewBuySL>OrderStopLoss()||OrderStopLoss()==0.0)) bool TrailModBuy=OrderModify(OrderTicket(),OrderOpenPrice(),NewBuySL,OrderTakeProfit(),0,clrNONE); } } for(int m=OrdersTotal()-1;m>=0;m--) { if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_SELL) { TickValue=OrderLots(); AboveTrail=((TotalProfit()!=0)&&(TickValue!=0))*Pips(); NewTrailSell=OrderOpenPrice()-AboveTrail; double NewSellSL=Ask+TrailAmountSL*Pips(); if(NewSellSL<NewTrailSell&&(NewSellSL<OrderStopLoss()||OrderStopLoss()==0.0)) bool TrailModSell=OrderModify(OrderTicket(),OrderOpenPrice(),NewSellSL,OrderTakeProfit(),0,clrNONE); } }
Please explain what you mean by "incorrect Stoploss".
Originally you were getting a value from XAUUSD being used for a USDJPY Sell Stop Order.
With the braces this is no longer possible. The code will only modify the SL on the chart symbol and only Buys or Sells. It will not modify Sell Stop Orders.
You do need to address other issues with your code.
double TickValue=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE);
then later
TickValue=OrderLots();
Why? That makes no sense whatsoever!
double AboveTrail=0;
then
AboveTrail=((TotalProfit()!=0)&&(TickValue!=0))*Pips();
As TickValue is now OrderLots() (which can never be zero), this is the same as
AboveTrail=(TotalProfit()!=0 && OrderLots()!=0)*Pips();
ie.
double AboveTrail=(boolean_result_1 && boolean_result_2)*Pips();
double AboveTrail=(true or false)*Pips();
Again, that makes no sense whatsoever!
I think it might be solved simpler for example: for(int l=OrdersTotal()-1; l>=0; l--)
{
if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if(OrderType==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT){
//code for buy trailing
//set new sl properly and modify a trade with this new sl
}
else if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT){
//code for sell trailing
}
}
Please explain what you mean by "incorrect Stoploss".
Originally you were getting a value from XAUUSD being used for a USDJPY Sell Stop Order.
With the braces this is no longer possible. The code will only modify the SL on the chart symbol and only Buys or Sells. It will not modify Sell Stop Orders.
You do need to address other issues with your code.
then later
Why? That makes no sense whatsoever!
then
As TickValue is now OrderLots() (which can never be zero), this is the same as
ie.
double AboveTrail=(boolean_result_1 && boolean_result_2)*Pips();
double AboveTrail=(true or false)*Pips();
Again, that makes no sense whatsoever!
What I meant by "incorrect Stoploss", for e.g. My EA is on XAU/USD & USD/JPY. USD/JPY opens a pending order with the stop loss of XAU/USD which is incorrect I want the stoploss of USD/JPY .
With that being said thanks for the heads up, problem is solved & my trailing works fine.
for(int l=OrdersTotal()-1;l>=0;l--) { if(OrderSelect(l,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_BUY) { NewTrailBuy=OrderOpenPrice()+AboveTrail; double NewBuySL=Bid-TrailAmountSL*Pips(); if(NewBuySL>NewTrailBuy&&(NewBuySL>OrderStopLoss()||OrderStopLoss()==0.0)) bool TrailModBuy=OrderModify(OrderTicket(),OrderOpenPrice(),NewBuySL,OrderTakeProfit(),0,clrNONE); } } for(int m=OrdersTotal()-1;m>=0;m--) { if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_SELL) { NewTrailSell=OrderOpenPrice()-AboveTrail; double NewSellSL=Ask+TrailAmountSL*Pips(); if(NewSellSL<NewTrailSell&&(NewSellSL<OrderStopLoss()||OrderStopLoss()==0.0)) bool TrailModSell=OrderModify(OrderTicket(),OrderOpenPrice(),NewSellSL,OrderTakeProfit(),0,clrNONE); } }
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi All, The problem I encounter when drop my EA on USD/JPY & XAU/USD (2 symbols). On the USD/JPY it displays the stoploss of XAU/USD & then as price change's it displays the original stoploss (when trailing), so on & so forth.
My code below, I tried changing a few things but no luck & my order magic & order symbol are their.
This is what I'm facing :(