double CalculateProfitOneLot(double entry_price,double exit_price) { double profit=0; if(!OrderCalcProfit(ORDER_TYPE_BUY,Symbol(),1.0,entry_price,exit_price,profit)) { Print(__FUNCTION__," Failed to calculate OrderCalcProfit(). Error ",GetLastError()); } return(profit); }
#define EXPERT_MAGIC 123456
void OnStart()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
int total=OrdersTotal();
for(int i=0; i<total; i++)
{
ulong order_ticket=OrderGetTicket(i);
string order_symbol=Symbol();
int digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);
ulong magic=OrderGetInteger(ORDER_MAGIC);
double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);
double sl=OrderGetDouble(ORDER_SL);
double tp=OrderGetDouble(ORDER_TP);
ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
int offset = 50;
double price;
double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);
PrintFormat("#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]",
order_ticket,
order_symbol,
EnumToString(type),
volume,
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
DoubleToString(sl,digits),
DoubleToString(tp,digits),
magic);
if(magic==EXPERT_MAGIC && sl==0 && tp==0)
{
request.action=TRADE_ACTION_MODIFY;
request.order = OrderGetTicket(i);
request.symbol =Symbol();
request.deviation=5;
if(type==ORDER_TYPE_BUY_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits);
}
else if(type==ORDER_TYPE_SELL_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits);
}
else if(type==ORDER_TYPE_BUY_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits);
}
else if(type==ORDER_TYPE_SELL_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits);
}
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError());
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
ZeroMemory(request);
ZeroMemory(result);
}
}
}