Пожалуйста, помогите с выявлением проблемы

 

Советник был запущен на 20 валютных парах, по условиям не должны были открыты новые сделки если не прошел один день. На двух парах проблема. Помогите пожалуйста.

void OpenPos()
  {

   if(OneDayDeal())
     {
      if((iRSI(NULL,0,21,PRICE_CLOSE,0)<50) && (iRSI(NULL,0,21,PRICE_CLOSE,1)<50))
        {
         PutOrder(1,Bid);
        }

      if((iRSI(NULL,0,21,PRICE_CLOSE,0)>50) && (iRSI(NULL,0,21,PRICE_CLOSE,1)>50))
        {
         PutOrder(0,Ask);
        }
     }
  }
bool OneDayDeal()
  {
   bool result=true;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()<2 && TimeDay(OrderCloseTime())==Day())
           {
            result=false;
           }
        }
     }
   return(result);
  }
[Удален]  
Izzatilla Ikramov:

Советник был запущен на 20 валютных парах, по условиям не должны были открыты новые сделки если не прошел один день. На двух парах проблема. Помогите пожалуйста.

.......

Вот это :  if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

будет корректно работать, если на вкладке "История счета" будут находиться обрабатываемые ордера

Поэтому желательно по правой кнопке мышки во внутрях этой вкладки выбирать "Вся история"

 
new-rena:

.......

Вот это :  if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

будет корректно работать, если на вкладке "История счета" будут находиться обрабатываемые ордера

Поэтому желательно по правой кнопке мышки во внутрях этой вкладки выбирать "Вся история"

вся история отображается как нужно.
[Удален]  
Izzatilla Ikramov:
вся история отображается как нужно.

Дальше тогда едем.

А где у Вас цикл перебора ордеров?

Ну типа

bool OneDayDeal()
  {
     bool result=true;

     for (i =OrdersHistoryTotal(); i>=0; i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()<2 && TimeDay(OrderCloseTime())==Day())result=false;
      }

     return(result);
  }

 
new-rena:

Дальше тогда едем.

А где у Вас цикл перебора ордеров?

Ну типа

bool OneDayDeal()
  {
     bool result=true;

     for (i =OrdersHistoryTotal(); i>=0; i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()<2 && TimeDay(OrderCloseTime())==Day())result=false;
      }

     return(result);
  }

Как я понимаю, когда советник работал на одной паре  - проблем не возникало, а когда я запустил не несколько парах - появилась проблема из за того, что перебор осуществлял только по последним сделкам?
 

Позиция может быть открыта и ещё не закрыта, поэтому сигнал игнорируется, а вы смотрите только по закрытым

if(OrderType()<2 && TimeDay(OrderCloseTime())==Day())
 
for (int i =OrdersHistoryTotal(); i>=0; i--)   нужно ли добавить int?
 
Izzatilla Ikramov:
for (int i =OrdersHistoryTotal(); i>=0; i--)   нужно ли добавить int?

да, нужен, если перед этим не инициализировали переменную i

Посмотрите сюда

 
Vitaly Muzichenko:

Позиция может быть открыта и ещё не закрыта, поэтому сигнал игнорируется, а вы смотрите только по закрытым

if(OrderType()<2 && TimeDay(OrderCloseTime())==Day())
Для этого есть ограничение на количество открытых сделок.
[Удален]  
Izzatilla Ikramov:
for (int i =OrdersHistoryTotal(); i>=0; i--)   нужно ли добавить int?
Да, если "int i" еще не было нигде сверху
 
Спасибо Вам!