Может показаться, что библиотека имеет что-то общее с таким графиком в стандартном отчете MT5-Тестера
Пример, как получить данные для такого графика, ниже
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/ru/code/22710 void OnStart() { BESTINTERVAL BestInterval; // Создали объект для вычисления лучшего интервала торговли BestInterval.Set(); // Поместили историю торгов BestInterval.DeleteWorseInterval() // Выбросили плохой интервал double Profit[24], Loss[24]; ArrayInitialize(Profit, 0); ArrayInitialize(Loss, 0); for (int i = BestInterval.GetAmount() - 1; i >= 0; i--) { const DEAL Deal = BestInterval[i]; // i-я сделка в пересчитанной торговой истории const int hour = Deal.OpenTime % 3600; // час i-й сделки // Распределили профит по соответствующим массивам if (Deal.Profit > 0) Profit[hour] += Deal.Profit; else Loss[hour] -= Deal.Profit; } }
Но на самом деле библиотека предназначена не для одиночных прогонов и не для визуализации. На 99% она нужна для Оптимизации ТС, т.к. позволяет откопать классные режимы работы любой ТС, если такие в ней, пусть и скрытно, но заложены.
Лог, что показан в библиотеке - это стадия анализа уже после Оптимизации: одиночный прогон. По этому логу просто становится понятно, как конкретный экземпляр ТС (набор входных параметров) ведет себя на вычисленных интервалах. Т.е. это доп. контроль, но на конечной стадии. Основа - Оптимизация.
Библиотека для получения истории торгов использует MT4Orders.
Могут быть разные причины, почему MT4Orders не должен быть использован. Например, для сторонних анализаторов торговли.
В любом случае такой сценарий предусмотрен:
#include <fxsaber\BestInterval\BestInterval.mqh> // Вычисление лучшего интервала торговли void OnDeinit( const int ) { BESTINTERVAL BestInterval; // Создали объект для вычисления лучшего интервала торговли // Массив закрывающих сделок DEAL Deals[]; // Нужно для каждой закрывающей сделки записать два поля // Deals[i].Profit - профит закрывающей позицию сделки // Deals[i].OpenTime - время открытия (не закрытия) позиции, что закрывает сделка // BestInterval.Set(); // Поместили историю торгов - использует MT4Orders BestInterval.Set(Deals); // Разместили самостоятельно подготовленную историю торгов const int AmountIntervals = 3; // Сколько наихудших интервалов торговли выбросить for (int i = 0; i < AmountIntervals; i++) if (BestInterval.DeleteWorseInterval()) // Если что-то выбросили Print(BestInterval.ToString()); // Распечатаем полученные данные торговли else break; // Иначе - выйдем }
Т.е. Вы можете какие угодно данные подавать на вход для расчета лучшего интервала. Библиотека не зависит от платформы.
Обращу внимание, что алгоритм библы не предполагает никакой внутренней оптимизации параметров. Нет никакого перебора, т.к. основа - однопроходность: O(n) (n - количество закрывающих позиции сделок). И самое "медленное" звено - один QuickSort: O(n*log(n)). Поэтому и подходит великолепно для Оптимизации, т.к. не тормозит процесс.
ЗЫ Разработчики могли бы взять на вооружение алгоритм (т.к. однопроходный), для помещения его результатов в отчет одиночного прохода и создания штатного показателя
Идентификатор | Описание статистического показателя | Тип |
STAT_PROFIT | Чистая прибыль по окончании тестирования, сумма STAT_GROSS_PROFIT и STAT_GROSS_LOSS (STAT_GROSS_LOSS всегда меньше или равно нулю) | double |
STAT_BESTPROFIT | Прибыль на лучшем интервале. | double |
Идея библиотеки понятна, а реализация поражает простотой использования. Спасибо за проделанную работу.
Однако, напрашивается предложение автору: нужен пример использования на конкретном советнике - от начала включения библиотек и заканчивая формированием фильтра.
Идея библиотеки понятна, а реализация поражает простотой использования. Спасибо за проделанную работу.
Однако, напрашивается предложение автору: нужен пример использования на конкретном советнике - от начала включения библиотек и заканчивая формированием фильтра.
Поддерживаю на 101% :)
нужен пример использования на конкретном советнике - от начала включения библиотек и заканчивая формированием фильтра.
Посмотрите BestInterval_Example.mq5.
Чтобы применить найденный интервал после его расчета, нужно во входных параметрах указать BestInteval Action = true.
Особенности.
ЗЫ
Просьба в комментариях делиться результатами применения (как выше) библиотеки ДО и ПОСЛЕ в виде картинок и соответствующих кусков логов одиночного прохода MT4/5.
Существенно проще стало применять результат расчета к советнику. Для этого нужно нажать всего несколько раз кнопкой мыши.
Как небольшое резюме.
1. Берете любой советник и прописываете в его начало эти строки
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define BESTINTERVAL_ONTESTER // Критерий оптимизации - прибыль лучшего интервала. #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577 #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/ru/code/22710
2. Устанавливаете количество выбрасываемых интервалов и опцию не применения их.
3. Ставите Оптимизацию, либо сразу одиночный прогон. Если интересно, в логе Тестера будут данные расчета.
Amount of Delete Intervals = 0 00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39 SUMMARY: 00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39 Amount of Delete Intervals = 1 00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13 11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59 SUMMARY: 00:00:00 - 23:59:59 : Profit = 21628.00, Total = 949, PF = 1.97, Mean = 22.79, DD = 862.00, RF = 25.09
4. После одиночного прогона включаете опцию активации лучшего интервала и запускаете снова одиночный прогон.
5. Получаете отчет Тестера
И данные по примененным интервалам в логе
Amount of Delete Intervals = 1 00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13 11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59 SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
По итогу все результаты ДО и ПОСЛЕ + подробные данные (добавлены максимальная просадка и фактор восстановления - по балансу) по каждому подинтервалу лучшего интервала.
Проверить библиотеку можно на этом советнике.
Что значит?
'OnTester' - function already defined and has body BestInterval.mqh 504 8
не хочет компилировать
Что значит?
не хочет компилировать
Что сделали?
Что сделали?
пока ничего не делал, пытаюсь скомпилировать этот код:
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении #define BESTINTERVAL_ONTESTER // Критерий оптимизации - прибыль лучшего интервала. #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577 #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/ru/code/22710 #include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>
без Virtual компилируется,
без BestInterval тоже компилируется,
вместе не хочет.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
BestInterval:
Вычисление лучшего интервала торговли.
Автор: fxsaber