как закрыть одновременно 2 ордера

 

Подскажите пожалуйста кто знает как закрыть одновременно 2 ордера (разнонаправленных), открытых по разным инструментам, при достижении суммарного профита по ним в размере 1% от депо?

вот как я себе это напредставлял,  

  double balance=AccountBalance();  
  for (int i=OrdersTotal()-1; i>=0; i--)
  if ((AccountEquity()/balance-1)*100>percents)
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
  OrderClose (OrderTicket(),Lot_C,"EURUSD",bid,0);
  OrderClose (OrderTicket(),Lot_F,"USDCAD",ask,0);
  }

но в этом случае закрытие происходит частично. Остается часть позиции которая изначально была открыта большим лотом (что то типа close by получается)

 
double balance=AccountBalance();  
for(int i=OrdersTotal()-1; i>=0; i--)
    if((AccountEquity()/balance-1)*100>percents)
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
           if(OrderType()==OP_BUY)
              OrderClose (OrderTicket(),OrderLots(),"EURUSD",bid,0);
           else if(OrderType()==OP_SELL) 
              OrderClose (OrderTicket(),OrderLots(),"USDCAD",ask,0);
         }
 
WWer >>:

Спасибо за скорый ответ, WWer, только теперь закрывает сразу же после того как открывает, не дожидаясь условия (прибыли больше 1%)

 
//+------------------------------------------------------------------+
//|Трал по эквити                                                    |
//+------------------------------------------------------------------+
void EcvitiTral(){int i, n ,x;double Gpr=0;
if(OrdersTotal()<1){gEqviti=AccountBalance();return;}
  for(i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      Gpr=Gpr+OrderProfit()+OrderSwap()+OrderCommission();
    }
  }
  if((AccountBalance()+Gpr)-EqvTralStep>gEqviti){gEqviti=gEqviti+EqvTralStep;}
  else{if(gEqviti>AccountBalance()&&gEqviti>StartDepo){
    CloseAll();if(OrdersTotal()<1){gEqviti=AccountBalance();return;}}}
return;
}
 

Люди, вы чего это тут понаписывали? Что за наименование инструмента в функции OrderClose?

Согласно справке, третьим параметром идет ЦЕНА ЗАКРЫТИЯ, а не символ:

bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) 
 

Поэтому закрытие надо делать так:

if((AccountEquity()/balance-1)*100>percents)
 for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i , SELECT_BY_POS))
    if(OrderMagicNumber() == MagicNumber && (OrderSymbol() == "EURUSD" || OrderSymbol() == "USDCAD"))
      {
       RefreshRates();
       if(OrderType() == OP_BUY)
         double Price = Bid;
        else
         if(OrderType() == OP_SELL)
           Price = Ask;
       if(OrderClose(OrderTicket(), OrderLots(), Price, 10)
         i--; 
      }




 
zhuchek >>:

Подскажите пожалуйста кто знает как закрыть одновременно 2 ордера (разнонаправленных), открытых по разным инструментам, при достижении суммарного профита по ним в размере 1% от депо?

это называется хедж?

Причина обращения: