Поясните пожалуйста работу функции IsTradeAllowed

 

Добрый день. Хочу при тестинге с помощью функции IsTradeAllowed определять закрыт ли рынок или нет в конкретный день.

Однако, у меня для любого дня  эта функция возвращает единицу ??

 Например, такой код :

datetime Sun=D'2021.11.14 01:01';  // Это воскресенье !

   bool rc= IsTradeAllowed(Symbol(),  Sun); 

   printf ("rc=%d",rc);  


- В результате печатает единицу

Подскажите пож-ста.

 
Alex406:

Добрый день. Хочу при тестинге с помощью функции IsTradeAllowed определять закрыт ли рынок или нет в конкретный день.

Однако, у меня для любого дня  эта функция возвращает единицу ??

 Например, такой код :

datetime Sun=D'2021.11.14 01:01';  // Это воскресенье !

   bool rc= IsTradeAllowed(Symbol(),  Sun); 

   printf ("rc=%d",rc);  


- В результате печатает единицу

Подскажите пож-ста.


Функция IsTradeAllowed проверяет разрешена ли опция автоторговли.

Для проверки торговых сессий инструмента нужно писать доп.проверки, например:


bool CheckSession(string symbol)
  {
   bool check=true;
   int index=0;
   datetime begin=0;
   datetime end=0;
   datetime time=now_time%(24*60*60);

   while(check)
     {
      check=SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)str_time.day_of_week,index,begin,end);
      if(check)
         if(time>=begin && time<=end)
            return(true);
      index++;
     }

   return(false);
  }


Без претензий на универсальность... возможно кто-то даст более совершенный пример...

 

Насчет IsTradeAllowed понял, правда по-моему в реалтайме она у меня работала - если рынок закрыт, то и автоторговля запрещается и ф-ция выдает 0

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

( из-за праздников) , а в аргументах ф-ции  SymbolInfoSessionTrade -только   день недели, а не конкретная дата . Конечно, можно сделать массив праздников и их исключать, но   может есть другое более красивое решение ?

 
Alex406 #:

Насчет IsTradeAllowed понял, правда по-моему в реалтайме она у меня работала - если рынок закрыт, то и автоторговля запрещается и ф-ция выдает 0

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

( из-за праздников) , а в аргументах ф-ции  SymbolInfoSessionTrade -только   день недели, а не конкретная дата . Конечно, можно сделать массив праздников и их исключать, но   может есть другое более красивое решение ?

Задавался тоже таким вопросом, видимо проще составить список праздников.

Иногда еще список критических новостей даже делали тоже массивом из файла.

 
Alex406 #:

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

Рынок закрыт, а котировки идут?

 
Конкретнее,  именно при тестинге ( не в реалтайме)  мне нужно узнать, был ли  в предыдущий рабочий день закрыт рынок ( из-за праздника).Судя по всему, придется делать массив праздников - встроенные функции не помогут.
 
Alex406 #:
Конкретнее,  именно при тестинге ( не в реалтайме)  мне нужно узнать, был ли  в предыдущий рабочий день закрыт рынок ( из-за праздника).Судя по всему, придется делать массив праздников - встроенные функции не помогут.

Если вчера был будний день, но не было котировок (или сессия была короче, чем обычно), значит был праздник.

Но надежнее с календарем, конечно.

 

можно делать БИТОВУЮ КАРТУ по минуткам на год вперёд.

прямо 1 января - берём календарь, 1440 минут в день, умножаем на 365 = 65 килобайт :-)

заполняем еденичками, потом нолями отмечаем сб/вск. Потом всемирные праздники, потом национальную для США индейку, японский день банкира и швейцарский день труда..и т.д.

расписания праздников в общем известны, и наверное можно брать готовое с какой-нить wikipedia

 
Alex406:

Добрый день. Хочу при тестинге с помощью функции IsTradeAllowed определять закрыт ли рынок или нет в конкретный день.

Однако, у меня для любого дня  эта функция возвращает единицу ??

 Например, такой код :

datetime Sun=D'2021.11.14 01:01';  // Это воскресенье !

   bool rc= IsTradeAllowed(Symbol(),  Sun); 

   printf ("rc=%d",rc);  


- В результате печатает единицу

Подскажите пож-ста.

https://docs.mql4.com/ru/check/istradeallowed

IsTradeAllowed

Возвращает информацию о возможности торговли при помощи экспертов.

IsTradeAllowed - Проверка состояния - Справочник MQL4
IsTradeAllowed - Проверка состояния - Справочник MQL4
  • docs.mql4.com
IsTradeAllowed - Проверка состояния - Справочник MQL4
 
Maxim Kuznetsov #:

можно делать БИТОВУЮ КАРТУ по минуткам на год вперёд.

прямо 1 января - берём календарь, 1440 минут в день, умножаем на 365 = 65 килобайт :-)

заполняем еденичками, потом нолями отмечаем сб/вск. Потом всемирные праздники, потом национальную для США индейку, японский день банкира и швейцарский день труда..и т.д.

расписания праздников в общем известны, и наверное можно брать готовое с какой-нить wikipedia

Также смотрим и на каждый день заполняем продолжительность клиринга. Осталось всего ничего - предвидеть стоп-торги на ФОРТС.