Стратегии
Точный перенос FMZ «Python ML: SVM предсказывает покупку/продажу» (автор Zero): скользящий линейный классификатор направления следующего бара на SVM 3 классов по исходным [Open, Close], длинная/короткая позиция/вне рынка, SpreadVal=2, BTCUSD_PERP.BINANCE_CM 1H
Итог: Отменено
BtcCmLinearSvmNextBarDirection
Сводка по итогам
В этой гипотезе реализован FMZ скользящий линейный классификатор SVM направления следующего бара для бессрочного контракта Binance COIN-M BTC с периодом 1H; заранее была заявлена близкая к нулю прогнозная доходность. После 2 итераций бэктест дал 1,408 сделок со средним результатом -0.129% на сделку, PF 0.80 и коэффициентом Шарпа -0.38; счёт был ликвидирован с доходностью -100%, тогда как стратегия «купи и держи» BTC выросла примерно на 3x. Аналитик отказался от неё при проверке бэктеста до оптимизации, поскольку нулевое валовое преимущество не покрывает торговые издержки. Аналитик также отметил неправдоподобные суточные колебания COIN-M MTM и противоречивые даты ликвидации для проверки движка, указав, что они не меняют знак преимущества.
Гипотеза
Реализация
Точный перенос FMZ «Python ML: SVM Predicts Buy/Sell» от Zero (fmz.com/strategy/21370). На каждом закрытом баре 1H инструмента BTCUSD_PERP.BINANCE_CM модель заново обучается с нуля: это линейный SVM на numpy, эквивалентный настройкам LinearSVC по умолчанию в sklearn (квадратичная функция потерь hinge, L2, C=1, OvR, регуляризованный свободный член). Строки обучающей выборки — исходные значения [open, close] за последние 300 баров, размеченные как UP/DOWN/FLAT на основе изменения цены закрытия следующего бара с SpreadVal=2 USD. Модель классифицирует только что закрывшийся бар. Стратегия открывает длинную позицию при UP, короткую — при DOWN, а в остальных случаях не имеет позиции; размер позиции составляет 50% от текущей оценки капитала USD по рыночной цене и выражается целыми контрактами по $100.
Результаты верификации
Для точного переноса изменение кода не требуется. Аналитик должен использовать 0.10% + влияние на цену в качестве нижней границы затрат.
Несоответствие предпосылки о затратах. В гипотезе обосновывается BINANCE_CM при стоимости сделки туда-обратно около 0.06%, но для входов и выходов используются рыночные ордера базового шаблона (0.05% тейкера с каждой стороны), поэтому сделка туда-обратно стоит около 0.10% плюс смоделированное влияние на цену. Это не меняет корректность. Предварительно зарегистрированный результат fee_edge просто достигается быстрее.
Необязательно: отправь заявку на вход в противоположную сторону сразу после выхода на том же баре, если это допускает базовый шаблон.
При развороте позиция остаётся закрытой на один бар. should_exit закрывает позицию, когда прогноз отличается от текущей стороны позиции. Противоположную позицию можно открыть только на следующем баре и только если прогноз к тому моменту всё ещё такой же. В исходнике позиция сразу переворачивается на каждом новом баре. Предыдущий QA принял это. Это немного снижает экспозицию и добавляет один пропущенный бар при каждом развороте.
Убедись, что в режиме бумажной и реальной торговли восстанавливается состояние стратегии с обычными скалярными значениями, либо пересоздай базовый баланс по начальному балансу монет на счёте.
_coin0 (базовый баланс BTC) фиксируется при первом вызове calculate_signal. В строке документации сказано, что он сохраняется после перезапуска. Если при перезапуске реальной торговли его значение не восстановится, реализованный PnL в монетах до перезапуска не войдёт в капитал MTM. На бэктест это не влияет. Кроме того, в песочнице ликвидация вызвана тем, что влияние на цену учли задним числом, и капитал внутри движка этого не видит. Это ограничение тестовой системы, а не ошибка стратегии.
Обзор бэктеста
- Шарп
- -0,38
- Общая доходность
- -100,00%
- Максимальная просадка
- 100,00%
- Всего сделок
- 1408
- Доля прибыльных
- 53,6%
- Профит-фактор
- 0,80
Перенос точный: классификатор — LinearSVC со стандартными настройками, использующий исходные признаки [open, close]. Метки строятся только по уже закрытым барам, поэтому заглядывания вперёд нет.
Выборка надёжна: 1,408 закрытых сделок (2,815 исполнений) с 2020-08 до ликвидации. Этого достаточно, чтобы точно оценить преимущество на сделку.
Доходность на сделку отрицательна. avg_trade_return_pct составляет -0.129%, при минимуме COIN-M в +0.10%. Код отправляет рыночные ордера тейкера, поэтому реальные расходы на полный круг сделки составляют около 0.10% плюс влияние на цену. PnL до издержек примерно нулевой, что согласуется с долей выигрышных сделок 0.536 и средней прибылью $230 против среднего убытка $333.
Фактор прибыли равен 0.80. Коэффициент Шарпа — -0.38, при CI от -4.43 до 1.80 и PSR 0.41. Комиссии составили $43.7k, а расчётное влияние на цену — ещё $47.0k. Стратегия убыточна во всех трёх режимах волатильности (коэффициент Шарпа в спокойном режиме -3.7, в обычном — -2.0).
Счёт был ликвидирован, а total_return равен -100%. Месячная доходность была отрицательной каждый месяц с 2020-09 по 2021-01 до полной потери средств.
Сравнение с ориентиром: стратегия «купи и держи» BTC с 2020-08 по 2021-02 выросла примерно на 3x. Бета стратегии равна -0.99, альфа — -2.28, то есть она торговала против сильного тренда без компенсирующего преимущества.
Примечание, не основание для вердикта: в дневном ряду есть неправдоподобные колебания обратного контракта на счёте 0.5x (2021-01-24 -70%, 2021-01-25 +224%, 2020-11-28/29 -20%/+25%). В отчёте также указаны две разные даты ликвидации: дневной ряд заканчивается 2021-02-07, но в liquidation_date указано 2021-10-11. Похоже на аномалию COIN-M MTM или учёта. Я не проверял механизм, а журнал сделок отрицательный независимо от того, реально ли это.
История итераций
Сводка по итогам
Исходные ценовые уровни, использованные как признаки классификатора, не несут информации о направлении следующего бара, поэтому переносы с почасовой сменой позиций на их основе терпят крах при fee_edge, как и предсказывали заранее зарегистрированный прогноз и вывод L167. Отдельно передай на проверку движка дневные колебания COIN-M MTM (-70%, затем +224% на счёте 0.5x) и противоречивые даты ликвидации.
При проверке бэктеста аналитик выбрал отказ от стратегии (fee_edge / negative_expectancy): валовое преимущество было около нуля, поэтому убыток на сделку примерно равнялся стоимости сделки тейкера туда-обратно плюс влиянию на цену. Оптимизация не могла это исправить, а перенастройка spread_val или train_bars нарушила бы требование точного переноса.
Точный перенос стратегии Zero FMZ «SVM предсказывает покупку/продажу»: каждый час модель заново обучала линейный SVM (повторная реализация стандартных настроек sklearn LinearSVC на numpy) на исходных значениях [open, close] последних 300 баров, чтобы предсказать направление следующего бара (SpreadVal=2), и торговала BTCUSD_PERP.BINANCE_CM с таймфреймом 1H, открывая лонг, шорт или оставаясь без позиции, на 50% капитала при плече 1x.
С 2020-08-11 до ликвидации счёта 1,408 сделок в среднем приносили -0.129% за сделку (COIN-M: нижний предел +0.10%); коэффициент прибыльности составил 0.80, коэффициент Шарпа — -0.38 (CI -4.43 до 1.80), доля прибыльных сделок — 53.6%, общая доходность — -100%. Комиссии составили $43.7 тыс., а смоделированное влияние на рынок — ещё $47.0 тыс.; стратегия теряла деньги в спокойном, обычном и стрессовом режимах волатильности.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.