Проверка состояния IsTradeAllowed()

 
В MQL4 есть замечательная функция IsTradeAllowed()
В справке про нее написано:

===================================
bool IsTradeAllowed()
Возвращается TRUE, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает FALSE.
===================================

Кто может ответить на два вопроса, вытекающие из вышеуказанной справки:

1.- Кем разрешено торговать? (терминалом трейдера или сервером ДЦ)
2.- Поток для выполнения торговых операций свободен у кого? (у терминала трейдера или сервера ДЦ)

Если эта функция на разрешение торговли опрашивает клиентский терминал, а об информации о торговом потоке сервер брокера, тогда вопрос к
разработчикам:

1.- Для чего в одной функции объеденены абсолютно разные вещи? Ведь для пользователя эксперта/индикатора важнее знать о запрете на торговлю
не вообще, а кем конкретно запрещено/разрешено торговать - клиентом или сервером?
 
henry:
1.- Для чего в одной функции объеденены абсолютно разные вещи? Ведь для пользователя эксперта/индикатора важнее знать о запрете на торговлю
не вообще, а кем конкретно запрещено/разрешено торговать - клиентом или сервером?
Запрещено торговать может быть ДЦ (запрет на использование экспертов), а поток занят у терминала.
Эта команда не для пользователя, а для эксперта. А какая разница для эксперта почему нельзя торговать? Нельзя и всё, сидим курим, время от времени проверяя не отменился ли запрет. Вот придёт пользователь и проверит что там творится, может позвонит в службу поддержки, а эксперту - ему пофиг.
 
Эта функция возвращает false когда unchecked tools/options/experts/allow live trading.
 
timbo:
henry писал (а):
1.- Для чего в одной функции объеденены абсолютно разные вещи? Ведь для пользователя эксперта/индикатора важнее знать о запрете на торговлю
не вообще, а кем конкретно запрещено/разрешено торговать - клиентом или сервером?
Запрещено торговать может быть ДЦ (запрет на использование экспертов), а поток занят у терминала.
Эта команда не для пользователя, а для эксперта. А какая разница для эксперта почему нельзя торговать? Нельзя и всё, сидим курим, время от времени проверяя не отменился ли запрет. Вот придёт пользователь и проверит что там творится, может позвонит в службу поддержки, а эксперту - ему пофиг.

Если строго говорить, действительно эта функция может входить в состав эксперта, как "команда для эксперта". Под важностью этой функции для пользователя я имел ввиду интерфейс эксперта на основе этой функции. Я уверен, что для пользователя важно почему его эксперт не работает. Из-за клиента или из-за сервера. По крайней мере ему будет понятно звонить в службу поддержки или нет.

И еще. Поток по моим личным наблюдениям тормозит не на клиенте, а на сервере. Причем как правило во время веселых новостей,
когда на реале зайти и выйти трудно.  
 
irusoh1 писал (а):
Эта функция возвращает false когда unchecked tools/options/experts/allow live trading.

Из твоего комментария я так понимаю, что эта функция работает только на данных клиента (если я правильно перевел) Тогда зачем в
справке ссылка на торговый поток, который занят, как правило, например, в Пятницу по Киеву в 15.30? :-))
 

Здесь есть достаточно исчерпывающая информация 'Ошибка 146 ("Торговый поток занят") и как с ней бороться' , а вообще существует много препядствий для нормальной работы эксперта. Для их преодоления я использую "функцию обработки ошибок" созданную на основе информации полученной отсюда - https://docs.mql4.com/ru/runtime/errors и отсюда https://docs.mql4.com/ru/trading/errors

 
henry:
В MQL4 есть замечательная функция IsTradeAllowed()
В справке про нее написано:

===================================
bool IsTradeAllowed()

Возвращается TRUE, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает FALSE.
===================================

Кто может ответить на два вопроса, вытекающие из вышеуказанной справки:

1.- Кем разрешено торговать? (терминалом трейдера или сервером ДЦ)
2.- Поток для выполнения торговых операций свободен у кого? (у терминала трейдера или сервера ДЦ)

Если эта функция на разрешение торговли опрашивает клиентский терминал, а об информации о торговом потоке сервер брокера, тогда вопрос к
разработчикам:

1.- Для чего в одной функции объеденены абсолютно разные вещи? Ведь для пользователя эксперта/индикатора важнее знать о запрете на торговлю
не вообще, а кем конкретно запрещено/разрешено торговать - клиентом или сервером?

1. Разрешено торговать - это когда торговая площадка на бирже работает. Если попытаешься выставить или закрыть или модифицировать позу, например, в выходные или праздники, то вылезет ошибка о том, что торговля запрещена. Весьма полезная функция чтобы сверяться для трейдинга на акциях и фьючерсах на CBOT, где торговля может быть разрешена только 4 - 7 часов в сутки и иногда торги по отдельным инструментам приостанавливают во время сессии.
2. Торговый поток, если он обрабатывает предыдущий приказ, то является занятым. Также может вылезти ошибка в случае отправки экспертами или одним советником нескольких приказов с небольшим интервалом времени.

В общем, в одном флаконе получаем проверку на предмет того, стоит ли в данный момент отправлять очередной приказ в дилинговый центр или там пошлют куда подальше.
 
bool IsTradeAllowed() - функция не проверяет выходной день или нет! В выходной она возвращает true как и в рабочий день.
Она говорит только про то, что нажата/отжата кнопка разрешения работы экспертов на панели терминала - всего навсего.

Насчёт того разрешил брокер вам торговать или нет - это как то по другому выясняется. Косвенным образом - это то что эксперты не смогут работать, или не смогут лишь посылать торговые приказы (пусть уточнит тот кто точно знает ответ на этот вопрос).
 
Вызов
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

вернёт код ошибки, если он < 0, в том числе (см. help в MetaEditor):
Константа Значение Описание
ERR_NO_ERROR 0 Нет ошибки
ERR_NO_RESULT 1 Нет ошибки, но результат неизвестен
ERR_COMMON_ERROR 2 Общая ошибка
ERR_INVALID_TRADE_PARAMETERS 3 Неправильные параметры
ERR_SERVER_BUSY 4 Торговый сервер занят
ERR_OLD_VERSION 5 Старая версия клиентского терминала
ERR_NO_CONNECTION 6 Нет связи с торговым сервером
ERR_NOT_ENOUGH_RIGHTS 7 Недостаточно прав
ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы
ERR_MALFUNCTIONAL_TRADE 9 Недопустимая операция нарушающая функционирование сервера
ERR_ACCOUNT_DISABLED 64 Счет заблокирован
ERR_INVALID_ACCOUNT 65 Неправильный номер счета
ERR_TRADE_TIMEOUT 128 Истек срок ожидания совершения сделки
ERR_INVALID_PRICE 129 Неправильная цена
ERR_INVALID_STOPS 130 Неправильные стопы
ERR_INVALID_TRADE_VOLUME 131 Неправильный объем
ERR_MARKET_CLOSED 132 Рынок закрыт
ERR_TRADE_DISABLED 133 Торговля запрещена
ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции
ERR_PRICE_CHANGED 135 Цена изменилась
 
Ребята всем спасибо за попытку ответиь на мои вопросы. Просто я все это спрашивал, для того чтобы выяснить есть ли возможность у клиентского терминала проверить разрешает ли сервер (брокер, ДЦ) советнику трейдера торговать. Если бы кто-то четко ответил, что есть такая возможность непосредственно, а не косвенно (как ни крути bool IsTradeAllowed() дает косвенную информацию) проверить что именно сервер ДЦ запретил торговлю, то было бы интересно знать до какой степени он это делает. Т.е. запрет идет на уровне функции start() или "глубже" на уровне функций установки ордеров (игнорируются сигналы советника об установке ордеров).
       В общем, что проку в советнике, если ДЦ блокирует его работу во время рыночных сигналов... Пропадает весь смысл в советниках. Трейдер продолжает быть привязанным к компьютеру целый день. При таком плохом раскладе приходится смотреть сигналы на демке и ставить ордера на реале в ручную :-( 
 
henry писал (а):
irusoh1 писал (а):
Эта функция возвращает false когда unchecked tools/options/experts/allow live trading.

Из твоего комментария я так понимаю, что эта функция работает только на данных клиента (если я правильно перевел) Тогда зачем в
справке ссылка на торговый поток, который занят, как правило, например, в Пятницу по Киеву в 15.30? :-))

Я знаю точно что на клиента стороне она дает false если галочка не отмечена. Про сервер я не слыхал, чтобы ДЦ запрещал торговлю через советников. Если это так, то следует найти другого ДЦ.
Иногда ДЦ запрещает торговлю для всех ручную или автоматическую в связи с быстрым маркетом, это бывает. Такое выскакивало как "Off Quotes".