Как без торговых запросов узнать запрет автоторговли со стороны ДЦ? - страница 2

 

Есть скрипт, оповещающий об изменениях торговых условий на реальном счету, где ведет работу МТС.

Уважаемые разработчики, ответьте, Как без торговых запросов узнать запрет-разрешение автоторговли со стороны ДЦ?

 
Возможно ли без торговых запросов узнать запрет-разрешение автоторговли со стороны ДЦ
 
Игнор - тоже ответ... но все же, уважаемые разработчики, еще раз вас прошу, дайте ответ на мой вопрос!
 

getch, твоя настойчивость удивляет :) Ведь уже было сказано, что невозможно это определить без торговых запросов, нет в МТ4 такой фунции. Это уже обсуждалось многократно.

Но всё же решение этого вопроса очень простое: отправь какой-нибудь ордер с "левыми" параметрами, например объёмом=1000, либо ценой=0, и т.д.

Если GetLastError()==133, значит есть запрет

 
Вопрос был про способ без торговых запросов. Не хочется засорять стейтмент "левыми" торговыми запросами и спамить торговый сервер. Разработчики нигде не говорили о невозможности других вариантов. Молчат и здесь.
 
getch:
Вопрос был про способ без торговых запросов. Не хочется засорять стейтмент "левыми" торговыми запросами и спамить торговый сервер. Разработчики нигде не говорили о невозможности других вариантов. Молчат и здесь.

А что им говорить-то? Если б было что, давно бы сказали. Логично?

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

А что касается "спамить сервер", то я уверен тут также нет никаких проблем, посколько данный запрос просто не отправится на сервер, а отклонится самим терминалом, поскольку он изначально ошибочный (например цена нулевая). Если же стоит запрет автоторговли, то терминал блокирует вообще ЛЮБЫЕ торговые команды к серверу.

И к тому же, а какой смысл проверять постоянно? Эта проверка необходима только один раз - при первом вызове торговой функции, ну либо её можно прописать в init(). И если есть запрет, то нет смысла дальше торговать. А если запрета нет, то можно смело торговать... но на всякий случай можно проверять результат каждой торговой операции на наличие ошибки 133.

 

После такого вызова функции

OrderSend(Symbol(), OP_SELLLIMIT, 1, 0, 0, 0, 0);

при разрешенной автоторговле (со стороны ДЦ) GetLastError возвращает 130, при этом не делается никаких записей в журналах терминала и эксперта.

при запрещенной автоторговле (со стороны ДЦ) GetLastError возвращает 133, при этом делается только одна запись "trading by experts is prohibited" в журнале терминала.


Meat, спасибо за работающую идею!

 

Наткнулся ещё на один вариант невосприятия торговых приказов: сервер просто молча их игнорирует или терминал не отсылает. Фрагмент кода:

     if (Signal == -1) {                                           // попытаемся открыться в шорт
        if (LimitOrder == 0) { 
            RefreshRates();      
            Print(".............. Пытаемся открыть лонг с рынка.");
            if (!OrderSend(Symbol(),OP_BUY,Lots,Ask,1,0,0,"FS",Magic,0,Red))
               Print(".............. Ошибка открытия лонга с рынка ", GetLastError()); 
        }
     }

Лог-файл:

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

 

Спасибо! :)

Совсем запарился ;)

Иду спать...

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