Предупреждение сразу: это не инвестиционная рекомендация. Это честный рассказ о том что работает, что не работает, и почему.
Каждый кто торгует на бирже знает эту ситуацию: открываешь Пульс — там пятьдесят мнений по одной акции, половина противоречат друг другу. Telegram-каналы с сигналами публикуют «КУПИТЬ SBER» без объяснений и без истории — угадали или нет никто не проверяет.
Я разработчик. Данные с Московской биржи бесплатны. Библиотеки для машинного обучения — тоже. Логичный вывод: сделать систему которая принимает решения по данным, а не по чьему-то мнению.
Главное правило которое я поставил себе с первого дня: всё логировать заранее, ничего не менять задним числом. Предсказание записывается утром до открытия торгов, результат проверяется вечером по факту.
Многие слышали этот термин но не очень понимают что за ним стоит. Объясню на примере.
Представьте что вы учите ребёнка отличать кошку от собаки. Показываете ему 100 фотографий и говорите: «это кошка, это собака, это кошка...». После достаточного количества примеров ребёнок начинает сам определять кто на картинке — даже на фото которых никогда не видел.
Машинное обучение работает так же, только вместо ребёнка — программа, а вместо фотографий — цифры.
В моём случае программа смотрит на данные по акции за последние годы: цена открытия, цена закрытия, объём торгов, цена на нефть, курс доллара и ещё около пятидесяти параметров. И учится отвечать на вопрос: «Через пять дней цена вырастет, упадёт или останется примерно на месте?»
Это ключевой вопрос в машинном обучении. Вернёмся к аналогии с ребёнком.
Если вы проверяете ребёнка на тех же самых фотографиях которые он уже видел — это нечестная проверка. Он просто запомнил ответы. Нужно показать новые фотографии которых он раньше не видел.
В моей системе я делаю так:
Это называется OOS-тест (от английского Out-Of-Sample — «вне выборки»). Простыми словами: проверка на данных которых модель никогда не видела. Если результат хороший — есть шанс что система работает по-настоящему, а не просто запомнила прошлое.
Допустим модель сделала десять сделок за шесть месяцев. Семь оказались прибыльными, три убыточными. Но этого недостаточно для оценки — важно ещё насколько стабильно система зарабатывает.
Представьте двух игроков в казино:
Оба могут показать одинаковую итоговую прибыль, но первый явно надёжнее.
Коэффициент Шарпа (Sharpe ratio) — это математическая формула которая измеряет именно эту «надёжность заработка». Упрощённо: прибыль делится на разброс результатов.
Все цифры — на данных которые модель не видела при обучении. Учтена комиссия брокера 0.2% с каждой сделки.
| Акция | Sharpe | Доходность | Сделок |
|---|---|---|---|
| Т-Банк | 5.72 | +5.35% | 9 |
| Сбербанк | 4.01 | +1.47% | 10 |
| Газпром | 2.40 | +2.14% | 10 |
| ЭсЭфАй | 1.20 | +7.31% | 20 |
| ВТБ | -0.16 | -2.42% | 7 |
ВТБ — три разных периода тестирования, три раза отрицательный результат. Модель хорошо «выучила» исторические данные, но на новых данных не работает. Это называется переобучение — как ребёнок который запомнил конкретные фотографии но не понял общий принцип «что такое кошка». Пока оставил в системе с предупреждением.
Новости — подключил восемь Telegram-каналов (Смартлаб, РБК, БКС и другие), собирал тональность публикаций. Оказалось бесполезным — рынок отыгрывает новости быстрее чем я их успеваю обработать на дневных данных.
Я проверил дополнительно насколько устойчив результат во времени. Для этого я делил историю на девять последовательных
периодов и проверял каждый отдельно¹. Честный вывод: стабильный результат только у Сбербанка. Высокие цифры по другим тикерам могут быть случайным совпадением конкретного периода. Это неприятная правда — но её важно признавать.
¹ Этот метод называется walk-forward validation — «скользящая проверка». Представьте что вы учитесь предсказывать погоду: сначала учитесь на январе-марте и проверяете апрель. Потом учитесь на январе-апреле и проверяете май. И так далее — каждый раз добавляете новые данные к обучению.
Каждый рабочий день в 09:30 (за двадцать минут до открытия Московской биржи) система:
Вечером в 19:00 система проверяет что случилось с ценой и записывает результат — угадала или нет.
Каждое воскресенье публикует отчёт точности за неделю. Всё открыто, задним числом ничего не исправляется.
Сигнал — это не команда «немедленно купить». Это дополнительная информация для размышления. Если система говорит BUY с вероятностью 58% — значит по мнению алгоритма шансы роста немного выше среднего. Принимать решение всегда вам.
Полезно как второе мнение — особенно когда вы уже склоняетесь к какому-то решению и хотите проверить не противоречат ли данные вашей интуиции.
Не может быть у вас
Sharpe 5.72 при доходности +5.3%
потому что сейчас БЕЗрисковая ставка 14.5% а потому Sharpe у вас ОТРИЦАТЕЛЬНЫЙ и возможно -6%
Это всё на уровне шума. Опять же из-за малого количества сделок.
Основное движение по новостям происходит примерно за 5 минут.
При расширении горизонта прогноза ошибка растёт экспоненциально.
Какой-то черный ящик что-то предсказал. Практического толку от этого ноль:)