Оптимизаторы с лобовым подходом
Оптимизатор с лобовым подходом определяет оптимальное
решение путем систематического перебора всех потенциальных вариантов, т.е.
сочетаний правил, параметров или того и другого вместе. Поскольку требуется
проверить все варианты, оптимизация может быть чрезвычайно медленной, и, тем
медленнее она идет, чем больше комбинаций подлежит рассмотрению. Таким образом,
оптимизация с лобовым подходом подвержена действию правил комбинаторного
взрыва. Насколько же медленна оптимизация с лобовым подходом? Рассмотрим
случай, когда у нас есть четыре параметра и каждый из них может принимать одно
из 50 значений. Лобовая оптимизация потребует перебрать в тестах 504 (около б
миллионов) сочетаний параметров для поиска одного идеального; если (как,
например, характерно для TradeStation) каждый тест займет 1,62 с, то весь
процесс займет около 4 месяцев. Этот подход не очень практичен, особенно при
большом количестве параметров и их значений, а также в том случае, если, кроме
оптимизации, у вас есть и другие интересы в этой жизни. Тем не менее
оптимизация с лобовым подходом полезна и эффективна; при правильном
использовании она всегда находит самый лучший вариант, так что лобовой подход
предпочтителен для задач, где количество комбинаций можно перебрать за
несколько минут, а не за месяцы и годы.
Для оптимизации с лобовым подходом не требуется длинных
программ, обычно используются простые циклы. Параметры изменяются от начального
до конечного значения с определенным шагом при помощи оператора For loop (С,
C++, Бейсик, Pascal/Delphi) или Do loop (FORTRAN). Оптимизатор с лобовым
подходом для двух параметров, написанный на современном диалекте Бейсика, может
выглядеть примерно так:
BestFitness
= - 1.0E30
For
Parml = Parm1Start To Parm1Stop By Parm1lncr
For
Parm2 = Parm2Start To Parm2Stop2 By Parm2Incr
RunSystem
(Parm1, Parm2, GlobalData)
CurrentFitness
= CalcFitness (GlobalData)
WriteProgressLine
(GlobalData)
If
CurrentFitness > BestFitness Then
CurrentFitness
= BestFitness
BestParm1
= Parm1
BestParm2
= Parm2
End If
Next
Parm2
Next
Parm1
Поскольку оптимизаторы с лобовым подходом концептуально
просты и легки в программировании, их часто встраивают в более продвинутые
программные пакеты для трейдеров.
Как пример практической оптимизации с лобовым подходом
рассмотрим систему, основанную на пересечении двух скользящих средних,
реализованную при помощи TradeStation. Система оптимизировалась по показателю
общей прибыли (это единственный показатель, который TradeStation может
оптимизировать без дополнительных модулей). Ниже приведен код для торговой
системы на двух скользящих средних:
{ Система пересечения двух скользящих средних в Easy
Language }
Inputs:
LenA(4), LenB(l0);
If
(Average(Close, LenA) > Average(Close, LenB)) And
(Average(Close,
LenA)[1] <= Average(Close, LenB)[1] ) Then
Buy
("A") 1 Contract at Market;
If
(Average(Close, LenA) <= Average (Close, LenB)) And
(Average(Close,
LenA)[1] > Average (Close, LenB)[1]) Then
Sell
("B") 1 Contract at Market;
Система была оптимизирована изменением периода первой
скользящей средней (LenA) от 2 до 10 с шагом в 2. Период второй скользящей
средней (LenB) оптимизировался от 2 до 50 с тем же шагом. Шаг был принят более
1, чтобы испытывалось менее 200 сочетаний параметров (TradeStation может
хранить данные не более чем о 200 оптимизационных тестах). Поскольку были
исследованы не все возможные сочетания параметров, оптимизация не была
проведена идеально; лучшее значение могло оказаться пропущенным при поиске.
Таким образом, оптимизация проходила в 125 тестов, что заняло 3 мин. 24 с
времени для обработки данных за 5 лет исторических данных на конец дня на
компьютере с процессором Intel 486 частотой 66 МГц. Полученные результаты были
загружены в таблицу Excel и сортировались по общей прибыли. В табл. 3- 1
приведены различные показатели эффективности для 25 лучших вариантов.
В таблице: LENA означает период короткой скользящей
средней, LENB — период длинной скользящей средней, ЧИСТ. — чистую прибыль,
Д.ПРИБ, — чистую прибыль для длинных позиций, К.ПРИБ. — чистую прибыль для
коротких позиций, Ф.ПРИБ. — фактор прибыли, ДОХ — общую (не годовую) доходность
счета, МаксПК — максимальное падение капитала, СДЕЛ — общее количество
совершенных сделок, ПРИБ % — процент прибыльных сделок.
Поскольку оптимизация — проблема поиска и нахождения
решений, то порой найденные решения оказываются неожиданными, как случилось и в
данном примере. Привычная трейдерская мудрость гласит:
Тренд—
твой друг. При этом если вторая скользящая средняя имеет период меньше первого,
то наиболее выгодные сделки в табл. 1- 3 совершены против тренда. Эти выгодные контртрендовые сделки могли быть
не обнаружены, если бы для поиска не использовалась оптимизационная процедура.
Статья размещена в рубрике: Анализ входов и выходов в сделки на финансовых рынках
|