![]() |
AmiSite.ruЭтот ресурс посвящен замечательной программе технического анализа - AmiBroker. Советы начинающим пользователям. Индикаторы, Системы, Сканеры и другие коды AFL которые показались мне интересными как написанные мной, так и найденные в сети.
|
Учебник
Оптимизация.В главе Тестирование стратегий мы рассмотрели, как протестировать систему. В качестве основного индикатора был взят ценовой канал (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);
Как видите, основное изменение заключается в том, что добавилась сорока 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 от 5 до 65 с шагом 5. Таким образом, период будет равен 5, 10, 15 и т.д. до 65. 20 это значение по умолчанию, значение, которому будет равен Period если мы решим сделать обычный тест вместо оптимизации. Все дальнейшие действия по настройке Автоматического Анализатора аналогичны действиям при проведении обычного теста за исключением последнего шага. Вместо кнопки Back Test жмем Optimize. В результате в таблице АА увидим строки суммарного отчета по проведенным тестам. ![]() Которые можно отсортировать по интересующему нас параметру, кликнув на заголовке соответствующего столбца. ![]() В последнем столбце таблицы будут значения оптимизируемой переменной соответствующие этому тесту. ![]() Часто при оптимизации торговой системы большое значение имеет то, как результаты торговой системы изменяются при изменении её параметров. Для визуальной оценки такого влияния служит 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); /* продажа когда цена закрытия пересекает среднюю линию ценового канала сверху вниз */ ![]() ![]() ![]() В случае, если торговая система имеет больше двух оптимизируемых переменных, для того, чтобы увидеть поверхность зависимости придется «зафиксировать» лишние переменные, временно превратив их в константы. В заключении, хочется предупредить начинающих строителей систем от чрезмерного увлечения оптимизаций. Удачи. |