логично! еще раз спасибо! Вы кладезь знаний и идей!
... есть еще идея, но не до конца сформированная - запустить Virtual в тестере и по окончании прохода тестера выполнить виртуальную торговлю не проблема, а вот время которое тратит агент на сам "пустой" проход (без сделок) все таки присутствует
насколько помню, в тестере переменные/структуры/классы, описанные с модификаторами const static в глобальной видимости программы - инициализируются один раз при запуске агента тестирования, туда бы подложить тики для Virtual
и хотелось бы "обмануть" тестер, чтобы тестировать на периоде 1 год в Virtual , а сам проход тестера ограничить, ну например 2-3 дня - это должно сократить время при оптимизации
проверил разные варианты - чтение из файла, чтение из БД Redis (БД в памяти) - все работает не быстрее штатного тестера хоть и тест в виртуальном окружении
НО очень хорошо работает если подключить тики в качестве ресурса, меня интересовало тестирование в режиме OHLC M1 - создал советник для тестера, прогнал его в режиме OHLC M1, собрал тестерные тики в массив и записал массив в файл с помощью FileWriteArray(), размер за 1 год по Евро получился 84 Мб
затем в тестовый советник подключил этот файл в виде ресурса:
выставил в тестере дату тестирования 2 дня и в виртуальном окружении прогнал 1000 проходов - скорость против обычной оптимизации на слабом ноуте ровно в 3 раза 1мин 38 сек против 5 мин хх сек
тестовый советник такой:
#resource "\\Files\\EURUSD_ticks.bin"asMqlTick ExtData[]
inputint param = 0;
double Lots = 0.1;
int Interval = 1000; // Время жизни позиции#include <MT4Orders.mqh>
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577void MyStrategy()
{
MqlTick Tick;
SymbolInfoTick(_Symbol, Tick);
if (!OrderSelect(OrdersTotal() - 1, SELECT_BY_POS))
OrderSend(_Symbol, OP_BUY, Lots, Tick.ask, 100, 0, 0); // Если нет позиции - открываемelseif (TimeCurrent() - OrderOpenTime() > Interval) // Если позиция прожила больше заданного времени
{
// Перевернули позицию
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);
OrderSend(_Symbol, 1 - OrderType(), Lots, OrderClosePrice(), 100, 0, 0);
}
}
//+------------------------------------------------------------------+doubleOnTester()
{
for(int n = ArraySize(ExtData), i = 0; i < n; i++)
{
VIRTUAL::NewTick(ExtData[i], MyStrategy);
}
return(AccountBalance());
}
//+------------------------------------------------------------------+intOnInit()
{
if(!VIRTUAL::SelectByHandle(VIRTUAL::Create())) return(INIT_FAILED);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+voidOnTick()
{
}
и это для торговли одним ордером, если будет сетка ордеров, то разница скорости тестирования должна быть более существенной!
ЗЫ: есть еще подозрение, что можно увеличить немного скорость если записать не всю структуру MqlTick , лишь Bid / Ask и Time - меньше объем данных, меньше ресурсы процессора будет потреблять, потом попробую проверить
а что выкинуть то? т.е. переписать ЕА под МТ5 и будет быстрее? - Virtual будет работать с МТ5-style?
Virtual работает в MT4-style. Ему для этого не нужен MT4Orders.
Если Virtual использовать только, как Тестер выше, то он еще может быть ускорен. Сеточные ТС, конечно, гораздо быстрее в виртуале, чем в штатном Тестере. Но библа под них не затачивалась, т.к. не практикую. Ускоритель сеток теоретически возможен.
Запустил в мат. режиме Ваш советник, добавив для наглядности в конец исходника эти строки.
#define REPORT_TESTER // В тестере будут автоматически записываться отчеты#define REPORT_INTERACTIVE_CHARTS // Добавляет в отчет интерактивные графики.#define REPORT_BROWSER // Создание отчета с запуском браузера - требует разрешения DLL.#include <Report.mqh> // https://www.mql5.com/ru/code/22577
На выходе получил HTML-проход. Вроде, все нормально в нем.
В исходном варианте Вы не закрывали открытые позиции в конце бэктеста. Т.е. делали аналогию этому:
свойства кастомного символа после перезагрузки терминала тестер портит, где то Ваш код-сервис был чтоб исправлять это
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Пользовательские символы. Ошибки, баги, вопросы, предложения.
fxsaber, 2019.09.15 22:30
Решение проблемы автоматического изменения валют кастомного символа после перезагрузки Терминала.
уже и забыл про эту особенность. Наверное, еще по той причине, что в режиме по пипсам гоняю.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
Igor Makanu, 2021.01.04 11:11
логично! еще раз спасибо! Вы кладезь знаний и идей!
... есть еще идея, но не до конца сформированная - запустить Virtual в тестере и по окончании прохода тестера выполнить виртуальную торговлю не проблема, а вот время которое тратит агент на сам "пустой" проход (без сделок) все таки присутствует
насколько помню, в тестере переменные/структуры/классы, описанные с модификаторами const static в глобальной видимости программы - инициализируются один раз при запуске агента тестирования, туда бы подложить тики для Virtual
и хотелось бы "обмануть" тестер, чтобы тестировать на периоде 1 год в Virtual , а сам проход тестера ограничить, ну например 2-3 дня - это должно сократить время при оптимизации
проверил разные варианты - чтение из файла, чтение из БД Redis (БД в памяти) - все работает не быстрее штатного тестера хоть и тест в виртуальном окружении
НО очень хорошо работает если подключить тики в качестве ресурса, меня интересовало тестирование в режиме OHLC M1 - создал советник для тестера, прогнал его в режиме OHLC M1, собрал тестерные тики в массив и записал массив в файл с помощью FileWriteArray(), размер за 1 год по Евро получился 84 Мб
затем в тестовый советник подключил этот файл в виде ресурса:
выставил в тестере дату тестирования 2 дня и в виртуальном окружении прогнал 1000 проходов - скорость против обычной оптимизации на слабом ноуте ровно в 3 раза 1мин 38 сек против 5 мин хх сек
тестовый советник такой:
и это для торговли одним ордером, если будет сетка ордеров, то разница скорости тестирования должна быть более существенной!
ЗЫ: есть еще подозрение, что можно увеличить немного скорость если записать не всю структуру MqlTick , лишь Bid / Ask и Time - меньше объем данных, меньше ресурсы процессора будет потреблять, потом попробую проверить
выставил в тестере дату тестирования 2 дня
Мат. режим логичней.
никогда не пользовался, проверил, да все работает
в общем крутая штука этот Virtual!
Мат. режим логичней, как и использование VIRTUAL:Tester. MT4Orders лучше выкинуть при таком раскладе.
а что выкинуть то? т.е. переписать ЕА под МТ5 и будет быстрее? - Virtual будет работать с МТ5-style?
а что выкинуть то? т.е. переписать ЕА под МТ5 и будет быстрее? - Virtual будет работать с МТ5-style?
Virtual работает в MT4-style. Ему для этого не нужен MT4Orders.
Если Virtual использовать только, как Тестер выше, то он еще может быть ускорен. Сеточные ТС, конечно, гораздо быстрее в виртуале, чем в штатном Тестере. Но библа под них не затачивалась, т.к. не практикую. Ускоритель сеток теоретически возможен.
Весь Тестер для мат. режима.
оставил такой код:
не работает - результаты не правильные, было 993571.2$ стало -642.48$
UPD: в облако залил EURUSD_ticks.bin (84 Мб)
https://mega.nz/file/yBlxwI7S#dNwIL1uSCi51lQyrBfTdb01-6zPlnsLQfclqClvFs4c
не работает - результаты не правильные, было 993571.2$ стало -642.48$
Подготовил данные.
Запустил в мат. режиме Ваш советник, добавив для наглядности в конец исходника эти строки.
На выходе получил HTML-проход. Вроде, все нормально в нем.
В исходном варианте Вы не закрывали открытые позиции в конце бэктеста. Т.е. делали аналогию этому:
UPD: в облако залил EURUSD_ticks.bin (84 Мб)
https://mega.nz/file/yBlxwI7S#dNwIL1uSCi51lQyrBfTdb01-6zPlnsLQfclqClvFs4c
В прицепе HTML-отчет.
что-то не так работает в режиме OHLC M1
ТС - открыли ордер, по закрытию смотрим профит ордера и удваиваем убыток с переворотом позиции:
Virtual много сделок пропустил, приатачил отчеты, тест 01.01.2020 - 31.12.2020
EURUSD_ticks.bin : https://mega.nz/file/KR0X2IQS#dNwIL1uSCi51lQyrBfTdb01-6zPlnsLQfclqClvFs4c