Советник - "0" убытка по двум ордерам.
Работает с двумя ордерами одного типа включенными, для достижения суммарного нулевого профита. При подключении нужно ввести тикеты контролируемых ордеров, при достижении положительного профита будут закрыты только указанные ордера.
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern int ticket_1=0;
extern int ticket_2=0;
double profit_1 , profit_2;
double profit;
bool work=true;
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//----------------
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---++++++++++++++++++++++++++
if(ticket_1<=0 || ticket_2<=0 )
{Comment("Введите верно номера ордеров !! ");
stop();}
else{work = true;}
if(work){
for(int i=0; i<OrdersTotal(); i++){
if(OrderSelect(ticket_1,SELECT_BY_TICKET ,MODE_TRADES)==true)
profit_1 = OrderProfit()+OrderSwap();
}
//else Alert("Ордер №1 не найден!");
for(int i=0; i<OrdersTotal(); i++){
if(OrderSelect(ticket_2,SELECT_BY_TICKET,MODE_TRADES)==true)
profit_2 = OrderProfit()+OrderSwap();
//else Alert("Ордер №2 не найден!");
}
profit = profit_1 + profit_2;
if(profit>0){
if(profit_1>profit_2){ CloseOrs(ticket_2); CloseOrs(ticket_1);}
else { CloseOrs(ticket_1); CloseOrs(ticket_2);}
}
Comment (ticket_1," ",ticket_2,
" Убыток = ",profit);
}
//+------------------------------------------------------------------+
}
//===============================================
void CloseOrs(double ticket) {
int slippage=8;
for(int i=0; i<OrdersTotal(); i++){
if(OrderSelect(ticket,SELECT_BY_TICKET ,MODE_TRADES)==true){
if (OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,slippage);
if (OrderType()==OP_SELL)
OrderClose (OrderTicket(),OrderLots(),Ask,slippage);
}
}
Alert("Достигнут 0 убыток по двум ордерам!");
}
// End
void stop(){
work=false; }
Источник: http://для достижения суммарного нулевого профита |