BtcSpotDualTimeframeMomentumConfluenceLong
Гіпотези
BTC Spot Dual-Timeframe Momentum Confluence, LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, 4H Основний + 1D Підтвердження, Лише Лонг, Коли BOTH Таймфрейми Вказують UP, FLAT у Кеш В Інших Випадках, Вихід через Трейлінг ATR + Розрив Денного Режиму, Параметри, Оптимізовані у Джерелі, Збережено)
Гіпотези
LONG-ONLY, 1x, CASH-акаунтне перенесення найкращої просунутої стратегії фабрики (BtcDualTimeframeMomentumConfluenceLS, Sharpe 1.99, 458 угод, +$4,774 за 29 днів paper-трейдингу) на BTCUSDT.BINANCE_SPOT, створене спеціально як FIRST LIVE-TRADING CANDIDATE, оскільки live-майданчик є лише спотовим. Механізм незмінний, чисто OHLCV, для одного інструменту: нога FAST = знак трейлінгової прибутковості за 18 барів на барах 4-HOUR; нога SLOW = знак трейлінгової прибутковості за 15 барів на барах DAILY (зчитується через on_extra_bar як контекстна нога, ніколи не як бар'єр синхронізації). Обидва мають AGREE. Єдина структурна зміна, яку змушує зробити акаунт CASH, — це згортання {LONG/FLAT/SHORT} у {LONG/FLAT}: там, де батьківська ф'ючерсна стратегія входить у SHORT на спільному русі вниз, спотова версія утримує 100% USDT. Все інше збережено дослівно: трейлінг-стоп ATR(14) на рівні 3.033x ATR від поточного екстремуму, вихід за розривом денного режиму, капітал-відносний сайзинг з масштабуванням за волатильністю (risk_pct 1.011% / відстань стопу 3.033xATR), обмеження максимального номіналу 49.7%, і точно той самий вектор параметрів, обраний вихідною оптимізацією (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Три налаштовувані параметри, без додаткових даних, без шортів, без плеча. Специфічні для спота зміни коду: майданчик BINANCE_SPOT CASH (без множника плеча в position_size), size_precision 5 / price_precision 2, min_notional $10, продажі розмірюються лише за наявною базовою кількістю. Наявність даних підтверджено: BTCUSDT.BINANCE_SPOT бари 4-HOUR та 1-DAY безперервно з 2017-08-17 (~9 років, ~19,800 4H барів).
Гіпотези
Пряме перенесення просунутої батьківської ф'ючерсної стратегії BtcDualTimeframeMomentumConfluenceLS на спотовий майданчик, оскільки цільовий live-майданчик — лише спот. Механізм збережено дослівно: ті самі дві моментум-ноги, той самий гейт 'AGREE або поза позицією', той самий трейлінг-стоп ATR(14) 3.033x від поточного екстремуму, той самий вихід за розривом денного режиму, той самий сайзинг з масштабуванням за волатильністю risk_pct / відстань стопу, з обмеженням номіналу 49.7%, і точно той самий вектор параметрів, обраний вихідною оптимізацією (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Обліковий запис CASH змушує зробити рівно одну структурну зміну, як і передбачає гіпотеза: {LONG,FLAT,SHORT} згортається до {LONG,FLAT} — should_enter повертає BUY лише при спільному русі вгору і None в інших випадках, тож спільний рух униз означає 100% USDT, а не шорт. Специфічні для спота правки: майданчик BINANCE_SPOT з плечем 1.0 і без члена плеча в position_size, size_precision 5 / price_precision 2 (BTCUSDT спот), min_notional підвищено до $10, і всі виходи спрямовуються через reduce-only close_position базового шаблону, тож SELL може лише зменшувати наявну базову кількість (голий спотовий шорт неможливий за конструкцією, і захист базового шаблону _would_open_spot_short ніколи не спрацьовує). calculate_signal повертає безперервну прибутковість 18-барного 4H кожен бар (значення змінюється від бару до бару); дискретний гейт узгодженості міститься в should_enter, як і вимагалося. Вартість на бар — O(1): ATR використовує фіксоване вікно з 15 барів, а швидка прибутковість — це одне індексоване звернення, тож роботи, що масштабується з історією, немає. Одне чесне застереження для аналітика: вартість круговорту на споті становить ~0.20% проти ~0.10% у батьківської ф'ючерсної стратегії, тож перевага на угоду має покривати вдвічі більший фрикційний опір — структура виходу за трендом (трейлінг + розрив режиму, без фіксованого тейк-профіту) якраз і робить середню тривалість утримання достатньо довгою, щоб це було правдоподібним, але це перша метрика, за якою варто стежити.
Реалізація
LONG-ONLY 1x BTCUSDT спот (BINANCE_SPOT, CASH) двотаймфреймова моментум-узгодженість. Нога FAST = знак трейлінгової прибутковості за 18 барів на барах 4-HOUR (основний); нога SLOW = знак трейлінгової прибутковості за 15 барів на барах 1-DAY, що споживається через on_extra_bar як контекстна нога повільнішого таймфрейму (інший таймфрейм, тому бар'єр вирівнювання ніг базового шаблону ніколи не відкладає сигнал 4H). Обидві ноги мають вказувати UP, щоб утримувати BTC; спільний рух униз (де батьківська ф'ючерсна стратегія шортить) і розбіжність обидва означають утримувати 100% USDT. Виходи: трейлінг-стоп ATR(14) на рівні 3.033x ATR нижче поточного піку позиції, OR денна нога розвертається вниз під лонгом (розрив режиму на старшому таймфреймі). Сайзинг масштабується за волатильністю і відносний до капіталу: капітал * 1.011% / (3.033 * ATR), з обмеженням 49.7% балансу USDT у номіналі, без множника плеча NO (акаунт CASH не може позичати), квантується до size_precision 5 і відхиляється нижче мінімального спотового номіналу $10. Три налаштовувані параметри, чисто OHLCV, без додаткових даних, без шортів.
Результати перевірки
Або використовуйте self._atr (поточний) у порівнянні трейлінгу в should_exit, щоб точно відповідати батьківській стратегії, або чітко вкажіть в описі, що трейлінг прив'язаний до ATR на барі входу, щоб аналітик не приписував розбіжність з батьківською стратегією зміні майданчика.
Результати перевірки
Трейлінг-стоп ATR FROZEN на момент входу (self._entry_atr, фіксується в should_enter / при прийнятті позиції) і ніколи не оновлюється, тож відстань трейлінгу — це 3.033 x ATR на момент входу, а не 3.033 x поточний ATR(14). Просунута батьківська ф'ючерсна стратегія (BtcDualTimeframeMomentumConfluenceLS4H) підтягує свій трейлінг за CURRENT ATR на кожному барі. Формулювання гіпотези ('трейлінг-стоп ATR(14) на рівні 3.033x ATR від поточного екстремуму') виконується в обох випадках, і оскільки _extreme монотонна, рівень стопу все одно лише підтягується вгору, тож це не дефект коректності — але при розширенні волатильності після входу ефективний стоп жорсткіший, ніж у батьківської стратегії, що є реальною поведінковою відмінністю від стратегії, яка нібито переноситься 'дослівно'.
Результати перевірки
Встановлюйте стан угоди за фактом виконання ордера (on_order_filled / перший бар з відкритою позицією), а не всередині should_enter, або скидайте його захисно на початку calculate_signal перед пошуком позиції.
Результати перевірки
should_enter() змінює стан угоди (_in_long = True, _extreme, _entry_atr) BEFORE того, як базовий шаблон розмірив ордер і застосував гейт мінімального номіналу. Якщо position_size() повертає 0 або перевірка мінімального номіналу $10 відкидає вхід, стратегія залишається позначеною як така, що перебуває в лонгу, з активованим трейлінгом, будучи поза позицією. На практиці це самовідновлюється на наступному барі (calculate_signal бачить, що позиція None, і скидає прапорці, а should_exit ніколи не досягається поза позицією), тож видимого поведінкового бага немає — але цей інваріант крихкий, якщо шлях виходу коли-небудь буде змінено.
Результати перевірки
Виправлення для коректності не потрібне. Якщо потрібне точно однобарне споживання, обчислюйте _slow_dir лениво з self._extra_bars[...] всередині calculate_signal, а не кешуйте його в on_extra_bar.
Результати перевірки
Однобарна затримка на денній нозі: бар DAILY та останній 4H бар дня мають однакову часову мітку закриття. Якщо двигун доставляє основний 4H бар першим, спрацьовує _maybe_process_primary() і фіксується _last_processed_ts, а оновлення _slow_dir денного бару (що надходить з тією ж міткою часу) споживається лише з наступного NEXT 4H бару. Це консервативно (може лише затримати сигнал, але ніколи не спричинити витік майбутніх даних), але це означає, що вихід за розривом денного режиму може спрацювати аж до 4 годин після денного закриття приблизно у половині випадків, а паритет бектесту й paper-трейдингу залежить від стабільності порядку доставки.
Результати перевірки
Точна реалізація, але є три моменти, які аналітику варто зважити на повній історії: (1) вартість круговорту на споті становить ~0.20% проти ~0.10% у батьківської ф'ючерсної стратегії, тож та сама валова перевага фактично зменшується вдвічі — у пісочниці комісія вже становить 10.03% валового результату; (2) вектор параметрів (швидкий 18 / повільний 15 / трейлінг 3.033) був обраний в результаті оптимізації на DIFFERENT майданчику, наборі таймфреймів і напрямків (LONG/SHORT ф'ючерси), тож це перенесення поза вибіркою, а не оптимізована конфігурація — Sharpe у пісочниці становить 0.527 із sharpe_ci_low -0.233 та information_ratio -0.760 проти бенчмарку, тобто портфель лише в лонг BTC, який відстає від утримання BTC на тестовому вікні; (3) відкидання шортової ноги видаляє приблизно половину популяції угод батьківської стратегії (250 угод, усі лонг, 43.6% експозиція), тож реалізований Sharpe слід очікувати значно нижчим за 1.99 батьківської стратегії, а не близьким до нього. Перше, що варто перевірити на реальному бектесті: avg_trade_return_pct проти 0.25% мінімального порога споту (у пісочниці показано 0.82%, але це вікно не включає 2017 і триває лише 2401 днів) та чи залишається 'нормальний' терциль волатильності (-8.77% у пісочниці) негативним на повній історії.
Огляд бектесту
314 закритих угод за 3146 днів (2017-08 → 2026-03), metrics_reliable=true, подано entry_diag 314/314 записів, 0 відхилено.
Огляд бектесту
Угоди реалізують гіпотезу: усі 314 LONG / 0 шорт (правильне CASH згортання LONG/FLAT/SHORT батьківської стратегії), максимальний номінал/капітал 0.50 проти обмеження 0.497, середнє утримання 4д8г та 43.6% експозиція, що відтворює батьківську ф'ючерсну стратегію.
Огляд бектесту
avg_trade_return_pct 1.20% проти ~0.20% BINANCE_SPOT за круговорот; комісії становлять лише 8.97% валового результату, вплив 4.33% — не гранично залежить від комісій.
Огляд бектесту
max_drawdown 10.3% (за замовчуванням спот 15%), PF 1.41, виплата 2.07 при частці виграшних угод 40.4% (правильна форма тренду), терциль підвищеної волатильності +28.0%.
Огляд бектесту
Екстремальна концентрація: топ 10 з 314 угод = 93.8% сумарної прибутковості по угодах, топ 20 = 141% (угоди 21–314 у сумі збиткові).
Огляд бектесту
Лише 6/10 календарних роки позитивні — точно на межі жорсткого порогу — і обидва останні роки негативні (2025 −10.5%, 2026 −9.9%).
Огляд бектесту
Sharpe 0.664 з sharpe_ci_low 0.0042 та PSR 0.924 (<0.95): вже на межі до бар'єру відбору з ~225 спроб.
Огляд бектесту
Занепокоєння QA частково підтвердилося: 'нормальний' терциль волатильності залишається негативним (−7.70%, 16.1% DD), information_ratio −0.757, альфа лише +2.4%/рік — стратегія відстає від утримання BTC, і benchmark_meaningful=true, тож це відставання реальне.
Огляд бектесту
Параметри — це перенесення поза вибіркою з іншого майданчику/набору напрямків: не перепідігнані, але водночас і не протестовані тут.
Stratmill — це інструмент для дослідження та паперової торгівлі, а не фінансова консультація чи брокер. Результати бектестів і паперової торгівлі є гіпотетичними. Торгівля пов'язана з ризиком втрати коштів.