Роботы

Поиск по ключевым словам

Оптимизация стратегии

В главе Тестирование стратегий был рассмотрен пример тестирования стратегии. В качестве основного индикатора был взят ценовой канал (Price Channel) длиной 20 дней. 20 дней — это примерно торговый месяц, но возникает вопрос, если взять ценовой канал длинной 1 неделя или 2 месяца или квартал, результаты торговли возможно будут лучше. Чтобы это проверить, можно изменить цифру 20 в коде

Top = Ref(HHV(H, 20), -1);
Bot = Ref(LLV(L, 20), -1);

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

Period = Optimize("Period", 20, 5, 65, 5);
Top = Ref(HHV(H, Period), -1);
Bot = Ref(LLV(L, Period), -1);
Mid = (Top+Bot)/2;

Buy = Cross(C, Top);
/* покупка когда цена закрытия пересекает верхнюю линию ценового канала снизу вверх */
Sell = Cross(Mid, C);
/* продажа когда цена закрытия пересекает среднюю линию ценового канала сверху вниз */

Основное изменение заключалось в том, что добавилась строка Optimize(«Period», 20, 5, 65, 5);

Функция Optimize обозначает, что АмиБрокер должен провести несколько тестов системы, изменяя Period от 5 до 65 с шагом 5. Таким образом, период будет равен 5, 10, 15 … 65. Период 20 — это значение по умолчанию, значение, которому будет равен Period, если мы решим сделать обычный тест вместо оптимизации.

Все дальнейшие действия по настройке Автоматического Анализатора аналогичны действиям при проведении обычного теста за исключением последнего шага. Вместо кнопки Back Test нажмите Optimize. В результате в таблице Automatic Analysis увидите отчет по проведенным тестам:

AmiBroker - Automatic Analysis - Optimize

Отчет можно отсортировать по интересующему параметру, кликнув на заголовке соответствующего столбца:

AmiBroker - Automatic Analysis - Optimize - Profit

В последнем столбце таблицы будут значения оптимизируемой переменной, соответствующие этому тесту:

AmiBroker - Automatic Analysis - Optimize - Period

Часто при оптимизации торговой системы большое значение имеет то, как результаты торговой системы изменяются при изменении её параметров. Для визуальной оценки такого влияния служит 3D optimization graph. Он строит трехмерную поверхность выбранного параметра торговой системы (параметра, по которому отсортированы результаты оптимизации) в зависимости от двух оптимизируемых переменных. В нашем случае оптимизирована только одна переменная, поэтому нельзя посмотреть трехмерную диаграмму.

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

Period = Optimize("Period", 20, 5, 65, 5);
empty = Optimize("empty", 1, 1, 5, 1);
Top = Ref(HHV(H, Period), -1);
Bot = Ref(LLV(L, Period), -1);
Mid = (Top+Bot)/2;

Buy = Cross(C, Top);
/* покупка когда цена закрытия пересекает верхнюю линию ценового канала снизу вверх */
Sell = Cross(Mid, C);
/* продажа когда цена закрытия пересекает среднюю линию ценового канала сверху вниз */

В результате, после оптимизации, получится много тестов системы с одинаковыми результатами:

AmiBroker - Automatic Analysis - Optimize - Results

Нажмите кнопку Optimize и выберите пункт View 3D optimization graph:

AmiBroker - Automatic Analysis - Optimize - View 3D optimization graph

В результате можно увидеть поверхность доходностей в зависимости от параметров системы:

AmiBroker 3D Graph viewer

В случае, если торговая система имеет больше двух оптимизируемых переменных, для того, чтобы увидеть поверхность зависимости, придется «зафиксировать» лишние переменные, временно превратив их в константы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *