Как проверить, открыт ли рынок для торговли?

 

У меня проблема с пониманием того, открыт рынок или закрыт.

Я видел и другие темы, где говорят, что можно проверить дни недели.

А как насчет других праздников?

В последнее время рынок не открывался в пятницу из-за Страстной пятницы. Подобные вещи случаются и в другие дни недели. Это время, когда рынок закрыт. Я вижу это на вкладке «Журнал» МТ5, но не знаю, как отловить это в проблеме.

Пожалуйста, дайте мне знать, что я могу сделать?

 
jaffer wilson:

У меня проблема с пониманием того, открыт рынок или закрыт.

Я видел и другие темы, где говорят, что можно проверить дни недели.

А как насчет других праздников?

В последнее время рынок не открывался в пятницу из-за Страстной пятницы. Подобные вещи случаются и в другие дни недели. Это время, когда рынок закрыт. Я вижу это на вкладке «Журнал» МТ5, но не знаю, как отловить это в проблеме.

Пожалуйста, дайте мне знать, что я могу сделать?

https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Mishanin:

https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes

10018

TRADE_RETCODE_MARKET_CLOSED

Рынок закрыт

Это после попытки отправки ордера. А как узнать до?

Тем более, как узнать, что рынок открылся после стоп-торгов, не бомбардируя ордерами.

 
jaffer wilson:

У меня проблема с пониманием того, открыт рынок или закрыт.

Я видел и другие темы, где говорят, что можно проверить дни недели.

А как насчет других праздников?

В последнее время рынок не открывался в пятницу из-за Страстной пятницы. Подобные вещи случаются и в другие дни недели. Это время, когда рынок закрыт. Я вижу это на вкладке «Журнал» МТ5, но не знаю, как отловить это в проблеме.

Пожалуйста, дайте мне знать, что я могу сделать?

Если MT5, осмотрите функцию    TerminalInfoInteger()
 
JRandomTrader:

Это после попытки отправки ордера. А как узнать до?

Тем более, как узнать, что рынок открылся после стоп-торгов, не бомбардируя ордерами.

"Рекомендуется самостоятельно проверить запрос перед отправкой его торговому серверу. Для проверки запроса существует функция OrderCheck(), которая не только проверит достаточность средств для совершения торговой операции, но и вернетв результатах проверки торгового запроса многие другие полезные параметры:..."

если рынок закрыт то индикаторы/эксперты не получают тиков, и срабатывать у Вас может  OnTimer, там и решите по каким правилам проверять. при первом получении - рынок закрыт, к примеру, выставьте следующую проверку через 12 часов.

Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
OrderCheck - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Mishanin:

"Рекомендуется самостоятельно проверить запрос перед отправкой его торговому серверу. Для проверки запроса существует функция OrderCheck(), которая не только проверит достаточность средств для совершения торговой операции, но и вернетв результатах проверки торгового запроса многие другие полезные параметры:..."

если рынок закрыт то индикаторы/эксперты не получают тиков, и срабатывать у Вас может  OnTimer, там и решите по каким правилам проверять. при первом получении - рынок закрыт, к примеру, выставьте следующую проверку через 12 часов.

Не знаю, как сейчас, а в старых версиях МТ были большие претензии к функции  OrderCheck(), когда ордер не проходил проверку, но при этом успешно отправлялся.

Я про рынок ФОРТС, когда после планки торги приостанавливаются на несколько минут. Как узнать, что торги возобновлены? 12 часов, и даже 12 минут - не вариант.

Также, открытие торгов после клиринга может происходить в разное время.

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

 
JRandomTrader:

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

Что-то новое, что тики приходят без сделок!!!

Давайте шаг за шагом!

Для того чтобы что-то узнать в терминале или от сервера - нужно спросить! Так? ТАК!

У Вас два варианта:

1. Считать рынок всегда открытым пока нет ошибки -  10018, а если есть то как то на неё отреагировать по дополнительному условию (по планке фортс наверное нужен анализ стакана и/или нестандартного времени)

2. Считать рынок всегда закрытым, и менять этот условие когда выполнится пакет выбранных Вами условий.

Выбор вопросов/запросов к терминалу/серверу за Вами)

 
Mikhail Mishanin:

Что-то новое, что тики приходят без сделок!!!

Давайте шаг за шагом!

Для того чтобы что-то узнать в терминале или от сервера - нужно спросить! Так? ТАК!

У Вас два варианта:

1. Считать рынок всегда открытым пока нет ошибки -  10018, а если есть то как то на неё отреагировать по дополнительному условию (по планке фортс наверное нужен анализ стакана и/или нестандартного времени)

2. Считать рынок всегда закрытым, и менять этот условие когда выполнится пакет выбранных Вами условий.

Выбор вопросов/запросов к терминалу/серверу за Вами)

Снятие ордеров в стакане вполне может менять цены bid/ask без сделок.

    TICK_FLAG_BID – тик изменил цену бид
    TICK_FLAG_ASK  – тик изменил цену аск
    TICK_FLAG_LAST – тик изменил цену последней сделки
    TICK_FLAG_VOLUME – тик изменил объем
    TICK_FLAG_BUY – тик возник в результате сделки на покупку
    TICK_FLAG_SELL – тик возник в результате сделки на продажу

Хотелось именно запросить (что-то типа TerminalInfoInteger()), а не отправлять ордер. Особенно для тестовой торговли с имитацией сделок, где может вообще не компилироваться логика отправки ордеров.

Но, видимо, придётся, нарвавшись на ошибку 10018 (а всегда ли будет отдаваться именно она? а не, например, 10013 - видел такое) у себя ставить флаг "рынок закрыт", и пусть эксперты долбят OrderCheck(), пока она не вернёт что-то отличное от 10018, если OrderCheck() вообще способна это корректно отрабатывать.

 
JRandomTrader:

Снятие ордеров в стакане вполне может менять цены bid/ask без сделок.

    TICK_FLAG_BID – тик изменил цену бид
    TICK_FLAG_ASK  – тик изменил цену аск
    TICK_FLAG_LAST – тик изменил цену последней сделки
    TICK_FLAG_VOLUME – тик изменил объем
    TICK_FLAG_BUY – тик возник в результате сделки на покупку
    TICK_FLAG_SELL – тик возник в результате сделки на продажу

Хотелось именно запросить (что-то типа TerminalInfoInteger()), а не отправлять ордер. Особенно для тестовой торговли с имитацией сделок, где может вообще не компилироваться логика отправки ордеров.

Но, видимо, придётся, нарвавшись на ошибку 10018 (а всегда ли будет отдаваться именно она? а не, например, 10013 - видел такое) у себя ставить флаг "рынок закрыт", и пусть эксперты долбят OrderCheck(), пока она не вернёт что-то отличное от 10018, если OrderCheck() вообще способна это корректно отрабатывать.

Снятие ближайших к рынку ордеров, вероятно. В стакане давно не бывал) Но!

Вы опять всё(все ситуации/условия) собрали в кучу. Решайте задачу поэтапно. Это конечно мой субъективный взгляд.

На мой взгляд Вы сами подсказали себе решение!

Анализируйте Флаги текущего Тика:

первые два   считаем, что сняли ближайшие заявки

TICK_FLAG_BID – тик изменил цену бид

TICK_FLAG_ASK  – тик изменил цену аск

и закрываем для себя рынок,

оставшиеся четыре - рынок открыт.(выбор за Вами)

Тик полюбому нужно запрашивать для заявки/ордера, а дальше уже получите отлуп по OrderSend() если рынок закроется и т.п. на Вашем тике)

А тестовая/имитационная торговля вообще одна вольная математика над полученными данными, и в ней лучше у себя(у теста) больше отнимать, чем себя дурить плюсами.

 

 иногда надо читать почту 

pochta

Платформы MetaTrader 4 / MetaTrader 5
Расписание торгов по CFD на US индексы (US30Cash, US500Cash, USTECHCash) и японский индекс JP225Cash
02.04.2021 - торговля закрыта с 16:00 по серверному времени.
05.04.2021 - возобновление торговли по обычному графику.
Расписание торгов по CFD на немецкий индекс DE30Cash
02.04.2021 - торговля закрыта.
05.04.2021 - торговля закрыта.
06.04.2021 - возобновление торговли по обычному графику.
Расписание торгов по Металлам (XAUUSD, XAGUSD) и CFD на нефть (Brent, WTI)
02.04.2021 - торговля закрыта.
05.04.2021 - возобновление торговли по обычному графику.
Расписание торгов по CFD на US акции
02.04.2021 - торговля закрыта.
05.04.2021 - возобновление торговли по обычному графику.
Расписание торгов по Российским GDR
02.04.2021 - торговля закрыта.
05.04.2021 - торговля закрыта.
06.04.2021 - возобновление торговли по обычному графику.
 

Mikhail Mishanin:

Анализируйте Флаги текущего Тика:

первые два   считаем, что сняли ближайшие заявки

TICK_FLAG_BID – тик изменил цену бид

TICK_FLAG_ASK  – тик изменил цену аск

и закрываем для себя рынок,

оставшиеся четыре - рынок открыт.(выбор за Вами)

Тик полюбому нужно запрашивать для заявки/ордера, а дальше уже получите отлуп по OrderSend() если рынок закроется и т.п. на Вашем тике)

А тестовая/имитационная торговля вообще одна вольная математика над полученными данными, и в ней лучше у себя(у теста) больше отнимать, чем себя дурить плюсами.

Могли не снять, а поставить. И тоже без сделки.

Да и тик получать не обязательно, если получаешь стакан.

И основная задача - не "узнать, что рынок закрыт", а "как можно быстрее узнать, что рынок открылся", без долбёжки ордерами.

Тестовая - это не прогон на истории, а имитация торговли в реальном времени, на реальном графике и стакане. И тут, для точности тестирования, надо учитывать периоды закрытой торговли.

Кстати, тестирование корректности работы в условиях "планки" само по себе непростая задача, ибо сложно обеспечить эти условия.

Причина обращения: