Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть скрипт, оповещающий об изменениях торговых условий на реальном счету, где ведет работу МТС.
Уважаемые разработчики, ответьте, Как без торговых запросов узнать запрет-разрешение автоторговли со стороны ДЦ?
getch, твоя настойчивость удивляет :) Ведь уже было сказано, что невозможно это определить без торговых запросов, нет в МТ4 такой фунции. Это уже обсуждалось многократно.
Но всё же решение этого вопроса очень простое: отправь какой-нибудь ордер с "левыми" параметрами, например объёмом=1000, либо ценой=0, и т.д.
Если GetLastError()==133, значит есть запрет
Вопрос был про способ без торговых запросов. Не хочется засорять стейтмент "левыми" торговыми запросами и спамить торговый сервер. Разработчики нигде не говорили о невозможности других вариантов. Молчат и здесь.
А что им говорить-то? Если б было что, давно бы сказали. Логично?
Насчёт "засорять стейтмент" - ничего тем не засоряется. В стейтменте вообще-то отображаются открывшиеся сделки, а ты посылаешь неверный запрос, по которому сделка открыться никак не может. Запрос отразится только в логах.
А что касается "спамить сервер", то я уверен тут также нет никаких проблем, посколько данный запрос просто не отправится на сервер, а отклонится самим терминалом, поскольку он изначально ошибочный (например цена нулевая). Если же стоит запрет автоторговли, то терминал блокирует вообще ЛЮБЫЕ торговые команды к серверу.
И к тому же, а какой смысл проверять постоянно? Эта проверка необходима только один раз - при первом вызове торговой функции, ну либо её можно прописать в init(). И если есть запрет, то нет смысла дальше торговать. А если запрета нет, то можно смело торговать... но на всякий случай можно проверять результат каждой торговой операции на наличие ошибки 133.
После такого вызова функции
при разрешенной автоторговле (со стороны ДЦ) GetLastError возвращает 130, при этом не делается никаких записей в журналах терминала и эксперта.
при запрещенной автоторговле (со стороны ДЦ) GetLastError возвращает 133, при этом делается только одна запись "trading by experts is prohibited" в журнале терминала.
Meat, спасибо за работающую идею!
Наткнулся ещё на один вариант невосприятия торговых приказов: сервер просто молча их игнорирует или терминал не отсылает. Фрагмент кода:
Лог-файл:
00:59:08 FS EURGBP,M1: .... Получен сигнал на открытие позиции. Signal=-1 00:59:08 FS EURGBP,M1: .............. Пытаемся открыть лонг с рынка. 00:59:08 FS EURGBP,M1: .... Получен сигнал на открытие позиции. Signal=-1 00:59:11 FS EURGBP,M1: .............. Пытаемся открыть лонг с рынка. 00:59:11 FS EURGBP,M1: .... Получен сигнал на открытие позиции. Signal=-1
OrderSend( уходит как в песок :( - ни отлупа, ни открытия ордера, ни ругани...
Кто что может посоветовать?
Для начала корректно проверять значение возвращаемое функцией OrderSend(). Она возвращает int, а не bool, как подразумевает проверка if (!OrderSend
Спасибо! :)
Совсем запарился ;)
Иду спать...