Блог им. melamaster

То ли робот, то ли нет

Не то, чтобы дарю грааль.
На рынке всё хорошо.
Поэтому немного исследований почти сферического коня почти в вакууме.

Смысл топика скорее в том, чтобы показать, какого типа память присуща биржевым данным и какой может быть торговая система, основанная на такой памяти.

Исходные данные — обычные часовые бары по акциям Сбербанка, для которых строится средняя цена.

Подход:
1. Рассматриваем группы часовых баров по 9 штук, отражающих скользящий день. 
2. Предполагаем, что группы баров, кончающихся в одни и те же часы, в среднем должны быть похожи.
3. Выбираем глубину предыстории (2-3-4 месяца), в которой будем находить похожие вектора.
4. Для данного текущего вектора находим в прошлом похожие вектора (скажем 10-15 штук), для которых мы знаем, каким был следующий часовой бар. По ним делаем оценку (можно среднее, можно авторегрессию, можно всё, что угодно) следующего бара для нашего текущего.
5. Принимаем решение о входе (не-входе) в ту или иную позицию на один час.

Получаются следующие торговые результаты за 7 лет:
То ли робот, то ли нет






























Абсцисса это доход в процентах. Ордината это порядковый номер часа. Эквити почасовые:
зеленая — лонги,
красная — шорты,
черная — лонги+шорты.

Расчеты сделаны исходя из идеальных условий:
1. Входим по open следующего бара без проскальзывания по рынку.
2. Выходим по close следующего бара без проскальзывания по рынку.

Общая средняя сделка равна 0.046%.
По лонгам средняя сделка равна 0.053%.
По шортам средняя сделка равна 0.039%.
Лонги заняли 46% баров.
Шорты заняли 51% баров.

В приведенных результатах показан оптимальный случай исходя из перебора глубины, в которой ищем похожие вектора (от 1 до 6 месяцев), а также количество ближайших векторов к текущему (от 1 до 50). В худших случаях результаты примерно в два раза хуже приведенных.
★17
55 комментариев
Средняя сделка не маловата ли?
тоже тут копал…
avatar
интересная идея, хотя как любой датамайнинг предсказательной силы не имеет. а как формализуется «похожесть» векторов? последовательность вверх-вниз-… и тд? 
avatar
Дар Ветер, да, примерно так.
avatar
Дар Ветер, 
любой датамайнинг предсказательной силы не имеет

А что имеет?
avatar
Дар Ветер, ну это смотря какой датамайнинг
avatar
ух ты, лет 6 назад на альпари было то же самое почти, автор пару недель выеживался, потом на майбаксе счет зарегил, аж 3 штуки зелени пиханул, счет целых полтора месяца жил потом и автор и счет покинули и майбекс и альпари
avatar
очень мелкая средняя… комссы вход-выход =0.03%
не ипи мозги… делай так… свеча растущая покупаешь… свеча падающая продаешь… средняя будет в районе 0.1%-0.18% эквити суперская в сбере… и это… в первые 5 минут дня не торгуешь… потом на си протесть… потом выбери яхту или остров… а потом протесть на луке
avatar
ves2010, а есть, что нибудь, со средней сделкой 0,3? :)
avatar
Антон Ш, есть и тоже очень просто… 0.1% для фьюча достаточно
avatar
ves2010, свеча на каком таймфрейме? выход по какому критерию? вот так в лоб посчитал на пятиминутках, не выходит плюса.
avatar
Vitty, это он с юмором:) Хотя принцип изложен очень верно:) Сбер это самый-самый по трендовости инструмент. Его нужно покупать, когда он растет:) И не продавать, пока он растет или перестал расти:)
avatar
Sergey Pavlov, ну то что он трендовый — это понятно.
avatar
Sergey Pavlov, ясно, что перебор по окну на истории — голимая подгонка. А если взять издалеча, годика с 2007 и пустить лукфорвард, что получится?
avatar
SergeyJu, с перебором тут всё нестрашно. Подгонка не-голимая, но подгонка. Что вы применительно к такому построению назовете лукфорвардом? Здесь всё грубо. Моделька универсальная на все 7 лет.  Не торгуема в силу очевидных обстоятельств, но формально прибыльная.
avatar
Sergey Pavlov, если прогноз в любой точке делать по всей ранее накопленной выборке, что получается?
 
avatar
SergeyJu, если работать без забывания, т.е., если с каждым шагом окно увеличивается на единицу, получается следующее:



avatar
Sergey Pavlov, трудно судить по графику, но как будто лучше?
Вся проблема, если я правильно понимаю, в правильной кластеризации накопленных 9-часовок?
avatar
SergeyJu, да, вся проблема в этом. По сути, в 9 мерном пространстве решается задача кластеризации, определяется в какой из кластеров попадает текущий вектор. Далее надо определить пару нюансов:
1. как определить окрестность
2. как усреднить целевые значения векторов, попавших в окрестность
avatar
Vitty, я все написал верно… бот реверсивный… зеленая свеча покупаешь красная продаешь… вечорку не торгуешь
таймфрейм  оптимизируешь
avatar
ves2010, Это же старая система Мартынова! Верно?
avatar
Антон Ш, незнаю… но боян это древний
avatar
так где ссылка на скачивание грааля? Вы ж дарите? забираю)))

avatar

> "в правильной кластеризации накопленных 9-часовок?"

Кстати это самый интересный вопрос как определена функция похожести...
Мы ведь не найдем в истории полностью идентичные паттерны с одинаковыми ценами или размерами свечек...

avatar
ch5oh, не нужно искать паттерны с одинаковыми ценами или размерами свечек. в 9-мерном пространстве единицы измерения по осям — доходности в процентах… а дальше… куча метрик… от очевидных до всяких изысканных.
avatar
Sergey Pavlov, предположим, есть некая мера расстояния между 9-элементными векторами. 
Возможны 2 подхода.
1. Как Вы описали, рассматривать окрестность нового вектора. 
2. Разделить предыдущие вектора на кластеры и определять, в какой кластер попадает новый вектор. Мне второй вариант представляется более устойчивым. 
avatar
SergeyJu, так и делается, но оба варианта, которые вы описали, можно осуществить десятью разными способами… второй подход как более индуктивный представляется более предпочтительным, но и там не всё очевидно. Потому что в этом случае надо, определив, в какой кластер попал новый вектор, принять решение о том, насколько данный кластер самосогласован… и вот из таких мелких задачек всё складывается. Много всего приходится проделать, чтобы получить корректный результат, лишенный ошибки заглядывания в будущее, но при этом результат, который практически бессмысленен. Куда более интересная задачка — сделать из этого нечто, у чего была бы средняя сделка более 0.1% и уже можно запускать в торговлю. Эту задачку (пока) мне решить не удалось:)
avatar
Sergey Pavlov, фильтр добавить?
avatar
SergeyJu, из очевидного попробовал десятки разных фильтров, если и чуть лучше, то не в 2 раза, а требуется хотя бы в 2 раза улучшить. Если делать что-то типа реверсной системы с непрерывным ведением позиции, то начинают попадаться гэпы и вылазят затяжные просадки. Общая линейность эквити достигается тут за счет того, что торговля только внутри бара.
avatar
Sergey Pavlov, Эту задачку (пока) мне решить не удалось:)

А если перейти на нижний таймфрейм?
Будет по идее больше статистика и следовательно более достоверные входы.

avatar
ch5oh, я это изначально строил на минутках. Подоплека была в поиске эффективной системы внутри дня.  Эквити на минутках выглядит ровнее, но там средняя сделка не больше одной  сотой процента — даже для идеальных условий ни о чем.
avatar
SergeyJu, IMHO ярко выраженных кластеров не будет. Проще для каждого нового вектора находить множество векторов на истории, попадающих в окрестность заданного радиуса, затем смотреть матожидание и стандартное отклонение приращений цен, в течение n периодов после этих векторов. Если будет значимый сдвиг матожидания в какую-либо сторону — входить в позицию.
avatar
Marco, ярко выраженных кластеров не получается. Лишь сгустки в общем распределении. Евклидово расстояние в процентах колеблется от 0.05 до 2. Но тогда в вашей формулировке нужно дополнительно еще и задачу о разладке решать, в которой также не один нюанс появится.
avatar
Sergey Pavlov, занятно, что есть сгустки. Спасибо. :)
avatar
Marco, сгустки это весьма условно:) Ибо, если мы возьмем две независимых СВ и нарисуем по выборке корреляционное поле, то на глаз наверняка получатся сгустки, которых в модели нет. По этой причине мы имеем даже в идеальных условиях систему с очень низким профит-фактором. Т.е. всё равно весь прогноз трендового типа на уровне смещения среднего.
avatar
Sergey Pavlov, при расчете расстояния Вы предварительно 9-мерные вектора приводили к 0 среднему и 1 дисперсии?
avatar
SergeyJu, нет
avatar
Sergey Pavlov, могу представить себе, что Вы брали не значения цены, а % приращения цены за час. Но тогда или временной интервал 10 часов, или вектор восьмимерный.  
avatar
SergeyJu, проценты приращения средней цены за час, которых девять штук, чтобы их построить, использовались 10 баров.
avatar
Sergey Pavlov, один из баров всегда — перенос через ночь?

avatar
SergeyJu, да. При скользящем дне это неизбежно.
avatar
Sergey Pavlov, значит, один компонент систематически имеет бОльшую дисперсию, чем другие. И его вклад в расстояние между векторами будет часто превалирующим.
avatar
SergeyJu, да. Поскольку этот компонент всегда стоит на одном и том же месте,  соответствует одной и той же координате, я использовал два варианта метрики:
1. Веса компонент равны, т.е. по смыслу поиск ближайших векторов это плиск векторов  с похожим гэпом и во вторую очередь уже боизость поиостальным компонентам.
2. С явным заданием весовой функции компонент.
И это не последний нюанс подхода:)
С одной стороны, все это голимая подгонка, ибо очень большое пространство параметров для перебора. С другой стороны, там довольно неплохая  монотонность и нет множества оптимальных решений, сильно различающихся друг от друга по значенмям этих параметров.
avatar
Sergey Pavlov, а если загрубить, проквантовать гэп и даже в предельном варианте оставить от гэпа только знак, и получить два множества 8-мерных векторов?
avatar
SergeyJu, так я не пробовал, это интересно. Можно даже по всем компонентам сделать лишь знаковое квантование, пытаясь определить качественную похожесть. Поиграюсь с этим через некоторое время, если что интересное получится — опубликую.
avatar
Sergey Pavlov, а я как раз практикую квантование, чаще всего — бинарное. Например, цена выше/ниже скользяшки — 1/0. Ну и так далее.
avatar
SergeyJu, мною в этом чаще «манипулирует» призрак действительных чисел… непрерывное пространство в Rn… Но в качестве исключения у меня есть ровно одна система (торгуется), построенная на последовательной статистике знаков приращений актива. Суммируется кол-во больше-меньше ну и дальше по кол-ву набранных баллов управление позицией.
avatar
Sergey Pavlov, проклятие размерности.
Предположим, я хочу пространство параметров разделить на два кластера — лонг, шорт. То есть решающее правило у меня бинарное, а вот само разбиение может иметь сколь угодно большую сложность. Если поверить тому, что более-менее «хороший» разделитель в N мерном пространстве сколь угодно точно аппроксимируется линейным в 2*N мерном пространстве, то  для 9-мерных векторов, как в Вашем примере, потребуется 2*9+1=19 параметров для классификатора.
Убиться и не жить! 
avatar
SergeyJu, да, процедура не шибко веселая получается. Я это обычно делаю через кучу промежуточных шагов. Все промежуточные вычисления в файлики сохраняю, чтобы разные прогоны потом делать быстрее.
avatar
Sergey Pavlov, есть очень простой подход. Предположим, у меня есть расстояние. Возьмем любую «шапочку», которая равна 1 при нулевом  расстоянии, имеет 0 производную в нуле и быстро монотонно падает при росте расстояния. 
Для каждого вектора можно рассчитать взвешенную «по шапочке» сумму финансовых результатов остальных векторов. 
Таким образом получается набор предикторов, который можно сопоставить с финансовым результатом для каждого вектора.
Я полагаю, что с вычислительной точки зрения подход весьма эффективный и к тому же легко иттеририруется. А сопоставление вектора результатов с вектором предикторов (например, чтобы построить пороговые решающие правила для лонга и для шорта), становятся тривиальной задачей.
avatar
SergeyJu, вычислительная сложность схемы пропорциональна квадрату числа векторов. Всего-то.
avatar
SergeyJu, благодарю вас за такую интерпретацию:)
avatar
Marco, я догадывался, что нарисовать окружность проще, чем провести кластеризацию   :)

avatar
Sergey Pavlov, =) вот Вы какую метрику использовали при построении этой эквити в топике?
avatar
ch5oh, обобщенное евклидово расстояние. Одним из параметров, по которому также делался перебор, была степень в этом расстоянии.
avatar

теги блога Sergey Pavlov

....все тэги



UPDONW
Новый дизайн