Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть X): Совместимость с MQL4 - События открытия позиции и активации отложенных ордеров" - страница 4

 
Artyom Trishkin:

Нет. Просто прочитать статьи

Извини, но я столько буковок не знаю. )))

 
Alexey Viktorov:

И вот такая непонятка случилась:

Пока я гонял этот код на демке был установлен и удалён лимитный ордер

И вдруг при очередном издевательстве был модифицирована одна позиция, одна открыта и закрыта. Но вот откуда появилась запись об удалении давно удалённого ордера?

Ты заменил библиотеку файлами, которые я тебе давал? Библиотека в данной статье ещё не доделана же - в ней как раз есть эта недоработка - когда два события имеют одинаковые критерии для MQL4. В одиннадцатой статье завершено портирование текущего функционала библиотеки в MQL4. А в версии из этой статьи эта ошибка есть, и о её наличии косвенно указывают заключительные слова в статье:

Что дальше

В следующей статье сделаем отслеживание закрытия позиций и исправим ошибки, которые могут возникать в текущей реализации отслеживания событий для MQL4 — ведь установка и удаление ордеров у нас отслеживается кодом для MQL5, а там могут возникать некоторые нюансы, которые необходимо учитывать при работе под MQL4.
Если заменил файлы библиотеки, но ошибка всё равно проскакивает, то нужно словить ситуацию когда это проявляется - последовательность действий, приводящих к ошибке, и я исправлю.
 
Artyom Trishkin:

Ты заменил библиотеку файлами, которые я тебе давал? Библиотека в данной статье ещё не доделана же - в ней как раз есть эта недоработка - когда два события имеют одинаковые критерии для MQL4. В одиннадцатой статье завершено портирование текущего функционала библиотеки в MQL4. А в версии из этой статьи эта ошибка есть, и о её наличии косвенно указывают заключительные слова в статье:

Что дальше

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

Да заменил. Последовательность я уже ведь описал

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

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

Alexey Viktorov, 2019.05.27 17:59

И вот такая непонятка случилась:

Пока я гонял этот код на демке был установлен и удалён лимитный ордер

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

И вдруг при очередном издевательстве был модифицирована одна позиция, одна открыта и закрыта. Но вот откуда появилась запись об удалении давно удалённого ордера?

2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=443342388, dparam=1.11835, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1024, event=TRADE_EVENT_POSITION_CLOSED, lparam=443417294, dparam=1.11933, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: - Отложенный ордер удалён: 2019.05.27 14:54:10.000 -
EURUSD Удалён 0.01 Buy Limit #443342388 по цене 1.11835
2019.05.27 18:34:11.903 00 EURUSD,H1: - Позиция закрыта: 2019.05.27 18:33:02.000 -
EURUSD Закрыт Sell #443417294 по цене 1.11912, профит -0.21 USD
2019.05.27 18:33:02.755 00 EURUSD,H1: OnChartEvent: id=1022, event=TRADE_EVENT_POSITION_OPENED, lparam=443417294, dparam=1.11912, sparam=EURUSD
2019.05.27 18:33:02.755 00 EURUSD,H1: - Позиция открыта: 2019.05.27 18:33:02.000 -
EURUSD Открыт 0.01 Sell #443417294 [0.01 Market order Sell #443417294] по цене 1.11912
2019.05.27 18:29:21.913 00 EURUSD,H1: OnChartEvent: id=1050, event=TRADE_EVENT_MODIFY_POSITION_TAKE_PROFIT, lparam=443218277, dparam=1.12218, sparam=EURUSD
2019.05.27 18:29:21.913 00 EURUSD,H1: - Модифицирован TakeProfit позиции: 2019.05.27 18:27:45.000 -
EURUSD Buy #443218277: модифицирован TakeProfit: [1.12240 --> 1.12218]

В 15:01:14 удалил лимитный ордер поставленный ранее.

До 18:29 занимался своими делами. Советник стоял на графике.

В 18:29:21 модифицировал ранее установленную позицию.

В 18:33:02 поставил Sell

В 18:34:11 закрыл этот Sell

И в этот момент получил вторую запись о том, что удален лимит который был удалён в 15:01:14.

 
Alexey Viktorov:

Да заменил. Последовательность я уже ведь описал

Ты написал:

И вот такая непонятка случилась:

Пока я гонял этот код на демке был установлен и удалён лимитный ордер

И вдруг при очередном издевательстве был модифицирована одна позиция, одна открыта и закрыта. Но вот откуда появилась запись об удалении давно удалённого ордера?

А какова последовательность этих действий?

  1. установил лимитный ордер
  2. удалил лимитный ордер
  3. модифицирована позиция (а когда открыта была?)
  4. открыта позиция
  5. она же закрыта
В какой момент неверное событие появилось?
 
Artyom Trishkin:

Ты написал:

А какова последовательность этих действий?

  1. установил лимитный ордер
  2. удалил лимитный ордер
  3. модифицирована позиция (а когда открыта была?)
  4. открыта позиция
  5. она же закрыта
В какой момент неверное событие появилось?

Я дописал предыдущее сообщение.

 
Alexey Viktorov:

Да заменил. Последовательность я уже ведь описал


Ни в какой последовательности не могу получить эту ошибку.

Опиши пожалуйста последовательность, приводящую к ней.

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

 
Alexey Viktorov:

Я дописал предыдущее сообщение.

В 15:01:14 удалил лимитный ордер поставленный ранее.

До 18:29 занимался своими делами. Советник стоял на графике.

В 18:29:21 модифицировал ранее установленную позицию.

В 18:33:02 поставил Sell

В 18:34:11 закрыл этот Sell

И в этот момент получил вторую запись о том, что удален лимит который был удалён в 15:01:14.

Т.е., нужно:

  1. открыть позицию, подождать некое время,
  2. выставить лимитный ордер, подождать некое время,
  3. удалить лимитный ордер,
  4. модифицировать позицию,
  5. открыть позицию и закрыть позицию
Так?
 
Artyom Trishkin:

В 15:01:14 удалил лимитный ордер поставленный ранее.

До 18:29 занимался своими делами. Советник стоял на графике.

В 18:29:21 модифицировал ранее установленную позицию.

В 18:33:02 поставил Sell

В 18:34:11 закрыл этот Sell

И в этот момент получил вторую запись о том, что удален лимит который был удалён в 15:01:14.

Т.е., нужно:

  1. открыть позицию, подождать некое время,
  2. выставить лимитный ордер, подождать некое время,
  3. удалить лимитный ордер,
  4. модифицировать позицию,
  5. открыть позицию и закрыть позицию
Так?

Нет, ну следи за руками

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Лимитник поставлен в 14:54:10 и удалён в 15:01:14

Затем длительный перерыв в вещании. Всё молчит.

Затем подряд несколько движений, в 18:... перечисляю только минуты 29, 33 и 34. Вот в 34 и проскакивает это событие которое было три с половиной часа назад.

Вот список позиций.

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
Все они открыты утром и в обед. В 18 с минутами был открыт только, Sell и почти сразу закрыт.
 
Alexey Viktorov:

Нет, ну следи за руками

Лимитник поставлен в 14:54:10 и удалён в 15:01:14

Затем длительный перерыв в вещании. Всё молчит.

Затем подряд несколько движений, в 18:... перечисляю только минуты 29, 33 и 34. Вот в 34 и проскакивает это событие которое было три с половиной часа назад.

Вот список позиций.

Все они открыты утром и в обед. В 18 с минутами был открыт только, Sell и почти сразу закрыт.

Ну вот же ты пишешь:

В 15:01:14 удалил лимитный ордер поставленный ранее.

До 18:29 занимался своими делами. Советник стоял на графике.

В 18:29:21 модифицировал ранее установленную позицию.

В 18:33:02 поставил Sell

В 18:34:11 закрыл этот Sell

Ранее - это ДО установки лимитного ордера? Или после? Когда она была открыта? "Ранее" - это не конкретно. Тут наверняка есть значимость во времени всех действий - всё же сохраняется в список. Где-то есть значит равные условия, раз удаление давнего лимитника определяется повторно в момент закрытия позиции - позиция закрылась, проверили условия (всё же описано прямо в коде) и определили исходя из этих условий тип события. И далее уже идёт сортировка списка по типу определённого ордера в событии и отправляется событие в программу - значит есть перехлёст условий в MQL4, что они оказываются для библиотеки равными. Хотя именно это я и убрал в 11-й статье, которая ещё на проверке.

 
Artyom Trishkin:

Ну вот же ты пишешь:

В 15:01:14 удалил лимитный ордер поставленный ранее.

До 18:29 занимался своими делами. Советник стоял на графике.

В 18:29:21 модифицировал ранее установленную позицию.

В 18:33:02 поставил Sell

В 18:34:11 закрыл этот Sell

Ранее - это ДО установки лимитного ордера? Или после? Когда она была открыта? "Ранее" - это не конкретно. Тут наверняка есть значимость во времени всех действий - всё же сохраняется в список. Где-то есть значит равные условия, раз удаление давнего лимитника определяется повторно в момент закрытия позиции - позиция закрылась, проверили условия (всё же описано прямо в коде) и определили исходя из этих условий тип события. И далее уже идёт сортировка списка по типу определённого ордера в событии и отправляется событие в программу - значит есть перехлёст условий в MQL4, что они оказываются для библиотеки равными. Хотя именно это я и убрал в 11-й статье, которая ещё на проверке.

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

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

Alexey Viktorov, 2019.05.27 18:50

Нет, ну следи за руками

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Лимитник поставлен в 14:54:10 и удалён в 15:01:14

Затем длительный перерыв в вещании. Всё молчит.

Затем подряд несколько движений, в 18:... перечисляю только минуты 29, 33 и 34. Вот в 34 и проскакивает это событие которое было три с половиной часа назад.

Вот список позиций.

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
Все они открыты утром и в обед. В 18 с минутами был открыт только, Sell и почти сразу закрыт.

Модифаил только одну, выделенную позицию. В этом сомнений нет. Поставлена ещё утром. Модифицировал её несколько раз. Мне не важно было какую модифицировать. А у этой уже поставил тейк. Вот его и терзал.

Вот все лимитники и последний Sell.

443340041 2019.05.27 14:46:32 buy limit 0.01 eurusd 1.11815 0.00000 0.00000 2019.05.27 14:46:55 1.11974 cancelled 
443340283 2019.05.27 14:47:15 buy limit 0.01 eurusd 1.11796 0.00000 0.00000 2019.05.27 14:47:27 1.11974 cancelled 
443340764 2019.05.27 14:48:42 buy limit 0.01 eurusd 1.11830 0.00000 0.00000 2019.05.27 14:52:51 1.11962 cancelled 
443340819 2019.05.27 14:48:54 buy limit 0.01 eurusd 1.11761 0.00000 0.00000 2019.05.27 14:50:22 1.11977 cancelled 
443340874 2019.05.27 14:49:06 buy limit 0.01 eurusd 1.11694 0.00000 0.00000 2019.05.27 14:52:37 1.11963 cancelled 
443341012 2019.05.27 14:49:32 buy limit 0.01 eurusd 1.11657 0.00000 0.00000 2019.05.27 14:51:22 1.11973 cancelled 
443342301 2019.05.27 14:53:55 sell stop 0.01 eurusd 1.11764 0.00000 0.00000 2019.05.27 15:01:03 1.11956 cancelled 
443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 
443417294 2019.05.27 18:33:02 sell 0.01 eurusd 1.11912 0.00000 0.00000 2019.05.27 18:34:11 1.11933 0.00 0.00 0.00 -0.21 

Выделены как раз тот удалённый лимитник и тот Sell. Видимо где-то осталось событие удаления. Но вот почему оно "проснулось" не с открытием этого Sell, а только с закрытием???