Скачать MetaTrader 5

Лот не обнуляется... - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Продавай продукты через Маркет и отслеживай статистику продаж
WindSW
269
WindSW 2011.03.11 10:04  
TheXpert:

Ордер выбран? Скорее всего проблема здесь. Учитываете, что в начале прогона ордеров может не быть, соответственно OrderSelect вернет false, а OrderLots будет выдавать всякую фигню?



Да так и есть. От этого варианта решил отказаться и сделал через перебор отработаных ордеров. Ниже написан рабочий код, может кому-то понадобится.

//--- Расчет размера лота ------------------------------------------------------------
   RefreshRates();
   double LotsStep=NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP),2);
   double LotsMin=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2);
   double LotsMax=NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT),2);
   if (LotsStep==0.01) LotsDigit=2; else LotsDigit=1;
   if (Lots==0) WorkLot=NormalizeDouble (AccountEquity()*LotsPercent/100000,LotsDigit);
   else WorkLot=Lots;
  
   if (Lots==0 && Total==0 && Opn_B==true || Opn_S==true)
      {
       int total=OrdersHistoryTotal();                            //определяется количество
       int MaxTime=0; tick=-1;                                    //задаются параметры
       for (int k=total-1; k>=0; k--)                             //цикл перебора ордеров
        {
         OrderSelect(k, SELECT_BY_POS, MODE_HISTORY);             //выбор ордеров по позиции
         if (OrderMagicNumber()==Magic && OrderSymbol()==Symbol())//фильтруется
           {
            if (OrderCloseTime()>MaxTime)                         //выбирается самый свежий
            {tick=OrderTicket(); MaxTime=OrderCloseTime();}       //назначаются параметры
           }    
         }  
       if (tick>0)                                                //есть свежий ордер
        {
         OrderSelect(tick, SELECT_BY_TICKET, MODE_HISTORY);       //выбираю его из истории
         if (OrderLots()>WorkLot) WorkLot=OrderLots();            //сравниваю лоты
        }
      }
   
   if (WorkLot>LotsMax) WorkLot=LotsMax;
   if (WorkLot<LotsMin) WorkLot=LotsMin;
   
WindSW
269
WindSW 2011.03.11 10:05  
ВСЕМ СПАСИБО!
WindSW
269
WindSW 2011.03.11 10:19  
В фильтре параметр Total==0 лишний, его можно исключить
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий