Закрытие ордеров в мультивалютнике на демо и реале не происходит. В чем проблема?

 

Мультивалютник открывает ордера (на демо и реале) по всем парам по сигналу индикатора, но не закрывает их по обратному сигналу.

В тестере все работает (так как одна пара только) . В чем проблема? Привожу ниже часть кода закрытия ордеров. Чего-то не хватает ?

//+----------------------------------------------------------------------------+
void  CloseSymbol(string vSymbol)
{
     bool error=true;
     int err,OT;
    double point = MarketInfo(vSymbol,MODE_POINT);   
    double bid   = MarketInfo(vSymbol,MODE_BID);
    double ask   = MarketInfo(vSymbol,MODE_ASK);
  if(ExistPositions(vSymbol))
    {
         for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {  
       if ((vSymbol==Symbol1 || vSymbol==Symbol2 || vSymbol==Symbol3 || vSymbol==Symbol4 ||
           vSymbol==Symbol5 || vSymbol==Symbol6))
            {
     OT = OrderType();
if(GetCloseSignal(vSymbol)==1) 
    if (OT==OP_BUY)
                 { 
error=OrderClose(OrderTicket(),OrderLots(),Bid,30,Blue);
          if (error) Alert(vSymbol,"  Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                                     "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                 }
//------------------------------------------------------------------------------------------------------------------------------------
    if(GetCloseSignal(vSymbol)==-1)
     if (OT==OP_SELL) 
               {
error=OrderClose(OrderTicket(),OrderLots(),Ask,30,Red);
        if (error) Alert(vSymbol,"  Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                                "     ",TimeToStr(TimeCurrent(),TIME_SECONDS));
               }

//----------------------------------------------------------------------------------------------------------------------------    
          } 
       }
     }
   }
     return(0);
    
}//  close
//====================================================================================================
 

Bid, Ask в OrderClose().

 

Свои переменные лучше именовать более различимо, чем просто строчный первый символ, то есть вместо ask и bid лучше писать myAsk и myBid.

ЗЫ. Я эти переменные именую pa и pb - сокращения от Price Ask и Price Bid.

 

ё-моё, неужели в этом дело,( проверю в понедельник), а я голову сломал. Хотя в тестере работало. Спасибо.

Может еще чего не так?

 
pistolet:Может еще чего не так?


Хрень полная, зачем такие сложности с указанием нескольких глобальных символов? где нормализация цен ? пройдитесь по кодбейзу, там вагон приличных скриптов валяется...

for(int i=OrdersTotal();i>=0;i--){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
       if(OrderSymbol()==vSymbol){
         if(OrderType()<OP_BUYLIMIT){
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(OrderClosePrice(),Digits),MarketInfo(Symbol(),MODE_DIGITS));
         }
      }
   }
}
 
pistolet:

ё-моё, неужели в этом дело,( проверю в понедельник), а я голову сломал. Хотя в тестере работало. Спасибо.

Может еще чего не так?

Введите условие для выбранного ордера :

//--------------------------------------
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        { if(OrderSymbol()==vSymbol){
//--------------------------------------
 
pistolet:

Хотя в тестере работало.

С каких пор тестер стал мультивалютным?
 
PapaYozh:
С каких пор тестер стал мультивалютным?

Если учитывать ограничения,то всегда им был
 
PapaYozh:
С каких пор тестер стал мультивалютным?

имеется ввиду одна пара в тестере, то есть каждая пара в отдельности из мультивалютника в тестере работает, а вместе на демо нет.
 
Vinin:

Если учитывать ограничения,то всегда им был

А, ну да, точно. Это ж из разряда "Вы можете получить «Форд-Т» любого цвета, при условии, что этот цвет будет черным."
 
pistolet:

Мультивалютник открывает ордера (на демо и реале) по всем парам по сигналу индикатора, но не закрывает их по обратному сигналу.

В тестере все работает (так как одна пара только) . В чем проблема? Привожу ниже часть кода закрытия ордеров. Чего-то не хватает ?


Вместо

error=OrderClose(OrderTicket(),OrderLots(),Bid,30,Blue);
//
error=OrderClose(OrderTicket(),OrderLots(),Ask,30,Red);

используйте

error=OrderClose(OrderTicket(),OrderLots(),bid,30,Blue);
//
error=OrderClose(OrderTicket(),OrderLots(),ask,30,Red);
И правильно Игорь Ким посоветовал: не используйте имена переменных, совпадающие с зарезервированными словами.
Причина обращения: