Библиотеки: Virtual - страница 20

 

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

Обсуждение статьи "Выцарапываем профит до последнего пипса"

fxsaber, 2019.09.13 12:05

Длительность одиночного прогона в Тестере.


Хедж.

80492522 ticks, 574300 bars generated. Environment synchronized in 0:00:12.339. Test passed in 0:03:15.881 (including ticks preprocessing 0:00:25.116).


Неттинг

80492522 ticks, 574300 bars generated. Environment synchronized in 0:00:10.930. Test passed in 0:01:29.189 (including ticks preprocessing 0:00:16.864).


Неттинг в два раза быстрее. Потому что логика проще.


С Virtual ситуация обратная. Хедж быстрее Неттинга на треть. Связано с более строгими проверками исполнения ордеров, чем в MT5-Тестере.

 
Не знаю, баг или фича. Но на всякий случай отмечу, что не всегда заполняются поля GetLastError() и MT4ORDERS::LastTradeResult.retcode при отсылке ордера через OrderSend. Например, если цена не выровнена на минимальное изменение цены, OrderSend корректно вернёт false. Но причину легко узнать не удастся, GetLastError() и MT4ORDERS::LastTradeResult будут заполнены старыми значениями, где были результаты исполнения прошлой операции.
 
traveller00:
Не знаю, баг или фича. Но на всякий случай отмечу, что не всегда заполняются поля GetLastError() и MT4ORDERS::LastTradeResult.retcode при отсылке ордера через OrderSend. Например, если цена не выровнена на минимальное изменение цены, OrderSend корректно вернёт false. Но причину легко узнать не удастся, GetLastError() и MT4ORDERS::LastTradeResult будут заполнены старыми значениями, где были результаты исполнения прошлой операции.

Наверное, перепутали ветку.

 
Я прошёлся по инклудам. Они лежали в папке Virtual. Но возможно принадлежат другому проекту. Или корень причины в другом проекте. Продублируйте тогда в нужной ветке пожалуйста.
 
traveller00:
Я прошёлся по инклудам. Они лежали в папке Virtual. Но возможно принадлежат другому проекту. Или корень причины в другом проекте. Продублируйте тогда в нужной ветке пожалуйста.

В Virtual этого инклуда нет. Перенесите сюда.

 
Конкретно эти проверки на цену я видел в файлах Order.mqh и Orders.mqh. А они лежат в папке Virtual. Поэтому и отпостил сюда. Спасибо, отпостил в той ветке.
 
traveller00:
Конкретно эти проверки на цену я видел в файлах Order.mqh и Orders.mqh. А они лежат в папке Virtual.

Какие проверки?

 

Похоже, я всё же туда запостил изначально, куда надо. Если BestInterval выключен, запрос уходит в MT4Orders и там отрабатывает нормально. По крайней мере возвращается какой-то код ошибки, похожий на правду.

А вот если BestInterval включен, то запрос уходит в Orders.mqh и затем в Orders.mqh. Там уже происходит this.Check(inPrice, inSL, inTP, Tick), где уже происходит NormalizeDouble на цену. В результате чего она может из-за округления стать больше исходной, что не пройдёт проверку Price <= Tick.ask и вернёт false, не заполнив поля ошибок.

 
traveller00:

Похоже, я всё же туда запостил изначально, куда надо. Если BestInterval выключен, запрос уходит в MT4Orders и там отрабатывает нормально. По крайней мере возвращается какой-то код ошибки, похожий на правду.

А вот если BestInterval включен, то запрос уходит в Orders.mqh и затем в Orders.mqh. Там уже происходит this.Check(inPrice, inSL, inTP, Tick), где уже происходит NormalizeDouble на цену. В результате чего она может из-за округления стать больше исходной, что не пройдёт проверку Price <= Tick.ask и вернёт false, не заполнив поля ошибок.

Если Вы про active-режим, то, наверное, стоит внимательно прочесть описание+ветку.

 
Видимо, включение BestInterval автоматически тянет за собой и включение Virtual. А он лишний раз коды ошибок не ставит. Раз фича, то и ладно. Отписал, чтоб знали, если кто вдруг ещё налетит.
Причина обращения: