Hi all, I am developing multi currency EA and trying to implement trailing stop functionality in EA.
I need to check pip difference between current price and position opening price and if the difference is more then N number of pips then change stop loss to specific price.
For this purpose i was trying to convert price to pips and pips to price but I was unable to do so.
Please help in this regards.
Thanks.
pip is useless, unclear, bs.
try this route :
price difference > point > your conditions > basic (general) considerations > symbol limitations > setting new SL.
your conditions : if it's bigger than N points , smaller than bla bla bla...
basic consideration : e.g. new SL of long position should be ascending, lower than bid etc...
symbol limitations : stops and/or freeze levels
You can look in the Documentation, and in the example robots that come with the platform, there are several examples.
#define EXPERT_MAGIC 123456 // MagicNumber of the expert //+------------------------------------------------------------------+ //| Modification of Stop Loss and Take Profit of position | //+------------------------------------------------------------------+ void OnStart() { //--- declare and initialize the trade request and result of trade request MqlTradeRequest request; MqlTradeResult result; int total=PositionsTotal(); // number of open positions //--- iterate over all open positions for(int i=0; i<total; i++) { //--- parameters of the order ulong position_ticket=PositionGetTicket(i);// ticket of the position string position_symbol=PositionGetString(POSITION_SYMBOL); // symbol int digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // number of decimal places ulong magic=PositionGetInteger(POSITION_MAGIC); // MagicNumber of the position double volume=PositionGetDouble(POSITION_VOLUME); // volume of the position double sl=PositionGetDouble(POSITION_SL); // Stop Loss of the position double tp=PositionGetDouble(POSITION_TP); // Take Profit of the position ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // type of the position //--- output information about the position PrintFormat("#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]", position_ticket, position_symbol, EnumToString(type), volume, DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits), DoubleToString(sl,digits), DoubleToString(tp,digits), magic); //--- if the MagicNumber matches, Stop Loss and Take Profit are not defined if(magic==EXPERT_MAGIC && sl==0 && tp==0) { //--- calculate the current price levels double price=PositionGetDouble(POSITION_PRICE_OPEN); double bid=SymbolInfoDouble(position_symbol,SYMBOL_BID); double ask=SymbolInfoDouble(position_symbol,SYMBOL_ASK); int stop_level=(int)SymbolInfoInteger(position_symbol,SYMBOL_TRADE_STOPS_LEVEL); double price_level; //--- if the minimum allowed offset distance in points from the current close price is not set if(stop_level<=0) stop_level=150; // set the offset distance of 150 points from the current close price else stop_level+=50; // set the offset distance to (SYMBOL_TRADE_STOPS_LEVEL + 50) points for reliability //--- calculation and rounding of the Stop Loss and Take Profit values price_level=stop_level*SymbolInfoDouble(position_symbol,SYMBOL_POINT); if(type==POSITION_TYPE_BUY) { sl=NormalizeDouble(bid-price_level,digits); tp=NormalizeDouble(ask+price_level,digits); } else { sl=NormalizeDouble(ask+price_level,digits); tp=NormalizeDouble(bid-price_level,digits); } //--- zeroing the request and result values ZeroMemory(request); ZeroMemory(result); //--- setting the operation parameters request.action =TRADE_ACTION_SLTP; // type of trade operation request.position=position_ticket; // ticket of the position request.symbol=position_symbol; // symbol request.sl =sl; // Stop Loss of the position request.tp =tp; // Take Profit of the position request.magic=EXPERT_MAGIC; // MagicNumber of the position //--- output information about the modification PrintFormat("Modify #%I64d %s %s",position_ticket,position_symbol,EnumToString(type)); //--- send the request if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // if unable to send the request, output the error code //--- information about the operation PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } } } //+------------------------------------------------------------------+
- 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, I am developing multi currency EA and trying to implement trailing stop functionality in EA.
I need to check pip difference between current price and position opening price and if the difference is more then N number of pips then change stop loss to specific price.
For this purpose i was trying to convert price to pips and pips to price but I was unable to do so.
Please help in this regards.
Thanks.