Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXII): Отложенные торговые запросы - установка ордеров по условиям"
Я удалил предыдущую директорию DoEasy в Include на своем компьютере, затем загрузил MQL5.zip-файл из этой статьи.
При компиляции TestDoEasyPart32.mq5 у меня возникла 61 ошибка компиляции 😱.
Дело в том, что в начале строки 114 файла Message.mqh в функции CMessage::ToMail не хватает символа / (см. розовую стрелку на снимке выше).
Как только символ слэша был добавлен для определения строки комментария, проблем с компиляцией больше не возникало.
Мне также пришлось изменить флаг "только для чтения" для файлов в каталоге DoEasy, чтобы изменения можно было сохранить.
Я удалил предыдущую директорию DoEasy в Include на своем компьютере, затем загрузил файл MQL5.zip из этой статьи.
При компиляции TestDoEasyPart32.mq5 у меня возникла 61 ошибка компиляции 😱
Дело в том, что в начале строки 114 файла Message.mqh в функции CMessage::ToMail не хватает символа / (см. розовую стрелку на снимке выше)
После добавления символа слэша для определения строки комментария проблем с компиляцией больше нет.
Мне также пришлось изменить флаг "только для чтения" для файлов в каталоге DoEasy, чтобы изменения можно было сохранить.
В исходном коде, приложенном к статье в русской части ресурса mql5.com, такой ошибки нет:

Благодарим вас за внимательность и заботу.
---------------------------------
Эта досадная ошибка была внесена при переводе текста статьи и комментариев в коде с русского языка на английский.
В исходниках, приложенных к статье в русской части ресурса mql5.com, таких ошибок нету.
Здравствуйте,
на моем демо-счете IC Markets (MT5) возникает ошибка о неправильном типе заполнения ордера.
Я отладил ваш код и обнаружил, что инициализация кажется нормальной с ORDER_FILLING_IOC на моем счете. Однако когда в советнике вызывается строка engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); и происходит попытка открыть (или закрыть) позицию, то тип заполнения не устанавливается должным образом (см. ниже).
Я сделал быстрое (и грязное) решение, чтобы заставить его работать. Вы можете увидеть изменения, сделав разницу с вашими файлами в 2 файлах, которые я прикрепил. Пожалуйста, замените мой код на правильный.
Trading.mqh около строки 2646:
Я изменил:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //вместо type_filling
TradeObj.mqh
CTradeObj::ClosePosition:
Я добавил:
this.m_request.type_filling=ORDER_FILLING_IOC;
CTradeObj::SetOrder:
Я добавил:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);
Здравствуйте,
на моем демо-счете IC Markets (MT5) возникает ошибка о неправильном типе заполнения ордера.
Я отладил ваш код и обнаружил, что инициализация кажется нормальной с ORDER_FILLING_IOC на моем счете. Однако, когда в советнике вызывается строка engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); и происходит попытка открытия (или закрытия) позиции, то тип заполнения устанавливается неправильно (см. ниже).
Я сделал быстрое (и грязное) решение, чтобы заставить его работать. Вы можете увидеть изменения, сделав разницу с вашими файлами в 2 файлах, которые я прикрепил. Пожалуйста, замените мой код на правильный.
Trading.mqh около строки 2646:
Я изменил:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //вместо type_filling
TradeObj.mqh
CTradeObj::ClosePosition:
Я добавил:
this.m_request.type_filling=ORDER_FILLING_IOC;
CTradeObj::SetOrder:
Я добавил:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);
Спасибо. В последующих статьях это уже исправлено.
Спасибо. В последующих статьях это уже исправлено.
Спасибо. В последующих статьях это уже было исправлено.
Спасибо. В последующих статьях это уже исправлено.
Я попробовал код из части 34, но ошибка все еще сохраняется:

Я также попытался использовать советник из части 34 с библиотекой DoEasy из вашей последней статьи часть 43, но эта библиотека часть 43 несовместима с советником из части 34 (изменен метод engine.OnTimer и т.д.).
Что я делаю не так? : ) Spasibo!
Я попробовал код из части 34, но ошибка по-прежнему сохраняется:
Я также попытался использовать советник из части 34 с библиотекой DoEasy из вашей последней статьи часть 43, но эта библиотека часть 43 несовместима с советником из части 34 (изменен метод engine.OnTimer и т.д.).
Что я делаю не так? : ) Spasibo!
Что именно вы делаете, чтобы получить эту ошибку? Какой советник вы используете? Тестовый советник из статьи не изменился?
Что именно вы делаете, чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?
Что именно вы делаете, чтобы получить эту ошибку? Какой советник вы используете? Тестовый советник из статьи не изменился?
Что именно вы делаете, чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?
Я нажимаю "Buy" или "Sell" без активированных "P" или "T".
Я использовал неизменный советник из части 34.
Я нажимаю кнопку "Купить" или "Продать", не активируя "P" или "T".
Я использовал неизменный советник из части 34.
Есть ли подобные ошибки в MetaQuotes-Demo?
Есть ли такие ошибки на MetaQuotes-Demo?
На MetaQuotes Demo ошибок нет. Интересно...
А сейчас?
Никаких ошибок на MetaQuotes Demo. Интересно...
А теперь?
Итак - мне нужно подключиться к торговому серверу, на котором вы обнаружили ошибки, и найти причину, чтобы исправить поведение.
Скажите мне детали для регистрации демо-счета.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXII): Отложенные торговые запросы - установка ордеров по условиям:
Продолжаем создавать функционал, позволяющий производить торговлю при помощи отложенных запросов. В этой статье мы реализуем возможность устанавливать отложенные ордеры по условию.
В объекте-отложенном запросе у нас создан массив, в котором хранятся все условия его активации. В классе управления торговлей — в его таймере, постоянно просматривается список отложенных торговых запросов, и при наступлении времени исполнения отложенного торгового запроса (все прописанные в нём условия активации выполнены) на сервер отсылается торговый приказ, параметры которого указаны в сработавшем отложенном запросе.
Для открытия позиций достаточно лишь контролировать наступление заданных условий, и как только фиксируется такой факт, то торговый приказ на открытие позиции отсылается на сервер.Но для установки отложенных ордеров при помощи объектов-отложенных запросов есть некоторое усложнение: ордер устанавливается на дистанции от цены, тогда как позиция — по соответствующей текущей цене.
Поэтому для работы с выставлением отложенных ордеров по условию, надо ещё учитывать дистанцию установки отложенного ордера. И тут есть одна дилемма: при создании отложенного запроса мы указываем дистанцию установки будущего отложенного ордера. НО... от какой цены? От цены, которая есть в момент создания отложенного запроса? Или от той цены, которая будет при выполнении всех условий, указанных в объекте-запросе для его активации? Ведь в момент наступления всех условий, цена может уйти далеко от места, в котором создавался отложенный запрос. А будущую цену мы можем точно знать только в одном случае — когда единственным условием активации отложенного запроса является заданное значение цены. В остальных случаях будущая цена, от которой нужно установить ордер, нам неизвестна.
Автор: Artyom Trishkin