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

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть V). Классы и коллекция торговых событий, отправка событий в программу:

В предыдущих статьях мы начали создавать большую кроссплатформенную библиотеку, целью которой является упростить написания программ для платформы MetaTrader 5 и MetaTrader 4. В четвёртой части мы протестировали отслеживание торговых событий на счёте. В данной части создадим классы торговых событий, поместим их в коллекцию событий, откуда они будут отправляться в базовый объект библиотеки Engine и на график управляющей программы.

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


Записи же из обработчика событий советника в журнал выводиться не будут — они работают не в тестере. Если на демо-счёте покликать по кнопкам советника, то в журнал терминала будут выводиться три строки: две строки от метода вывода коротких сообщений класса CEvent и одна строка — из обработчика OnChartEvent() советника.

Пример вывода в журнал советника при установке и удалении отложенного ордера:

- Pending order placed: 2019.04.05 23:19:55.248 -                                                              
EURUSD 0.10 Sell Limit #375419507 at price 1.14562                                                             
OnChartEvent: id=1001, event=TRADE_EVENT_PENDING_ORDER_PLASED, lparam=375419507, dparam=1.14562, sparam=EURUSD 
- Pending order removed: 2019.04.05 23:19:55.248 -                                                             
EURUSD 0.10 Sell Limit #375419507 at price 1.14562                                                             
OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=375419507, dparam=1.14562, sparam=EURUSD


Автор: Artyom Trishkin

 
Интересно, как библиотека справляется с массой торговых нюансов. Поэтому, наверное, стоит попробовать пройти хотя бы начальный тест

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Меньше кода, больше прока.. пишем советник

fxsaber, 2019.03.12 21:46

Это задание вполне можно считать начальным тестом на умение писать торговлю под MT5. Так что каждый желающий может попробовать свои силы.

 
fxsaber:
Интересно, как библиотека справляется с массой торговых нюансов. Поэтому, наверное, стоит попробовать пройти хотя бы начальный тест

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

 
Artyom Trishkin:

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

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

 
Artyom Trishkin: отслеживание событий неттингового счёта будет опубликовано в следующей статье, затем 
библиотека будет автоматически определять и работать как с неттинговым счетом, так и с хеджевым типом счетов?
 
fxsaber:

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

Я плотно занялся разбором таких ситуаций. Надеюсь, получится их все обрабатывать корректно.

Интересно немого иное - на базе описываемой библиотеки будут созданы user-case функции для простого доступа к данным, собираемым и хранящимся в библиотеке, для использования торговых классов, и соответственно - для простого и лёгкого создания программ на её основе.
Хотя уже в том виде, что есть - есть возможность её использования, но на более низком уровне доступа - по указателям на списки коллекций, а из них - по указателям на любые их данные. Но это не соответствует заявленным в самом начале "претензиям" на лёгкость создания своих программ на основе библиотеки. Но это ведь лишь начало :)

 
Igor Makanu:
библиотека будет автоматически определять и работать как с неттинговым счетом, так и с хеджевым типом счетов?

Да. Уже. В следующей статье будет опубликовано.

 
Artyom Trishkin:

Да. Уже. В следующей статье будет опубликовано.

Правда пока только работа с историей счёта и рыночным состоянием. Затем можно будет на основе собираемых данных получать историю любой позиции на любом типе счёта. Включу в планы.
 

Очень мощный инструмент для тестирования, спасибо, что поделились!

 

Здравствуйте, Артём, поздравляю с отличной работой! Следуя описанию в тексте, кажется, что в функции CHistoryCollection::OrderSearch(...) может отсутствовать прерывание.

Цикл for всегда завершает все итерации от start-1 до 0, независимо от того, нашел он "потерянный ордер" или нет.

Возможно, было бы эффективнее включить прерывание после нахождения "потерянного заказа ":

ulong CHistoryCollection::OrderSearch(const int start,ENUM_ORDER_TYPE &order_type) 
  { 
   ulong order_ticket=0; 
   for(int i=start-1;i>=0;i--) 
     { 
      ulong ticket=::HistoryOrderGetTicket(i); 
      if(ticket==0) 
         continue; 
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)::HistoryOrderGetInteger(ticket,ORDER_TYPE); 
      if(this.IsPresentOrderInList(ticket,type)) 
         continue; 
      order_ticket=ticket; 
      order_type=type; 
      break; 
     } 
   return order_ticket; 
  } 

Что вы думаете?

Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Order Properties
Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Requests to execute trade operations are formalized as orders. Each order has a variety of properties for reading. Information on them can be obtained using functions Position identifier that is set to an order as soon as it is executed. Each executed order results in a deal that opens or modifies an already existing position. The identifier of...
 
Alvaro Arioni :

Здравствуйте, Артём, поздравляю с отличной работой! Следуя описанию в тексте, кажется, что в функции CHistoryCollection::OrderSearch(...) может отсутствовать прерывание .

Цикл for всегда завершает все итерации от start-1 до 0 , независимо от того, находит он "потерянный ордер" или нет.

Возможно, было бы эффективнее включать прерывание после нахождения "потерянного порядка":

...

Что вы думаете?

Возможно, существует не один потерянный заказ