Итак, сегодня будем учиться рубать бабло лопатой на фьючерсных контрактах МосБиржи на цветные металлы. Для анализа скачаем с сайта «Финама» котировки фьючерсов, например, на алюминий (ALMN):
М-да, целых 3 дня со сделками по крайней мере с начала 2019 года. Торговля трупами из морга была бы гораздо более активная и ликвидная, а тут — даже не знаешь, что можно забэктестить по трем торговым дням за 1.5 года. Ок, значит для бэктеста по данным МосБиржи ловить нечего. Также, при такой «активной» расторговке контрактов, как выше, становится очевидным, что стратегии внутридневной торговли использовать не получится, потому что спрэды велики, и маркет-мейкер с нами может внутри дня вдоволь наиграться. Поэтому только старая добрая среднесрочная торговля (с удержанием позиции в среднем в течение нескольких дней), для тестирования которой на истории нам вполне хватит дневных баров (предполагаем, что будем везде заходить в районе клоуза).
Зайдем на Quandl и качнем данные оттуда — например, по той же меди дневные данные есть ажно с 1959 года (!!!):
К сожалению, при более детальном анализе этих данных выясняется, что до 1990-го данные тоже временами битые (отсутствуют куски по полгода), поэтому весь дальнейший анализ будем делать с 1990-го года. 30 лет данных должно хватить для получения адекватных результатов.
Отлично, теперь, без лишнего трепа, перейдем к стратегиям.
Но сначала еще немного трепа. Везде ниже с целью контроля риска и более корректного сравнения стратегий друг с другом я рутинно таргечу волатильность к одному и тому же значению 50% годовых. Кому-то это может показаться много, но мы куль-трейдеры или кто? Дополнительно, чтобы в периоды низкой волатильности не брать на себя много «глупого» риска и не сливать потом много при скачках волатильности — везде в бэктестах установлено «жесткое» ограничение на плечо в размере 3 (то есть вы не можете брать на счет позиций номиналом больше, чем 3 x (размер вашего депо)). Ок,
Стратегия 0. Buy & Hold
Я не предлагаю держать медь долгосрок, это самоубийство, мы рассмотрим ее показатели лишь в качестве бенчмарка для нижеследующих стратегий. Ниже приведена кривая эквити, если мы вдруг с какого-то бодуна захотим держать медь, и базовые статистики такой стратегии:
{'cagr': -0.0222, 'sharpe': 0.211, 'mdd': 0.903}
Среднегодовой ретурн с учетом компаундинга (CAGR) -2.2%, коэффициент Шарпа 0.2 (среднегодовой ретурн / волатильность) и максимальная просадка 90.3%. Да, тупо держать медь с плечом (а для достижения таргетовой волатильности 50% годовых он держит ее с плечом до 3) — занятие не для слабонервных. Не для слабонервных идиотов — отрицательный ожидаемый ретурн с неплохой возможностью обнуления по дороге. Посмотрим, можем ли мы добиться большего.
Стратегия 1. Внутригодовая сезонность
Цены на медь считаются самым быстрым индикатором ожиданий относительно будущего роста мировой экономики: цены падают, когда ожидается замедление роста мировой экономики, и растут — когда ожидается ускорение роста (или положительное изменение относительно предыдущих прогнозов). В этом медь чем-то схожа с фондовыми рынками. Поэтому можно предположить, что внутригодовые паттерны цен на медь должны быть схожи с таковыми для фондовых индексов. Посчитаем t-статистики для тестирования гипотезы о том, что ретурны отличны от 0, для разных месяцев года:
1 0.38
2 1.37
3 0.46
4 0.53
5 -0.12
6 0.41
7 1.13
8 -0.48
9 -0.20
10 -0.35
11 0.51
12 -0.01
Видим, что действительно — паттерны ровно те же, что и для финансовых рынков, старая мудрость Wall Street «Sell in May and go away» работает и для меди: начиная с 5-го месяца (Мая) t-статистики все чаще уходят в минус, и держать медь становится невыгодым. Попробуем не торговать в месяцы с отрицательной t-статистикой (5, 8, 9, 10):
{'cagr': 0.0748, 'sharpe': 0.387, 'mdd': 0.801}
М-да, результаты все равно не очень — научились зарабатывать в плюс (7.5% годовых), но очень неустойчиво, и все равно с чудовищной просадкой, которую далеко не каждый выдержит (80%). Можем ли мы сделать лучше?
Стратегия 2. Внутринедельная сезонность
Если мы нашли некоторое сходство цен на медь с equity индексами, и знаем, что СнП в среднем в понедельник слабо растет или сливает — почему бы не посмотреть внутринедельную сезонность и для меди? Снова глянем на наши t-статистики, но уже по дням недели:
1 -1.10
2 0.29
3 0.90
4 1.05
5 2.32
Voi-la! И здесь медь ведет себя практически в точности как СнП: сливает по понедельникам, дальше начинает слабо зарабатывать, и, наконец, в пятницу обеспечивает устойчивый положительный ретурн, значимо отличный от нуля по крайней мере на 95%-ном уровне значимости. Попробуем в дополнение к предыдущим правилам (не торговать медью в мае, и с августа по октябрь), также не держать медь по понедельникам и вторникам. Какие результаты нам это даст?
{'cagr': 0.1366, 'sharpe': 0.569, 'mdd': 0.676}
Не идеально, но это уже что-то — 13.7% годовых, с шарпом > 0.5 и максимальной просадкой в пределах 70%. Окей гугл, это уже похоже по долгосрочному перформансу на наш любимый S&P (но зарабатывает в 2008-м, кстати), что мы можем еще предложить?
Стратегия 3. Технический анализ
Warning!!! Во избежание подрывов пятых точек адептов фундаментального анализа просим дальше не читать!!!
Для всех остальных — посмотрим, как работает такой вот простой сигнал:
S = 2 * (High — Settle) / (High — Low) — 1
Что вообще здесь написано? Это простейший реверсал-индикатор: когда фьюч закрывается (Settle) близко к хаю дня — мы получаем S -> -1, и система рекомендует «шортить на всю котлету» (напомню, размер «котлеты» определяется таргетовой волатильностью 50% годовых, а не размером ГО, с дополнительным ограничением на плечо не больше 3), когда Settle близко к лою дня — наоборот, становится S -> 1, и система рекомендует заходить на котлетку в лонг. Если Settle оказывается посередине между хаем и лоем — система рекомендует сидеть на заборе, ну а когда Settle бродит где-то между — система рекомендует заходить только на часть «котлетки». Как же работает торговля вот по такому довольно банальному индикатору, даже особо без всяких параметров и отсечек? А вот как:
{'cagr': 0.2018, 'sharpe': 0.743, 'mdd': 0.604}
Это уже очень неплохо — 20% годовых (в твердой, напомню, валюте!), Шарп 0.74, максимальная просадка, конечно, великовата, 60%, но мы же торгуем с годовой волатильностью 50% — это для куль-трейдеров пыль.
4. Комбо сезонности и теханализа
Попробуем скомбинировать стратегии сезонности и теханализа, просто сложив их сигналы с весами по 0.5 (напомню, сезонность выдает сигнал S=1 при нахождении в «хорошие» месяцы и «хорошие» дни недели, и сигнал S=0 в противном случае, а тех. анализ выдает действительный сигнал от -1.0 до 1.0). Таким образом, мы будем держать фьючерс с максимальным весом (на всю «котлетку»), когда и сезонность, и тех. анализ соглашаются друг с другом по поводу направления торговли), и будем сидеть на заборе, когда они выдают разнонаправленные позиции.
Вот что получается в результате такого совместного «голосования» двух систем:
{'cagr': 0.1993, 'sharpe': 0.926, 'mdd': 0.554}
Неплохо, нам удалось сохранить доходность на уровне 20% годовых, поднять Шарп до практически 1 (что довольно неплохо при торговле одним контрактом по таким простым правилам), и немного подснизить максимальную просадку до 55%, что, конечно, много, но для одного контракта на 30-летнем горизонте это неплохо, учитывая, что мы при этом еще и зарабатываем 20% годовых в твердой валюте.
Если бы вы начали торговать в далеком 1990-м году по этой стратегии, имея на счету всего $5000 — к настоящему моменту имели бы уже в своем распоряжении $1.31 млн. Вот что сложный процент-то животворящий делает!
5. Домашняя работа и немного заманухи
Если взять контракт на алюминий с Шанхайской биржи (Quandl: CHRIS/SHFE_AL2) и немного поиграться с этими же торговыми логиками — можно получить такой результат с 2012 года (да-да, просадка меньше 10%!). Оставляем это в качестве упражнения читателю:
{'cagr': 0.1739, 'sharpe': 1.746, 'mdd': 0.098}
Если взять контракт на цинк с Шанхайской биржи (Quandl: CHRIS/SHFE_ZN2) и немного поиграться с этими же торговыми логиками — можно получить такой результат с 2008 года (да-да, доходность выше 20% годовых и практически равна максимальной просадке!). Оставляем это в качестве упражнения читателю:
{'cagr': 0.2266, 'sharpe': 1.056, 'mdd': 0.272}
Чтобы не отставать от моды: подписывайтесь на мой телеграм, инстаграм и прочие фуфлограмы, если они когда-нибудь у меня появятся.
Всем профитов!
Legal disclaimer: эта стратегия может быть опасна для вашего здоровья и благосостояния, автор не несет ответственности за слитые депозиты!
Плюсанул, сохраню в избранное как комп открою. С телефона чёт не могу разобраться. Куда тыкнуть.
есть подозрение что статья вводит в заблуждение и при реальных проскальзываниях с металлами на мосбирже профита не будет.
но!!! сам метод пор шагам можно применить к чему угодно.
1) Как пример поиска неэффективностий.
2) Как пример — неэффективности в рынке существуют.
Есть исходники или ссылка на гит?
Отвечу на ваши сомнения аллегорично. Когда Анри Матисса спросили, почему на его картинах женщины такие некрасивые, он ответил: «Я создаю не женщин, я создаю картины».
Вроде же везде смотрят на абсолютное значение…
Я же спрашиваю про методологию больше.
В различных тестах, где используется t-статистика:
1. сначала генерируется некоторая гипотеза + предположения
2. при соблюдении данных предположений и верности гипотезы получается, что значение t-статистики не должно значимо отличаться от 0 -> анализируем модуль вычисленной t-статистики.
Т.е. в классических применениях знак t-статистики намеренно нивелируется.
А у Вас с помощью t-статистики выявляется знак случайно переменной.
Отсюда и вопрос: почему Вы считаете, что это корректно? :)
Мне непонятно, как Вы так с t-статистиками оперируете.
Исходно же Вы их правильно прикрутили:
Т.е. Вы исходно знак не проверяли.
Во-вторых, только сейчас заметил: у Вас все полученные значения t-статистик меньше 1.5, а для всех степеней свободы и p=0.05 p-value > 1.5.
Т.е. у Вас критерий Стьюдента говорит, что с вероятностью не менее 0.95 ретурны 0.
1. Если у актива ретурн отрицателен, то на фьючах нужно рассмотреть вариант шорта.
2. Если рассуждать опираясь на тест Стьюдента, то он нам говорит, что ретурн скорее всего ноль, а значит нет смысла держать актив ни в лонг, ни в шорт. При чем это рассуждения на ваших значениях справедливо для любого месяца.
Похоже, тут надо какой-то другой тест, чтобы месяцы профильтровать...
Проблема в том, что кроме ошибки первого рода (отвергнуть верную нулевую) у вас есть еще и ошибка второго (не принять верную альтернативную), и, строго следуюя т-статистикам и требуя их значимости — оптимально вообще не торговать. Поэтому нужна корректировка стандартных процедур на соблюдение баланса: зарубаем отрицательные т-статы, потому что там убыток с повышенной вероятностью, но оставляем месяцы с низкой т-статистикой, потому что там прибыль не с вероятностью 95%, к сожалению, но хотя бы выше 50% — уже хорошо.
Я так понял система на дневках и реверсивная? С входом все понятно.Если сезон и та совпали-входим.А вот если уже вошли и в позе, и допустим наступил май или еще интереснее -понедельник.То что по системе? Выход или досиживает до обратного сигнала? Сорри, если туплю.
В целом же идея не плохая, особенно для новичков. По крайнее мере может станут думать, а не гадать.
Пусть Х — сезонный сигнал.
Если сейчас пятница вечер или понедельник вечер, или май, или август-сентябрь — устанавливаем Х=0, иноче Х=1.
У — технический сигнал, рассчитывается по формуле в статье.
Итоговый сигнал S = (X + Y) / 2, это фактически на какую долю от «котлеты» надо сейчас держать медь (если S>0 — то в Лонг, S<0 — в шорт), соответственно сама торговля происходит доторговыванием от предыдущего значения S к новому близко к закрытию сессии.
А исходник есть?
если пользуетесь.
как по шагам шла ваша мысль.
Это ГОРАЗДО ценнее чем вылизанный код.
Конечно если код работает)
Кстати рекомендую гит.
Даже для статей.
Для любого создания артефактов.
Его история позволяет быстрее понять что происходило.
Где ошибка.
Что оставлено на потом.
Какие мыли были выкинуты НО ЗАПИСАНЫ!
Позволяет быстро вспоминать что за код.
История создания.
А стоит практически 0 затрат.
Писать маленький шаг каждый раз когда отходишь)
со всеми сразу проектами.
а комит когда делаете он захватит измененные файлы.
и в коммите пишите что конкретно делалось.
У Вас все мелкие исследования тогда будут записаны.
в один проект jupyter- исследования)
Очень удобно возвращаться.
И коммитить например когда ошибка вылезла перед исправлением.
А потом после.
С описание что там не взлетело.
запись как ее решил ошибку.
Потом удобно вспоминать.
Также кстати с каталогом метатрейдера)
С помощью r или питон.
(разработчик стоит от 3kusd квант ЕСЛИ ЗНАЕТ АНГЛИЙСКИЙ)
(и 0.5kusd если нет)
Круто!
1) доходчиво
2) альфа явна видна
3) своих секретов не раскрывает.
4) показывает как надо документировать исследование рынка
Заявка на победу.
А народ скорее всего не оценит.
Пусть гадают где будет доллар через день месяц год.Ну или куда пойдет нефть))Не будем мешать людям;)Пусть обсуждают свергнут ли Батьку))
В качестве вишенки на торте можно провести теперь и форвард-тестирование по данным до 1992. И будет понятна устойчивость метода исследования.
Данные по дневкам можно взять здесь: https://www.macrotrends.net/1476/copper-prices-historical-chart-data
Я их бегло проверил — серьезных пропусков нет.
Выражение записано по стандартным математическим правилам, деление имеет приоритет перед вычитанием.
Вход в позицию понятен — когда хай, шортим, когда лоу, покупаем. А про выход ничего не сказано.
с 1950г по 2004гг медь была унылым говном и вдруг с 2004г прям рокета
че за фундаментал в ней? истощение разведанных запасов? то то перестали чеканить медные деньги
+++++++++++++++++++++++++++++++++++++++++
Как точно сказано!
Но скажите честно, ведь данный подход к тестированию принято классифицировать как переподгонка? а исключение заведомо убыточных периодов — это ж обыкновенная «ошибка выжившего»?
P.S. Вы не подумайте, я не ставлю под сомнение Вашу победу. Ведь конкурс есть конкурс, и качество информации от остальных конкурсантов было намного хуже. Ваша статья самая техничная и проработанная, и как минимум по этим причинам она достойна победы. Просто теперь, когда хайп схлынул, было бы весьма благородно с Вашей стороны предупредить людей, что ставить собственные деньги на такую стратегию вы бы не стали, даже если на минутку вообразить будто она показала самую лучшую доходность из всей коллекции бэктестов по любым другим стратегиям.
P.P.S. из Ваших прочих комментов я уже понял, что деньги «на цветмет» Вы бы не поставили поскольку оно не обгонит «купи-и-держи-S&P500», но давайте представим, будто купи-держи потерял всякую актуальность, т.о. обсуждаемая металлическая стратегия оказалась бы в Вашей коллекции самой лучшей по доходности и просадкам… Вот, исходя из приведенных в статье подходов к тестированию, Вы бы поставили на неё какую-то заметную часть собственного капитала (и какую конкретно?), или вообще не стали бы приближаться к этому даже на пушечный выстрел, осознавая явный curve fitting?