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

 

Советник был запущен на 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" еще не было нигде сверху
 
Спасибо Вам!
Причина обращения: