Увидел у себя в ленте подписки youtube вот такое видео:
MACD + AI Trading = 1159% Returns?
www.youtube.com/watch?v=b6GKG-vGUyE
Сразу скажу, что заголовок абсолютно кликбейтный: заявленная доходность в 1159% процентов — это за 15 лет, а CAGR этой стратегии гораздо скромнее — 18.8%. Автор продает свой курс.
Но в качестве упражнения решил проверить эту стратегию на индексе турецкой биржи (BIST100).
На чем основана эта стратегия, и другие похожие AI-стратегии из интернета:
— берется классический индикатор, один или набор (в данном видео это две движущихся средних)
— строится ML (machine learning) модель, которая учится предсказывать доходность актива на следующий день (как цифру или как булевое значение: плюс или минус) в зависимости от этого индикатора на основе либо одного предыдущего дня, либо на серии за несколько предыдущих дней
Как и в этом видео, я взял модель Random Forest, натренировал ее на данных по турецкому индексу за 2005-2025 годы с использованием двух скользящих средних (пробовал разные комбинации дней: 5 и 20, 12 и 26 и др.). Модель должна предсказывать движение биржи (вверх или вниз) на день T+1 на основе значений двух средних на день T.
С утра пораньше возникла мысль насчет сравнения стратегий с частыми и редкими сделками на чувствительность к издержкам.
Поставлю задачу так: если нужно добиться нетто (то есть с учетом издержек) доходности в R_net, какая должна быть брутто доходность R_gross?
Формулы для случая рекапитализации:


Продолжаю тестировать описанный тут алгоритм, основанный на парном трейдинге: smart-lab.ru/blog/1176485.php
Собрал сделки на всех парах в одну кривую — получил вот такой красивый результат на out-of-sample данных.

Что ещё нужно сделать:
— Попытаться придумать критерий, чтобы еще на этапе тестирования отсеивать плохие пары.
— Проработать stop-loss'ы (и в целом продумать risk management). Пока единственное условие выхода — это боллингер.
Что НЕ работало:
— Алгоритмы из книжек и интернета в лоб, без своих идей.
— Метод наименьших квадратов (OLS) для вычисления коэффициентов регрессии. Коэффиценты получаются очень нестабильными, нужна какая-то регуляризация.
— Минутные данные. Издержки/спред/проскальзывания съедают прибыль.
Что заработало:
— Фильтр Калмана вместо OLS.
— Оптимизация параметров в фильтре Калмана не через прибыль, а через статистические свойства спреда.
— В статистических оценках — использование robust подходов, например https://medium.com/@aakash013/outlier-detection-treatment-z-score-iqr-and-robust-methods-398c99450ff3
Идея простая:
Если пара ведёт себя «правильно» с точки зрения статистики, она неизбежно будет прибыльной на большой выборке.
Что значит «правильно»:
1. Наличие возврата к среднему (mean reversion)
2. Адекватный half-life у спреда, максимум несколько дней
3. Стабильные коэффициенты регрессии
Алгоритм:
— Использую фильтр Калмана для нахождения коэффициентов регрессии.
— Сначала подбираю параметры в фильтре Калмана так, чтобы соблюдались все условия выше.
— И только потом оптимизирую вход и выход по коэффициенту Шарпа.
Реализовал этот алгоритм на C#, с вызовом Python-процедуры для выполнения ADF-теста.
Тестировал на BIST (Турция):
25 случайных large-cap, все пары с одинаковым сектором
— Средний CAGR: 2% на out-of-sample
— По всей видимости, в крупных бумагах сидят роботы, которые высасывают арбитраж.

