Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордеров, модификация ордеров и позиций по условиям"

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордеров, модификация ордеров и позиций по условиям:

В этой статье мы завершим описание концепции работы с отложенными торговыми запросами и создадим функционал для удаления отложенных ордеров и модификации ордеров и позиций по условиям. Таким образом у нас будет в наличии весь функционал, при помощи которого можно будет впоследствии создавать несложные пользовательские стратегии, а вернее — некоторую логику поведения советника при наступлении заданных пользователем условий.

Скомпилируем советник и запустим его в визуальном режиме тестера. Для проверки удаления ордеров и модификации ордеров и позиций, сначала откроем две позиции на продажу и установим отложенный ордер на продажу без уровней StopLoss и TakeProfit. Затем создадим отложенные запросы на модификацию стоп-уровней ордерам и позициям по условию значения цены. Дождёмся активации отложенных запросов и выставлению заданных стоп-уровней и удалим ордера и позиции.

Далее откроем две позиции на покупку и установим отложенный ордер на покупку. После чего создадим отложенные запросы на удаление ордеров и закрытие позиций по времени.


Как видно, стоп-приказы были выставлены по пересечению заданного уровня цены активации отложенных запросов, позиции были закрыты по прошествии заданного времени и ордер был удалён.

Автор: Artyom Trishkin

 

День добрый!

Спасибо за серию статей и спасибо за адаптированный под MQL4 код!

Касательно практических примеров.

Стоит задача,

  1. по наступлении определенных рыночных условий открыть несколько позиций в одном направлении с одинаковыми уровнями закрытия по убытку и разными по прибыли.
  2. при наступлении аналогичных условий ниже\выше открыть еще несколько позиций в том же направлении, снова с одинаковыми уровнями закрытия по убытку и разными по прибыли + изменить уровень убытка открытых позиций в ноль.
  3. совокупный размер первого набора позиций определить с учетом 2% убытка от баланса
  4. совокупный размер второго набора позиций определить с учетом 2% убытка от средств 
  5. работа с отложенными приказами не предполагается

В моем советнике MQL4 уже реализован алгоритм поиска точек входа, но пока совсем нет торговых операций.

Внимание, вопрос ))

Какие из  библиотек, классов, методов первой серии помогли бы мне ускорить разработку?


Рынок - новости, аналитика, прогнозы по рынкам - Блоги трейдеров и аналитика финансовых рынков
Рынок - новости, аналитика, прогнозы по рынкам - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Рынок — это место, где обычно происходит обмен товара на деньги или товара на товар. Если доступ на рынок свободный, то производители и потребители проводят обмен в условиях конкуренции. Существует
 
Nikolai Karetnikov:

День добрый!

Спасибо за серию статей и спасибо за адаптированный под MQL4 код!

Касательно практических примеров.

Стоит задача,

  1. по наступлении определенных рыночных условий открыть несколько позиций в одном направлении с одинаковыми уровнями закрытия по убытку и разными по прибыли.
  2. при наступлении аналогичных условий ниже\выше открыть еще несколько позиций в том же направлении, снова с одинаковыми уровнями закрытия по убытку и разными по прибыли + изменить уровень убытка открытых позиций в ноль.
  3. совокупный размер первого набора позиций определить с учетом 2% убытка от баланса
  4. совокупный размер второго набора позиций определить с учетом 2% убытка от средств 
  5. работа с отложенными приказами не предполагается

В моем советнике MQL4 уже реализован алгоритм поиска точек входа, но пока совсем нет торговых операций.

Внимание, вопрос ))

Какие из  библиотек, классов, методов первой серии помогли бы мне ускорить разработку?


Не полное описание.

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

2. Открываем позиции, сразу устанавливая им второй одинаковый для них идентификатор группы в магическом номере. Теперь вся вторая группа может искаться по идентификатору 2.
2.1 После открытия второй группы позиций выбрать в список все позиции группы 1 и модифицировать их уровни стоплосс на рассчитанный уровень безубытка для них. Уровень рассчитывать самостоятельно. Список позиций первой группы есть в наличии - его совокупная прибыль/убыток легко рассчитываются.

3. Этот пункт - совокупный объём? Если да, то рассчитывайте его перед открытием первой группы позиций.

4. Этот пункт - совокупный объём? Если да, то рассчитывайте его перед открытием второй группы позиций. Только вот средства будут уже зависеть от занятой маржи для первой группы и её прибыли/убытке - плавающий профит/лосс по свободным средствам.

5. Отложенные запросы удобно использовать как раз для установки всех необходимых условий для открытия групп. Заранее распланировать, и выставить ожидание. Не настаиваю - это средство планирования торговой тактики и техники.

Ответ - всё это есть в первой части для реализации задуманного. Не понятен вопрос - нет попытки что-то пробовать. Соответственно - могу лишь словами.

 

Артем, добрый день

Нереальная по емкости работа, спасибо большое 

Есть одно замечание: в большинстве случаев мои тестовые терминалы МТ4 подключены к реальному торговому счету в режиме инвестора.

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

Однако, библиотека обнаруживает, что торговля на счете запрещена и отказывается совершать торговые операции. В тестере.

Может, имеет смысл явным образом расслабить некоторые ограничения для работы в тестере? 

Видимо, вот здесь:

//--- Проверяем разрешение торговли для данного счета (при наличии связи с торговым сервером)
   else if(!this.m_account.TradeAllowed() && !::MQLInfoInteger(MQL_TESTER))
     {
      //--- Записываем код ошибки в список и возвращаем false - нет смысла проверять далее
      this.m_error_reason_flags=TRADE_REQUEST_ERR_FLAG_ERROR_IN_LIST;
      this.AddErrorCodeToList(MSG_LIB_TEXT_ACCOUNT_NOT_TRADE_ENABLED);
      return false;
     }

Я у себя добавил, но это, возможно, не единственная проверка, которую имеет смысл игнорировать в тестере?

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
, то позиции по каждому символу разрешается закрывать только в том порядке, в котором они были открыты — сначала самую старую, затем более новую и т.д. При попытке закрыть позиции в ином порядке будет получена ошибка. Уровень залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции (Stop Out). В...
 
Igor Ryabchikov:

Артем, добрый день

Нереальная по емкости работа, спасибо большое 

Есть одно замечание: в большинстве случаев мои тестовые терминалы МТ4 подключены к реальному торговому счету в режиме инвестора.

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

Однако, библиотека обнаруживает, что торговля на счете запрещена и отказывается совершать торговые операции. В тестере.

Может, имеет смысл явным образом расслабить некоторые ограничения для работы в тестере? 

Видимо, вот здесь:

Я у себя добавил, но это, возможно, не единственная проверка, которую имеет смысл игнорировать в тестере?

Спасибо, поправлю.

 

Артём.

А есть ли возможность подключать эту библиотеку к эксперту в откомпилированном виде? Чтобы при небольших изменениях эксперта не было необходимости всю её компилировать каждый раз.

Мне кажется такая возможность должна быть, но не могу разобраться, как это сделать.

 
MQL_User #:

Артём.

А есть ли возможность подключать эту библиотеку к эксперту в откомпилированном виде? Чтобы при небольших изменениях эксперта не было необходимости всю её компилировать каждый раз.

Мне кажется такая возможность должна быть, но не могу разобраться, как это сделать.

Не помню. Да и не пробовал. Попробую, отпишусь. Но пока я в отпуске.
 

Ок.

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

 
MQL_User #:

Ок.

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

Можно отключить оптимизацию при компилировании. Будет быстрее
 
Artyom Trishkin #:
Можно отключить оптимизацию при компилировании. Будет быстрее

Да, действительно, быстрее. Но всего раза в два.

У меня на ноутбуке время компилирования доходило до 60 сек., теперь, после отключения оптимизации, доходит до 30 сек. А если учесть, что это только лишь 34-я часть (далеко не последняя), то всё равно многовато. Ведь дальше библиотека будет только увеличиваться...

Я полагал, что её легко можно будет сделать как-нибудь в виде DLL-ки (например) и подключить к эксперту. Но попытался, и... не совсем понятно, как это сделать...

 
MQL_User #:

Я полагал, что её легко можно будет сделать как-нибудь в виде DLL-ки (например) и подключить к эксперту. Но попытался, и... не совсем понятно, как это сделать...

Есть аналоги dll, смотрите документацию