Блог им. stanislav_g_9yc
Алиса извлекла циклический торговый сигнал из кривой цен с помощью полосового фильтра. Это, очевидно, работает, когда кривая имеет соответствующий цикл, но не так хорошо, когда цены ведут себя по-другому. Логично было бы снова использовать MMI в качестве фильтра, но с обратным знаком — не торговать в трендовых ситуациях и торговать, когда рынок не показывает тренда. К сожалению, это не сработает. Это связано с тем, что циклическое поведение, которое хочет использовать Алиса, не связано с наличием или отсутствием долгосрочной тенденции.
У Алисы есть другая идея. Полосовой фильтр настроен на цикл примерно в одну неделю (30 баров). Поэтому необходимо проверить, действительно ли кривая цен имеет такой цикл, и подавить торговые сигналы, если это не так. Для этого Алиса использует функцию DominantPeriod для введения дополнительного торгового условия (сценарий Alice2b.c):
var Cycle = DominantPeriod(Price,10); if(between(Cycle,20,40)) { if(crossUnder(Signal,-Threshold)) reverseLong(1); else if(crossOver(Signal,Threshold)) reverseShort(1); }
DominantPeriod определяет основной цикл кривой и возвращает соответствующее количество баров. На следующем графике вы можете увидеть, как эта функция реагирует на сигнал с переменной частотой:
Рис. 26 — Тестовая кривая и ее доминирующий цикл
Выше показана кривая цен, смоделированная тестовым сигналом. Он снова имеет уменьшающуюся частоту и, соответственно, увеличивающийся период от 10 до 60 тактов. Ниже показано возвращаемое значение функции DominantPeriod, которой подается эта кривая. Он возвращает значение между 10 и 60, что практически соответствует текущему периоду сигнала. Вы можете создать такие тестовые кривые с помощью скрипта Zorro «Filter.c».
Алиса применяет функцию DominantPeriod к серии Price с параметром фильтра 10, чтобы функция распознавала и очень короткие циклы. Результат сохраняется в переменной Cycle.
var Cycle = DominantPeriod(Price,10);
Теперь эта переменная содержит доминирующий цикл кривой цен. С помощью функции between Алиса проверяет, лежит ли этот цикл между 20 и 40 барами, т.е. может ли он быть отфильтрован полосовым фильтром, установленным на 30 баров:
if(between(Cycle,20,40)) {
...
Фильтрация по доминирующему циклу удваивает результат с примерно 40% до 80% годовой доходности.
При таких результатах всегда возникает вопрос: достигнет ли система таких же показателей в реальной торговле? Или результат — это просто удачный выбор параметров, которые случайно совпали с исторической кривой цен?
Чтобы определить, насколько надежна система, то есть как она реагирует на изменение условий на реальном рынке, простого бэктеста недостаточно. Алисе необходимо обучить стратегию.
Продолжение следует...
«Это, очевидно, работает, когда кривая имеет соответствующий цикл, но не так хорошо, когда цены ведут себя по-другому» — по другому, это как?
Вы когда нибудь видели случайный сигнал?
а апериодический сигнал вы когда-нибудь видели?
у Джона Эллерса последняя версия, такая
Запускаете для своего графика и считаете, это для WealthLab 6.9
Но опять всё завязано на фреймы, интервалы...
Нельзя построить качественную торговую стратегию, пользуясь переменными времени…
Добавлю твой комментарий в избранное))
Интересно, кто из нас прав окажется. Я в своей разработке конкретно с временем не испытывал каких особых трудностей, которых не было бы во всех остальных аспектах.
Может потому, что я не пользуюсь какими-то сложными формулами… у меня арифметика на уровне 2го класса школы
"… не испытывал каких особых трудностей, которых не было бы во всех остальных аспектах."
Я и не выделяю твой опыт из общего потока и «остальных аспектов!.)))
Увы и ах, но данная проблематика редко поднимается, но это как раз и свидетельствует о том, что она не проработана.
Я ею вплотную занялся 7 лет назад. До этого — эпизодически, ибо некогда было.
Кстати, математика там ваще „1+2“ максимум.