Обсуждение статьи "Универсальный торговый эксперт: Событийная модель и прототип торговой стратегии (Часть 2)" - страница 2

 

Здравствуйте,

Я попытался скомпилировать ваш код (Agent.mq5) и получил следующую ошибку. Build 1274

Внутренняя ошибка компилятора Agent.mq5 1 1

Также есть небольшая опечатка в строке 388 файла Dictionary.mqh

/| Returns previous object.       The current object becomes previous|
 

На билде 1241 код компилируется хорошо, поэтому я попытался запустить бэктест. Он не принимает никаких сделок.

Покопавшись немного на , я обнаружил, что это связано с режимом заполнения. На используемом мной брокере/символе разрешен режим ORDER_FILLING_IOC. Ваш класс TradeCustom по умолчанию устанавливает режим заполнения ORDER_FILLING_FOK. И я застрял на месте, как можно изменить этот режим заполнения, чтобы советник Agent.mq5 мог вести торговлю? Я могу поискать, но это займет у меня много времени.

В этом и заключается проблема подобных инструментов, очень похожих на советник MQL5 wizard от Metaquotes, он практически непригоден для тех, кто не знает всех тонкостей работы с классами. Как только вы сталкиваетесь с проблемой, которая не была предусмотрена автором, исправить ее или изменить/дополнить становится настоящим мучением. Я не вижу никакой реальной разницы между вашим решением и решением от Metaquotes (wizard).

В любом случае, поздравляю с огромной работой. Это отличная работа программиста.

 

Василий, как "руководство по применению ООП в трейдинге" Ваши работы очень познавательны и полезны, а вот, как "рабочий торговый движок" очень бедны. Я, в частности, о разнообразии "административных функций".

Сегодня МТ5 по доступности и лояльности к трейдеру близится к МТ4 (добавлена хэдж-торговля). За многие годы МТ4 накопило достаточно богатый административный функционал в свободном доступе:

* частичное закрытие позиций (я про контроль за этим процессом со стороны торгового движка);

* разнообразие расчёта СТОПов;

* динамические СТОПы;

* виртуальные СТОПы;

* профессиональный ММ (это контроль за распределением средств м\у стратегиями). Конечный, а главное устойчивый результат торговли, зависит в большей степени не от правильного входа и выхода в рынок (хоя и это важно), а от правильного инвестирования;

* виртуальная троговля;

* построение сетей. Т.е. взаимосвязь серии ордеров, объединённых м\у собой единой логикой формирования размеров лотов каждой позиции в серии.

* оставляет желать лучшего и реализация обработки исключений при содании торговых приказов (реквоты, ошибка № 130 [МТ4], STOPLEVEL, FREEZELEVEL и т.д. и т.п.).

Возникает вопрос: "Будете в свободном доступе развивать дальше свой движок?"

 
Гога:

Василий, как "руководство по применению ООП в трейдинге" Ваши работы очень познавательны и полезны, а вот, как "рабочий торговый движок" очень бедны. Я, в частности, о разнообразии "административных функций".

Сегодня МТ5 по доступности и лояльности к трейдеру близится к МТ4 (добавлена хэдж-торговля). За многие годы МТ4 накопило достаточно богатый административный функционал в свободном доступе:

* частичное закрытие позиций (я про контроль за этим процессом со стороны торгового движка);

* разнообразие расчёта СТОПов;

* динамические СТОПы;

* виртуальные СТОПы;

* профессиональный ММ (это контроль за распределением средств м\у стратегиями). Конечный, а главное устойчивый результат торговли, зависит в большей степени не от правильного входа и выхода в рынок (хоя и это важно), а от правильного инвестирования;

* виртуальная троговля;

* построение сетей. Т.е. взаимосвязь серии ордеров, объединённых м\у собой единой логикой формирования размеров лотов каждой позиции в серии.

* оставляет желать лучшего и реализация обработки исключений при содании торговых приказов (реквоты, ошибка № 130 [МТ4], STOPLEVEL, FREEZELEVEL и т.д. и т.п.).

Возникает вопрос: "Будете в свободном доступе развивать дальше свой движок?"

Да, развитие движка планируется и дальше. И он всегда останется свободным.

На счет остального что Вы перечислили - пишите свои стопы, ММ и "административные функции" в рамках CStrategy. Никто этого не запрещает.

Контроль ошибок всегда был - юзайте класс CTrade и его ответы для контроля ошибок. 

 
Vasiliy Sokolov:

Да, развитие движка планируется и дальше. И он всегда останется свободным.

На счет остального что Вы перечислили - пишите свои стопы, ММ и "административные функции" в рамках CStrategy. Никто этого не запрещает.

Контроль ошибок всегда был - юзайте класс CTrade и его ответы для контроля ошибок. 

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

P.S. Что следующим ожидать (какой функционал) в очередной статье?

 
Гога:

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

Что, по вашему мнению, должен сделать торговый движок, если в приказе на открытие сделки СЛ слишком близко к цене открытия:

  • не открывать сделку;
  • скорректировать стоп на минимально допустимое расстояние и открыть сделку (а если новости и стоп-левел 50 четырехзначных пунктов — тоже?);
  • скорректировать стоп, как в предыдущем пункте, пропорционально скорректировать лот (чтобы риск оставался таким же), и открыть сделку. Если при этом лот становится меньше минимально допустимого:
    • отменить вход, чтобы не нарушать риск-менеджмент,
    • войти минимальным лотом.
  • скорректировать стоп-лосс и все отложенные ордера, которые стоят на том же уровне (если это сетка);
  • скорректировать стоп-лосс и пропорционально тейк-профит;
  • ...
Вы понимаете, что, в зависимости от стратегии, нужно использовать разные варианты?

Да, можно сделать элементарную корректировку на минимальное расстояние (как опцию), но абсолютно универсального рецепта не существует. 

 
Гога:

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

P.S. Что следующим ожидать (какой функционал) в очередной статье?

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

Пример из практики. Если Вы в CStrategy запросите какую-либо цену, например так:

double ask = Ask();

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

 
Andrey Khatimlianskii:

Что, по вашему мнению, должен сделать торговый движок, если в приказе на открытие сделки СЛ слишком близко к цене открытия:

  • не открывать сделку;
  • скорректировать стоп на минимально допустимое расстояние и открыть сделку (а если новости и стоп-левел 50 четырехзначных пунктов — тоже?);
  • скорректировать стоп, как в предыдущем пункте, пропорционально скорректировать лот (чтобы риск оставался таким же), и открыть сделку. Если при этом лот становится меньше минимально допустимого:
    • отменить вход, чтобы не нарушать риск-менеджмент,
    • войти минимальным лотом.
  • скорректировать стоп-лосс и все отложенные ордера, которые стоят на том же уровне (если это сетка);
  • скорректировать стоп-лосс и пропорционально тейк-профит;
  • ...
Вы понимаете, что, в зависимости от стратегии, нужно использовать разные варианты?

Да, можно сделать элементарную корректировку на минимальное расстояние (как опцию), но абсолютно универсального рецепта не существует. 

Андрей, не нужно усложнять - правильный ответ: "скорректировать стоп на минимально допустимое расстояние и открыть сделку (а если новости и стоп-левел 50 четырехзначных пунктов — тоже?)". Слишком маленький СТОП длжен работать виртуально (без модификации). А сделка должна быть открыта по поступившему сигналу. В случае построения сетей дополнительные правила прописываются на этапе формирования СТОПа.
 
Vasiliy Sokolov:

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

Пример из практики. Если Вы в CStrategy запросите какую-либо цену, например так:

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

Спорить здесь бесполезно. Это сугубо личночстный подход. Но я себе не позволяю получать в лог такие сообщения:

2016.07.01 11:04:26.866 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 10:10:30.908 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 08:18:19.129 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 07:59:48.209 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 06:29:19.308 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 04:59:36.505 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 03:13:03.656 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.07.01 02:59:55.757 ImpulseExpert (EURUSD,H1)       Impulse Strategy 0.05 . Trading environment has changed. Rebuild the environment
2016.06.30 17:59:56.557 ImpulseExpert (EURUSD,H1)       CTrade::OrderSend: modify position #1451923 EURUSD (sl: 0.00000, tp: 0.00000) [no changes]
об этом должен заботится движок.
 
Гога:

Спорить здесь бесполезно. Это сугубо личночстный подход. Но я себе не позволяю получать в лог такие сообщения:

об этом должен заботится движок.
О чем "об этом"? Это информационное сообщение идущее совместно с системными сообщениями, которые вы зачем-то почистили.