тему прочитал. В вашем примере уже есть нормальный эмпирический эксперимент, и я бы не пытался заранее назначать абстрактный штраф за каждый дополнительный параметр.
Я бы столкнул лоб в лоб два полностью определённых процесса:
Три общих порога для всех 12 ETF.
Три отдельных порога для каждого ETF.
На каждом шаге оба варианта оптимизируются на одном и том же прошлом участке, после чего параметры фиксируются и проверяются на следующем OOS-отрезке. Затем окно сдвигается. В результате нас интересует не общий Sortino за 25 лет, а то, насколько преимущество раздельной настройки регулярно выживает на новых данных.
В качестве грубой, но понятной оценки можно взять:
прирост раздельной настройки на обучении минус её прирост на OOS.
Допустим, отдельные параметры дали относительно общих +1 к Sortino внутри выборки, а на последовательных OOS-участках осталось только +0,1. Значит, примерно 90% красивого преимущества испарилось после выхода на новые данные. Я бы называл это не универсальной мерой переподгонки, а эмпирической оценкой оптимизма конкретной процедуры.
Второй тест, на мой взгляд, ещё интереснее: построить матрицу переноса параметров. Параметры, подобранные на XLI, применить к остальным ETF, параметры XLK — тоже ко всем и так далее.
Если на OOS каждый инструмент устойчиво лучше работает именно со своими параметрами, чем с чужими или общими, значит индивидуальность инструментов реальна. Если красивая диагональ появляется только на обучении, а на новых данных исчезает, то мы просто дали оптимизатору 36 способов подстроиться под шум.
При этом 12 ETF нельзя считать двенадцатью полностью независимыми подтверждениями: они связаны общим рынком. Поэтому сравнивать лучше не только результаты отдельных систем, но и временной ряд всего портфеля, а доверительные интервалы строить блоками по датам.
Я бы ещё добавил промежуточный вариант: не один набор параметров на всех и не отдельный набор на каждый инструмент, а несколько групп похожих ETF. Возможно, реальный максимум устойчивости окажется именно посередине.
В общем, здесь согласен с вами: считать количество параметров недостаточно. Гораздо полезнее посмотреть, сколько преимущества раздельной настройки переживает перенос во времени и на соседние инструменты. Такой результат уже можно пощупать руками, а не только обсуждать на уровне степеней свободы.
oreshkinalexey, все правильно, но, на мой вкус, через чур академично, я бы привнес больше эмпирики. Вот тут я попытался в качестве затравки предложить модельный пример. Дискуссия получилась, но не особо. smart-lab.ru/blog/1013172.php
хороший пример того, почему количество настраиваемых чисел само по себе ещё не определяет сложность системы.
В первом варианте есть четыре явно подбираемых параметра: два периода индикаторов и два порога. Во втором числовой параметр действительно один, но взаимодействие двух состояний индикатора с пятью днями недели делит выборку уже на десять режимов — если каждая «краска» используется как отдельное торговое состояние.
Где больше подгонки, по числу параметров или цветов заранее не определить. Важен весь класс проверенных гипотез:
— были ли индикаторы выбраны заранее или отобраны из десятков вариантов;
— был ли день недели включён до теста или после просмотра результатов;
— перебирались ли отдельные дни и их комбинации;
— назначались ли разные действия каждой из десяти ячеек;
— сколько независимых сделок осталось внутри каждого режима.
Например, у пяти дней недели всего один категориальный признак, но если разрешить выбирать любые комбинации дней, получаем уже 32 возможные маски включения и исключения — ещё до подбора параметра индикатора. Формально числовой параметр один, а фактический перебор уже немаленький.
Поэтому я бы говорил не просто о количестве параметров, а об эффективной сложности системы: сколько разных правил она способна породить и сколько вариантов фактически было просмотрено при выборе финального.
Проверять при этом нужно весь процесс целиком. Выбор индикатора, порога, дней недели и правил взаимодействия выполняется только на обучающем окне, после чего всё фиксируется и проверяется на следующем OOS-участке. Затем окна сдвигаются вперёд. Если день недели или схема раскраски выбирались с учётом результатов тестового периода, это такая же подгонка, как и оптимизация обычного коэффициента.
Поэтому во втором варианте подгонки вполне может оказаться больше, несмотря на один формально настраиваемый параметр. Само число коэффициентов — слишком грубая оценка сложности.
преимущество, которое просто неинтересно крупному капиталу из-за ограниченной ёмкости
Но, именно крупный капитал разрабатывает мощные системы, которые прочесывают рынок ежечасно и как синий кит собирают эти мелкие профиты.
Вечных граалей не существует. Интересно было бы создать систему, которая сама бы регулярно выискивала новые локальные преимущества и определяла деградацию прежних и не только по паттернам.
Я бы приобрел что-то подобное или поучаствовал в разработке.
oreshkinalexey, это все понятно любому начинающему алготрейдеру (локальные преимущества с ограниченным сроком жизни). Но по факту, как только эти преимущества поддаются обнаружению, они почти сразу же перестают работать.
Поэтому моя стратегия — пересиживать локальное противодействие и дожидаться тейкпрофитов, рассчитывая силы со свободной маржой (при выносах) и свопами (при затяжном пересиживании) — это уже второй уровень прогнозирования целесообразности взятия позы. Первый — где будет цена.
Первый уровень прогнозирования базируется на экстраполяции ценовых рядов и возврате к среднеквадратичному в процессе движения к прогнозным уровням. И все бы было очень неплохо, если бы не свопы)))
oreshkinalexey, конечно сравнивал не один раз, с разными эффективными величинами окон, на разных ценовых рядах.
И то, что число параметров у ЕМА минимально, тоже большой плюс. А всякие дополнительные подпорки к системам с небольшим числом параметров я очень не люблю. Обычно, за небольшой прибыток получаем риск неустойчивости.
Вообще, тема числа параметров интуитивно понятная, но лично у меня не формализована.
Вот пример. Допустим, есть два однопараметирических индикатора, у каждого свой порог. Итого 4 подбираемых параметра и ценовой ряд раскрашивается в 4 цвета.
Допустим также, что у нас есть один однопараметрический индикатор без порога (вернее, порог естественный и не является переменным). И есть день недели. Подбираемый параметр 1, а ценовой ряд красится в 10 красок.
Вопрос, где больше подгонки.
это показательный результат. Фильтрация и прогнозирование — всё-таки разные задачи. Баттерворт, преобразование Гильберта, вейвлеты или SSA могут красиво разложить либо сгладить уже наблюдаемый ряд, но сами по себе не создают информацию о следующем движении цены.
В реальном времени за сглаживание обычно приходится платить задержкой: уменьшаем лаг — возвращаем шум. Адаптивные AMA, KAMA и подобные методы дополнительно оценивают текущее состояние ряда, то есть добавляют параметры и ещё один источник нестабильности.
Поэтому EMA оказывается сильным базовым вариантом: один понятный параметр, прозрачный лаг и минимум возможностей для переоптимизации.
Сравнивать более сложные фильтры с EMA, на мой взгляд, нужно при сопоставимом эффективном лаге и степени сглаживания. Параметры каждого метода подбираются только на прошлом участке, затем фиксируются и проверяются на следующем, ранее не использованном отрезке. После этого обучающее и тестовое окна сдвигаются вперёд, а итог строится только из последовательных тестовых участков. То есть речь идёт о walk-forward OOS-проверке, а не об одном удачно выбранном тестовом периоде.
Если адаптивный метод предполагает периодическую перенастройку, в тесте нужно воспроизводить ровно тот же график перенастройки, который был бы доступен в реальной торговле. Иначе будущая информация незаметно попадёт в параметры.
Если после такой проверки и учёта издержек сложный фильтр не обыгрывает EMA, значит он просто более дорогим способом сгладил тот же ряд.
Полностью выбрасывать такие методы я бы всё же не стал. Они могут быть полезны как вспомогательные признаки режима, оценки отношения сигнал/шум или предварительного преобразования перед поиском аналогов. Но ожидать от них самостоятельного предсказателя направления, вероятно, не стоит.
Интересно, вы сравнивали методы при примерно одинаковом эффективном лаге и степени сглаживания? И параметры фиксировались один раз или перенастраивались последовательно по мере движения по истории?
oreshkinalexey, деталей я уже не помню, но я пытался использовать прогноз как индикатор направления движения. Лучше обычной EMA не получилось, и я не стал больше напрягаться. Тем более, что ждал гораздо большего.
Вообще, меня удивило, что почти весь стандартный арсенал фильтрации, от фильтра НЧ баттерворта до численной реализации преобразования Гильберта не превзошли в моих исследованиях обычную скользяшку. И все АМА, КАМА и прочие адаптивные штучки тоже я счел малополезными. Даже на вейвлеты потратил время впустую.
И это при том, что и сами скользяшки тоже не подарок, но хотя бы проще — некуда.
по схеме с равным риском согласен: веса, обратные оценке риска, — хороший базовый benchmark именно потому, что такая схема почти ничего лишнего не пытается оценивать. Связи между системами она игнорирует, но это иногда меньшее зло, чем строить точную оптимизацию на шумной и нестабильной ковариационной матрице.
Для меня любая более сложная схема распределения капитала должна сначала обыграть такой baseline вне выборки — после учёта оборота, ограничений и издержек. Коммерческие детали вашего варианта раскрывать, конечно, не прошу.
По Фурье и SSA тоже согласен с основной оговоркой: математически разложить можно любой ряд, но красивый спектр или набор собственных компонент ещё не означает, что у рынка существует устойчивый физический базис.
На ценовых рядах выделенные компоненты часто зависят от выбранного окна и меняются вместе с рыночным режимом. Поэтому я рассматриваю подобные методы не как декодер «истинных рыночных циклов», а максимум как преобразование признаков, сжатие пространства или фильтрацию.
Дальше проверка одна: улучшился ли rolling out-of-sample результат после издержек. Если нет, SVD просто красиво переписал тот же шум.
Интересно, у вас всё развалилось уже на устойчивости выделенных компонент или компоненты выглядели убедительно, но не давали прогноза вне выборки?
oreshkinalexey, что преобразование Фурье, что разложение ковариационной матрицы на собственные вектора и числа работают тогда, когда во внешней системе есть реальный собственный базис или что-то ему подобное.
ТО есть это хорошо ложится на радиофизику, на акустику, на фазированные антенные решетки и так далее. Когда я начинал на рынке, это было у меня в бэкграунде. И когда все вот это не стало работать на ценовых рядах, был сильно разочарован. Возможно и можно тут подъехать на какой-нибудь кривой козе, но у меня нет идей на эту тему.
В целом замечание правильное: я бы действительно уточнил в статье, что речь идёт о конечном историческом диапазоне, а не об универсальном законе рынка.
Вам эти Знания пока не доступны, о универсальном законе. Вы в школе плохо учились! Это так, шутка. Хотя Закон есть. Все формулы давным давно в открытом доступе. Рынок же это вибрация цены вверх-вниз, а вибрацию давным давно физики научились препарировали по полной. Ещё акустики тоже быстро тему вкуривают. Круги на воде, от брошенного камня… А камень это или прошлое движение, или первый импульс.
Пипец, как тяжело общаться с прогульщиками, мнящими себя супер кодерами...
oreshkinalexey, первый выбор — равный на момент расчета весов риск (в амплитудных единицах) на каждую систему. То есть вес обратно пропорционален оценке риска. Минус понятен, связи между системами игнорируются. Многие так и торгуют, только вводят поправки на то, что системы похожие, дают похожий риск и их веса приходится как-то сокращать. Но в принципе, неплохо.
Я действую иначе, но описывать не могу. Тут уже, как префе, «карты к орденам».
лично с группой Голяндиной не пересекался, хотя сам метод «Гусеница»-SSA знаком. Насколько понимаю, там идея существенно интереснее обычного поиска корреляции: ряд укладывается в траекторную матрицу, затем через SVD выделяется низкоранговая структура — трендовые и колебательные компоненты, а остаток трактуется как шум. Для нескольких связанных рядов используется MSSA.
Для нашей задачи это может быть интересно как минимум в двух местах: как предварительное выделение структуры перед поиском похожих участков и как способ построения более содержательного признакового пространства вместо сравнения сырых цен.
Но к финансовым рядам я бы применял осторожно. Выбор длины окна и группировки компонент там сам становится набором параметров, а нестационарность рынка быстро превращает красивое разложение прошлого в слабый прогноз будущего. Плюс всё нужно считать строго rolling, иначе очень легко получить утечку через разложение полного ряда.
В любом случае направление интересное. Посмотрю их работы по многомерной SSA подробнее. А что именно вы называете «лобовым подходом» к портфельной задаче — равные лимиты риска, фиксированное число систем или собственная схема отбора?
Главный вопрос вообще не в том, можно ли найти одинаковые пропорции. Найти их можно сколько угодно. Главный вопрос — дают ли они устойчивое условное распределение будущего на данных вне выборки, после комиссий, спреда и проскальзывания.
Прошлое определяет будущее! Любой первоначальный импульс уже несет в себе все будущие точки разворота по цене и времени.
Ссылка на Ганна и бесплатные индикаторы MT4 этого не доказывает. Покажите формальные правила, независимый тест и статистику — тогда будет предметный разговор. Без этого «математические пропорции» остаются обычным рисованием по уже сформированному графику.
Так и хочется ответить, и ключи от квартиры тоже?! Вы хотите, чтобы я вам показал как с помощью простых формул, которые мы проходим в школе на уроках геометрии, рассчитывать где с большой вероятностью развернется тренд? Ню ню...
А аргумент «это написал Ганн сто лет назад» в техническом обсуждении весит примерно столько же, сколько возраст самого аргумента.
Так я сразу написал, что он скорее всего не для Вас и вашей команды. Вы же ищете там где ищут все, вместо того чтобы искать там где надо найти!
Так и быть, дам два скрина… Ваша вумная ТС так умеет?
Остальное в ветке smart-lab.ru/blog/1299966.php было.
тему прочитал. В вашем примере уже есть нормальный эмпирический эксперимент, и я бы не пытался заранее назначать абстрактный штраф за каждый дополнительный параметр.
Я бы столкнул лоб в лоб два полностью определённых процесса:
На каждом шаге оба варианта оптимизируются на одном и том же прошлом участке, после чего параметры фиксируются и проверяются на следующем OOS-отрезке. Затем окно сдвигается. В результате нас интересует не общий Sortino за 25 лет, а то, насколько преимущество раздельной настройки регулярно выживает на новых данных.
В качестве грубой, но понятной оценки можно взять:
прирост раздельной настройки на обучении минус её прирост на OOS.
Допустим, отдельные параметры дали относительно общих +1 к Sortino внутри выборки, а на последовательных OOS-участках осталось только +0,1. Значит, примерно 90% красивого преимущества испарилось после выхода на новые данные. Я бы называл это не универсальной мерой переподгонки, а эмпирической оценкой оптимизма конкретной процедуры.
Второй тест, на мой взгляд, ещё интереснее: построить матрицу переноса параметров. Параметры, подобранные на XLI, применить к остальным ETF, параметры XLK — тоже ко всем и так далее.
Если на OOS каждый инструмент устойчиво лучше работает именно со своими параметрами, чем с чужими или общими, значит индивидуальность инструментов реальна. Если красивая диагональ появляется только на обучении, а на новых данных исчезает, то мы просто дали оптимизатору 36 способов подстроиться под шум.
При этом 12 ETF нельзя считать двенадцатью полностью независимыми подтверждениями: они связаны общим рынком. Поэтому сравнивать лучше не только результаты отдельных систем, но и временной ряд всего портфеля, а доверительные интервалы строить блоками по датам.
Я бы ещё добавил промежуточный вариант: не один набор параметров на всех и не отдельный набор на каждый инструмент, а несколько групп похожих ETF. Возможно, реальный максимум устойчивости окажется именно посередине.
В общем, здесь согласен с вами: считать количество параметров недостаточно. Гораздо полезнее посмотреть, сколько преимущества раздельной настройки переживает перенос во времени и на соседние инструменты. Такой результат уже можно пощупать руками, а не только обсуждать на уровне степеней свободы.
smart-lab.ru/blog/1013172.php
хороший пример того, почему количество настраиваемых чисел само по себе ещё не определяет сложность системы.
В первом варианте есть четыре явно подбираемых параметра: два периода индикаторов и два порога. Во втором числовой параметр действительно один, но взаимодействие двух состояний индикатора с пятью днями недели делит выборку уже на десять режимов — если каждая «краска» используется как отдельное торговое состояние.
Где больше подгонки, по числу параметров или цветов заранее не определить. Важен весь класс проверенных гипотез:
— были ли индикаторы выбраны заранее или отобраны из десятков вариантов;
— был ли день недели включён до теста или после просмотра результатов;
— перебирались ли отдельные дни и их комбинации;
— назначались ли разные действия каждой из десяти ячеек;
— сколько независимых сделок осталось внутри каждого режима.
Например, у пяти дней недели всего один категориальный признак, но если разрешить выбирать любые комбинации дней, получаем уже 32 возможные маски включения и исключения — ещё до подбора параметра индикатора. Формально числовой параметр один, а фактический перебор уже немаленький.
Поэтому я бы говорил не просто о количестве параметров, а об эффективной сложности системы: сколько разных правил она способна породить и сколько вариантов фактически было просмотрено при выборе финального.
Проверять при этом нужно весь процесс целиком. Выбор индикатора, порога, дней недели и правил взаимодействия выполняется только на обучающем окне, после чего всё фиксируется и проверяется на следующем OOS-участке. Затем окна сдвигаются вперёд. Если день недели или схема раскраски выбирались с учётом результатов тестового периода, это такая же подгонка, как и оптимизация обычного коэффициента.
Поэтому во втором варианте подгонки вполне может оказаться больше, несмотря на один формально настраиваемый параметр. Само число коэффициентов — слишком грубая оценка сложности.
oreshkinalexey,
Но, именно крупный капитал разрабатывает мощные системы, которые прочесывают рынок ежечасно и как синий кит собирают эти мелкие профиты.
Вечных граалей не существует. Интересно было бы создать систему, которая сама бы регулярно выискивала новые локальные преимущества и определяла деградацию прежних и не только по паттернам.
Я бы приобрел что-то подобное или поучаствовал в разработке.
oreshkinalexey, это все понятно любому начинающему алготрейдеру (локальные преимущества с ограниченным сроком жизни). Но по факту, как только эти преимущества поддаются обнаружению, они почти сразу же перестают работать.
Поэтому моя стратегия — пересиживать локальное противодействие и дожидаться тейкпрофитов, рассчитывая силы со свободной маржой (при выносах) и свопами (при затяжном пересиживании) — это уже второй уровень прогнозирования целесообразности взятия позы. Первый — где будет цена.
Первый уровень прогнозирования базируется на экстраполяции ценовых рядов и возврате к среднеквадратичному в процессе движения к прогнозным уровням. И все бы было очень неплохо, если бы не свопы)))
И то, что число параметров у ЕМА минимально, тоже большой плюс. А всякие дополнительные подпорки к системам с небольшим числом параметров я очень не люблю. Обычно, за небольшой прибыток получаем риск неустойчивости.
Вообще, тема числа параметров интуитивно понятная, но лично у меня не формализована.
Вот пример. Допустим, есть два однопараметирических индикатора, у каждого свой порог. Итого 4 подбираемых параметра и ценовой ряд раскрашивается в 4 цвета.
Допустим также, что у нас есть один однопараметрический индикатор без порога (вернее, порог естественный и не является переменным). И есть день недели. Подбираемый параметр 1, а ценовой ряд красится в 10 красок.
Вопрос, где больше подгонки.
это показательный результат. Фильтрация и прогнозирование — всё-таки разные задачи. Баттерворт, преобразование Гильберта, вейвлеты или SSA могут красиво разложить либо сгладить уже наблюдаемый ряд, но сами по себе не создают информацию о следующем движении цены.
В реальном времени за сглаживание обычно приходится платить задержкой: уменьшаем лаг — возвращаем шум. Адаптивные AMA, KAMA и подобные методы дополнительно оценивают текущее состояние ряда, то есть добавляют параметры и ещё один источник нестабильности.
Поэтому EMA оказывается сильным базовым вариантом: один понятный параметр, прозрачный лаг и минимум возможностей для переоптимизации.
Сравнивать более сложные фильтры с EMA, на мой взгляд, нужно при сопоставимом эффективном лаге и степени сглаживания. Параметры каждого метода подбираются только на прошлом участке, затем фиксируются и проверяются на следующем, ранее не использованном отрезке. После этого обучающее и тестовое окна сдвигаются вперёд, а итог строится только из последовательных тестовых участков. То есть речь идёт о walk-forward OOS-проверке, а не об одном удачно выбранном тестовом периоде.
Если адаптивный метод предполагает периодическую перенастройку, в тесте нужно воспроизводить ровно тот же график перенастройки, который был бы доступен в реальной торговле. Иначе будущая информация незаметно попадёт в параметры.
Если после такой проверки и учёта издержек сложный фильтр не обыгрывает EMA, значит он просто более дорогим способом сгладил тот же ряд.
Полностью выбрасывать такие методы я бы всё же не стал. Они могут быть полезны как вспомогательные признаки режима, оценки отношения сигнал/шум или предварительного преобразования перед поиском аналогов. Но ожидать от них самостоятельного предсказателя направления, вероятно, не стоит.
Интересно, вы сравнивали методы при примерно одинаковом эффективном лаге и степени сглаживания? И параметры фиксировались один раз или перенастраивались последовательно по мере движения по истории?
Вообще, меня удивило, что почти весь стандартный арсенал фильтрации, от фильтра НЧ баттерворта до численной реализации преобразования Гильберта не превзошли в моих исследованиях обычную скользяшку. И все АМА, КАМА и прочие адаптивные штучки тоже я счел малополезными. Даже на вейвлеты потратил время впустую.
И это при том, что и сами скользяшки тоже не подарок, но хотя бы проще — некуда.
по схеме с равным риском согласен: веса, обратные оценке риска, — хороший базовый benchmark именно потому, что такая схема почти ничего лишнего не пытается оценивать. Связи между системами она игнорирует, но это иногда меньшее зло, чем строить точную оптимизацию на шумной и нестабильной ковариационной матрице.
Для меня любая более сложная схема распределения капитала должна сначала обыграть такой baseline вне выборки — после учёта оборота, ограничений и издержек. Коммерческие детали вашего варианта раскрывать, конечно, не прошу.
По Фурье и SSA тоже согласен с основной оговоркой: математически разложить можно любой ряд, но красивый спектр или набор собственных компонент ещё не означает, что у рынка существует устойчивый физический базис.
На ценовых рядах выделенные компоненты часто зависят от выбранного окна и меняются вместе с рыночным режимом. Поэтому я рассматриваю подобные методы не как декодер «истинных рыночных циклов», а максимум как преобразование признаков, сжатие пространства или фильтрацию.
Дальше проверка одна: улучшился ли rolling out-of-sample результат после издержек. Если нет, SVD просто красиво переписал тот же шум.
Интересно, у вас всё развалилось уже на устойчивости выделенных компонент или компоненты выглядели убедительно, но не давали прогноза вне выборки?
ТО есть это хорошо ложится на радиофизику, на акустику, на фазированные антенные решетки и так далее. Когда я начинал на рынке, это было у меня в бэкграунде. И когда все вот это не стало работать на ценовых рядах, был сильно разочарован. Возможно и можно тут подъехать на какой-нибудь кривой козе, но у меня нет идей на эту тему.
Пипец, как тяжело общаться с прогульщиками, мнящими себя супер кодерами...
Я действую иначе, но описывать не могу. Тут уже, как префе, «карты к орденам».
лично с группой Голяндиной не пересекался, хотя сам метод «Гусеница»-SSA знаком. Насколько понимаю, там идея существенно интереснее обычного поиска корреляции: ряд укладывается в траекторную матрицу, затем через SVD выделяется низкоранговая структура — трендовые и колебательные компоненты, а остаток трактуется как шум. Для нескольких связанных рядов используется MSSA.
Для нашей задачи это может быть интересно как минимум в двух местах: как предварительное выделение структуры перед поиском похожих участков и как способ построения более содержательного признакового пространства вместо сравнения сырых цен.
Но к финансовым рядам я бы применял осторожно. Выбор длины окна и группировки компонент там сам становится набором параметров, а нестационарность рынка быстро превращает красивое разложение прошлого в слабый прогноз будущего. Плюс всё нужно считать строго rolling, иначе очень легко получить утечку через разложение полного ряда.
В любом случае направление интересное. Посмотрю их работы по многомерной SSA подробнее. А что именно вы называете «лобовым подходом» к портфельной задаче — равные лимиты риска, фиксированное число систем или собственная схема отбора?
Так и хочется ответить, и ключи от квартиры тоже?!
Так и быть, дам два скрина… Ваша вумная ТС так умеет?
Остальное в ветке smart-lab.ru/blog/1299966.php было.