Не то, чтобы дарю грааль.
На рынке всё хорошо.
Поэтому немного исследований почти сферического коня почти в вакууме.
Смысл топика скорее в том, чтобы показать, какого типа память присуща биржевым данным и какой может быть торговая система, основанная на такой памяти.
Исходные данные — обычные часовые бары по акциям Сбербанка, для которых строится средняя цена.
Подход:
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). В худших случаях результаты примерно в два раза хуже приведенных.
А что имеет?
не ипи мозги… делай так… свеча растущая покупаешь… свеча падающая продаешь… средняя будет в районе 0.1%-0.18% эквити суперская в сбере… и это… в первые 5 минут дня не торгуешь… потом на си протесть… потом выбери яхту или остров… а потом протесть на луке
Вся проблема, если я правильно понимаю, в правильной кластеризации накопленных 9-часовок?
1. как определить окрестность
2. как усреднить целевые значения векторов, попавших в окрестность
таймфрейм оптимизируешь
> "в правильной кластеризации накопленных 9-часовок?"
Кстати это самый интересный вопрос как определена функция похожести...
Мы ведь не найдем в истории полностью идентичные паттерны с одинаковыми ценами или размерами свечек...
Возможны 2 подхода.
1. Как Вы описали, рассматривать окрестность нового вектора.
2. Разделить предыдущие вектора на кластеры и определять, в какой кластер попадает новый вектор. Мне второй вариант представляется более устойчивым.
А если перейти на нижний таймфрейм?
Будет по идее больше статистика и следовательно более достоверные входы.
1. Веса компонент равны, т.е. по смыслу поиск ближайших векторов это плиск векторов с похожим гэпом и во вторую очередь уже боизость поиостальным компонентам.
2. С явным заданием весовой функции компонент.
И это не последний нюанс подхода:)
С одной стороны, все это голимая подгонка, ибо очень большое пространство параметров для перебора. С другой стороны, там довольно неплохая монотонность и нет множества оптимальных решений, сильно различающихся друг от друга по значенмям этих параметров.
Предположим, я хочу пространство параметров разделить на два кластера — лонг, шорт. То есть решающее правило у меня бинарное, а вот само разбиение может иметь сколь угодно большую сложность. Если поверить тому, что более-менее «хороший» разделитель в N мерном пространстве сколь угодно точно аппроксимируется линейным в 2*N мерном пространстве, то для 9-мерных векторов, как в Вашем примере, потребуется 2*9+1=19 параметров для классификатора.
Убиться и не жить!
Для каждого вектора можно рассчитать взвешенную «по шапочке» сумму финансовых результатов остальных векторов.
Таким образом получается набор предикторов, который можно сопоставить с финансовым результатом для каждого вектора.
Я полагаю, что с вычислительной точки зрения подход весьма эффективный и к тому же легко иттеририруется. А сопоставление вектора результатов с вектором предикторов (например, чтобы построить пороговые решающие правила для лонга и для шорта), становятся тривиальной задачей.