Избранное трейдера MrD
Недели две назад обещал ответить нашему коллеге на вопрос и написать на эту тему топик. Отвечаю и пишу.
Итак, нам пришла в голову просто бесподобная и очень простая идея Грааля. Мы имеем всего два индикатора с параметрами х1 и х2 соответственно. Их состояние описывается вектором X = [x1,x2], и в некоторой области Gv подмножества Х и находится наш Грааль, многие сделки в этой области в плюс. По крайней мере, мы так предполагаем, хотя где находится эта область и есть ли она вообще, эта Gv представляем весьма приблизительно, и мы, разумеется, хотели бы это выяснить. Рис.1.
В пространстве состояний X мы ограничили область нашего видения Грааля областью Gv, и в нее даже попал кусок настоящего Грааля G.
Запускаем оптимизацию системы по прибыли, положение и параметры области Gv меняются таким образом, что оптимизатор находит и выделяет настоящий Грааль G областью Gr в пространстве X.
Торговая система готова к употреблению.
В прошлом топике [1] мы разобрались с тем, что и как подавать на входы нейросети (НС). Теперь надо как-то сказать НС — «Горшочек, вари», предварительно рассказав, что конкретно и как именно надо «варить». Мыслей, в общем, нет никаких. Потому, давайте обратимся к классикам — Саймону Хайкину [2,c.33]:
Вот так вот, сразу и на первых страницах — «не могут обеспечить готовые решения», необходимо интегрировать в сложные ситемы", «относительно простые задачи, часть из которых может решаться НС». Книга конечно старая, но и наш MLP (Multilayer perceptron) в составе scikit-learn новизной не отличается. Этому MLP еще и простую, да конкретную задачу подавай, и вокруг него «сложную систему» городи. Как-то энтузиазма поубавилось.
Ладно, коли на вход нашего MLP уже подается временной ряд, пусть он нам определяет, хотя бы приблизительно, моменты входа в Лонг. А мы потом его проверим, и уточним эти моменты.
Теперь нашу НС надо как-то научить находить Лонг — показать НС как правильно и как неправильно. А мы сами-то знаем как правильно? Учителя фиговы. Это с кошечками-собачками хорошо — показывай себе, и пусть учится.
А давайте что-нибудь предположим, назовем какие-то входы в Лонг правильными, а остальные неправильными. Если мы предположили какую-нибудь ерунду, то НС просто ничему разумному не научится, и при дальнейшей проверке это быстро выяснится. А что-то предположить нам поможет интернет.
Кстати, это свойство НС, отличать фантазии от действительных закономерностей, уже вполне можно использовать для проверки каких-либо наших педположений о поведении рынка. Надо только рассказать о них НС, и она скажет, есть там что-то, с чем следует работать, или выкинуть это и забыть.
Однако, обратимся к интернету. Несколько лет назад наш коллега по несчастью занимался методами Машинного обучения (МО) с целью победить рынок. Он строил массу предикторов, подавал их на входы различных систем МО, и обучал по разметке Зиг-Зага. А что, неплохая идея, входы — лучше не придумаешь.
Вообще, если на минимуме Зиг-Зага загородить правую часть графика, как-то сомнительно, что вообще можно что-то сказать о дальнейшем движении. Да, и по ходу пьесы этот минимум будет постоянно перемещаться. Да и наш коллега долго и упорно менял предикторы и системы МО, потом все реже, реже, и вообще пропал из поля зрения. А на истории, конечно, Зиг-Заг — лепота.
Давайте сдвинем точку входа в Лонг немного вправо от минимума Зиг-Зага, где цена уже начала расти. Мы получим некую U-образную кривую цены, на которой НС хотя бы cможет построить линию регрессии. Не говорю, что это хорошая идея, но мы с помощью НС попробуем ее проверить. Что получим? — понятия не имею, я это делаю по ходу написания материала.
Разметку правильных входов для обучения можно сделать по Зиг-Загу, установив какой нибудь разумный порог от его минимума.
А разметку неправильных входов кто сделает? Опять обращаемся к [2,c.60].
ПЕРЕПОДГОНКА ч.2
В предыдущей заметке https://smart-lab.ru/blog/628025.php
я описал пример применения метода Монте-Карло для оценки переподгонки на базе дневных данных по фьючерсу на индекс РТС. Поскольку мало кто понял, о чем я, собственно, веду речь, и зачем это вообще нужно, продолжу.
Весь расчет был сделан для считающегося условно-безопасным случая 3 – х индикаторов (2^3=8 кластеров). Резонный вопрос, а если кластеров больше или меньше, что будет. Для начала провел моделирование для случая 2, 4, 8, 16, 32 кластеров и привел эмпирическую формулу, связывающую результат с числом степеней свободы (число коих на 1 меньше числа кластеров).
Число кластеров |
Степеней свободы |
Средний Шарп |
Приведенный Шарп |
2 |
1 |
0,214 |
0,214 |
Ниже некоторые мысли по поводу хеджирования алгоритмического трендового портфеля. Даже не то чтоб хеджирования, скорее еще одна стратегия в дополнение. Денег на нее кстати у меня поставлено не меньше чем на алготрейдинг. Никаких чудес. Речь идет о портфеле акций.
Для начала немного теоретических размышлений. Как известно рынок имеет 3 состояния: рост, падение и боковик. Но не каждый рост одинаков. Если брать в контексте трендовых систем, то рост может быть как по типу «ударный день» (т.е. равномерный рост практически без откатов), так и по типу «гэп — боковик» (рынок открывается уже хорошим плюсом и далее идет болтание на уровне). Дневная свеча на графике в обоих случаях будет одинаковая, но заработок у роботов будет отличаться.
Упрощенно я разделил все движения на 6 подтипов: ракета, унылый рост, крах, унылое падение, боковик и боковик-убийца. Боковики тоже отличаются, простой — это спокойный канал без особых сигналов, боковик-убийца — это нечто аля расширяющийся треугольник.
Если как ведет себя портфель акций более-менее понятно (на крахе сильно минусует, на росте плюсует и т.п.), то с роботами все несколько сложнее.
На основании наблюдений за своим «зоопарком» я установил примерную реакцию портфеля на разные состояния рынка (бывают конечно исключения, но в целом плюс-минус так). Обозначил значками. Соответственно ударные движения типа «ракета» и «крах» приносят максимальный результат, стопов не выбивает вообще. Причем 2-3 таких движения легко могут отбить даже годовую просадку. «Унылый» рост или падение отрабатываются хуже, стопы периодически вылетают, но за счет диверсификации часть движения все равно удается ухватить. Далее соответственно боковики приносят убытки, простой в меньшей степени из-за отсутствия большого количества сигналов и «убийца» — максимально убыточный (стопы улетают один за одним). Результаты для наглядности свел в табличку ниже. Видно в какие моменты в теории стратегии работают в синергии, когда перекрывают друг друга и когда нет.
Для акций получается самый болезненный момент — это фаза краха, но тут хедж со стороны алгоритмов достаточно надежный. На моей памяти еще ни разу трендовые системы не давали меньше прибыли, чем просадка портфеля, а зачастую за счет плеча на срочке прибыль в разы выше.
Вначале о грустном. Не понимая теорию нейросетей (НС) у вас вряд ли получится построить на ней ТС. Поэтому лучше для начала почитать теорию, например, Хайкин Саймон. «Нейронные сети. Полный курс». Книга уже достаточно старая и в ней нет новомодных веяний, но она дает базовые представления о НС.
И второе, мы будем далее для построения систем использовать пакет scikit-learn для Python. рекомендую ознакомиться. Есть и более продвинутые пакеты, скажем, TensorFlow и др., но их использовать мы не будем, и ограничимся более простым scikit-learn.
Теперь о том, чего здесь не будет. Здесь не будет теории НС, разве эпизодически и оч кратко. Здесь не будет описания пакетов Python, работы с графикой и пр. Обо всем этом вы можете прочесть в интернете, книгах, и документации Python.
В топике мы будем обсуждать только применение НС к ТС и их построению.
Так как тема достаточно велика, в один топик не влезет, сегодня мы займемся самыми общими вопросами. Следующая часть будет недели через две, раньше не получается.