Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Izzatilla Ikramov
13293
Izzatilla Ikramov  

Советник был запущен на 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);
  }
new-rena
3371
new-rena  
Izzatilla Ikramov:

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

.......

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

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

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

Izzatilla Ikramov
13293
Izzatilla Ikramov  
new-rena:

.......

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

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

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

вся история отображается как нужно.
new-rena
3371
new-rena  
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);
  }

Izzatilla Ikramov
13293
Izzatilla Ikramov  
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);
  }

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

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

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

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

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

Izzatilla Ikramov
13293
Izzatilla Ikramov  
Vitaly Muzichenko:

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

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