Вопрос по OrderCloseBy - страница 2

 
есть две позиции одна на бай, лот 0.1; вторая на селл лот 0.5. закрыли через ordercloseby, какие параметры ордера на селл останутся без изменения?
 
sanyooooook:
есть две позиции одна на бай, лот 0.1; вторая на селл лот 0.5. закрыли через ordercloseby, какие параметры ордера на селл останутся без изменения?
Проще попробовать (на демо, самосабой). Сразу всё и увидишь.
 
MetaDriver:
Проще попробовать (на демо, самосабой). Сразу всё и увидишь.

пришлось для тестера написать(пока ответа ждал), меняется цена открытия большего ордера, коммент, тикет, маджик остается не изменным

//+------------------------------------------------------------------+
//|                                                         lock.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int i=0;
int init()
  {
//----
   i=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(Volume[0]<=1)
   {
            OrderSend(Symbol(),OP_SELL,0.5,NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits),3,0,0,NULL,0);
            i++;
   }
   if(i>3)
   {
       LockAllOrders();
       CloseLock();
       i=0;
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
void LockAllOrders()
{
   double Digits_=MarketInfo("EURUSD",MODE_DIGITS);
   double LotBUY_GBPUSD=0.0;
   double LotBUY_EURUSD=0.0;
   double LotSELL_GBPUSD=0.0;
   double LotSELL_EURUSD=0.0;
   for (int k=OrdersTotal()-1;k>=0;k--)
   {
      //RefreshRates();
      if (OrderSelect(k,SELECT_BY_POS)==true)
      {
         int cmd=OrderType();
         string OrderSymbol_=OrderSymbol();
         if (cmd==OP_BUY)
         {
            if(OrderSymbol_=="EURUSD")
            {
               LotBUY_EURUSD=LotBUY_EURUSD+OrderLots();
            }
            if(OrderSymbol_=="GBPUSD")
            {
               LotBUY_GBPUSD=LotBUY_GBPUSD+OrderLots();
            }
         }
         if (cmd==OP_SELL)
         {
            if(OrderSymbol_=="EURUSD")
            {
               LotSELL_EURUSD=LotSELL_EURUSD+OrderLots();
            }
            if(OrderSymbol_=="GBPUSD")
            {
               LotSELL_GBPUSD=LotSELL_GBPUSD+OrderLots();
            }
         }
      }
   }
   if(LotSELL_GBPUSD>0)
   {
      //RefreshRates();
      //OrderSend("GBPUSD",OP_BUY,LotBUY_GBPUSD,NormalizeDouble(MarketInfo("GBPUSD",MODE_ASK),Digits_),3,0,0,NULL,-1);
   }
   if(LotSELL_EURUSD>0)
   {
      RefreshRates();
      OrderSend("EURUSD",OP_BUY,LotSELL_EURUSD,NormalizeDouble(MarketInfo("EURUSD",MODE_ASK),Digits_),3,0,0,NULL,-1);
   }
   if(LotBUY_GBPUSD>0)
   {
      //RefreshRates();
      //OrderSend("GBPUSD",OP_SELL,LotSELL_GBPUSD,NormalizeDouble(MarketInfo("GBPUSD",MODE_BID),Digits_),3,0,0,NULL,-1);
   }
   if(LotBUY_EURUSD>0)
   {
      RefreshRates();
      OrderSend("EURUSD",OP_SELL,LotBUY_EURUSD,NormalizeDouble(MarketInfo("EURUSD",MODE_BID),Digits_),3,0,0,NULL,-1);
   }
}
void CloseLock()
{
   while(true)
   {
      RefreshRates();
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS)==false)continue;
         if(OrderMagicNumber()==(-1))
         {
            break;
         }
      }
      int i1=0;
      if(i>=0)
      {
         if(OrderMagicNumber()==(-1))
         {
            int cmd=OrderType();
            int res=OrderTicket();
            string Symbol_=OrderSymbol();
            if(cmd==OP_BUY)
            {
               for(i1=OrdersTotal()-1;i1>=0;i1--)
               {
                  if(OrderSelect(i1,SELECT_BY_POS)==false)continue;
                  {
                     if(OrderMagicNumber()!=(-1)&&OrderType()!=cmd&&Symbol_==OrderSymbol())
                     {
                        if(OrderCloseBy(res,OrderTicket()))break;
                     }
                  }
               }
               continue;
            }
            if(cmd==OP_SELL)
            {
               for(i1=OrdersTotal()-1;i1>=0;i1--)
               {
                  if(OrderSelect(i1,SELECT_BY_POS)==false)continue;
                  {
                     if(OrderMagicNumber()!=(-1)&&OrderType()!=cmd&&Symbol_==OrderSymbol())
                     {
                        if(OrderCloseBy(res,OrderTicket()))break;
                     }
                  }
               }
               continue;
            }
         }
      }
      else
      {
         break;
      }
   }
}
 
sanyooooook:

пришлось для тестера написать(пока ответа ждал), меняется цена открытия большего ордера, коммент, маджик остается не изменным

Ошибаетесь.
 
hrenfx:
Ошибаетесь.

по крайней мере тестер так показывает. Или как на самом деле?

ЗЫ: да правильно, меньшие ордера закрываются по нулям, из большего ордера вычитается объем меньшего, линия в тестере проводится от цены большего ордера к цене закрытия меньшего(посчитал это перемещением уровня открытия большей позиции)

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