Sări la conținut

Vezi originalul

BtcSpotDualTimeframeMomentumConfluenceLong

Ipoteze

BTC Confluență de momentum spot pe două intervale temporale, LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, interval principal 4H + confirmare 1D, long doar când BOTH intervale temporale indică UP, FLAT în numerar în caz contrar, ieșire prin trailing ATR + ruperea regimului zilnic, parametrii optimizați la sursă păstrați)

Ipoteze

O portare LONG-ONLY, 1x, pe cont CASH, a strategiei promovate cu cele mai bune performanțe din fabrică (BtcDualTimeframeMomentumConfluenceLS, Sharpe 1.99, 458 tranzacții, +$4,774 pe parcursul a 29 zile de tranzacționare simulată) pe BTCUSDT.BINANCE_SPOT, creată special ca FIRST LIVE-TRADING CANDIDATE, deoarece platforma live permite doar spot. Mecanism neschimbat, exclusiv OHLCV, un singur instrument: componenta FAST = semnul randamentului pe ultimele 18 bare de 4-HOUR; componenta SLOW = semnul randamentului pe ultimele 15 bare de DAILY (citită prin on_extra_bar ca o componentă de context, niciodată ca barieră de sincronizare). Ambele trebuie să AGREE. Singura modificare structurală impusă de contul CASH este reducerea {LONG/FLAT/SHORT} la {LONG/FLAT}: acolo unde strategia-sursă pe futures trece la SHORT când ambele componente indică o scădere, versiunea spot deține 100% USDT. Toate celelalte elemente sunt păstrate întocmai: stop trailing ATR(14) la 3.033x ATR față de extremul înregistrat până în acel moment, ieșire la ruperea regimului zilnic, dimensionare raportată la capital și ajustată în funcție de volatilitate (risk_pct 1.011% / distanța până la stop de 3.033xATR), plafon noțional maxim de 49.7% și exact vectorul de parametri selectat de optimizarea sursă (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Trei parametri ajustabili, fără date suplimentare, fără poziții short, fără levier. Modificări de cod specifice spot: platforma BINANCE_SPOT CASH (fără multiplicator de levier în position_size), size_precision 5 / price_precision 2, min_notional $10, vânzări dimensionate exclusiv în limita cantității de activ de bază deținute. Prezența datelor a fost verificată: barele BTCUSDT.BINANCE_SPOT de 4-HOUR și 1-DAY sunt disponibile fără întrerupere începând din 2017-08-17 (~9 ani, ~19,800 bare de 4H).

Ipoteze

Portare directă a strategiei-sursă promovate pe futures BtcDualTimeframeMomentumConfluenceLS pe platforma spot, deoarece platforma vizată pentru tranzacționarea live permite doar spot. Mecanism păstrat întocmai: aceleași două componente de momentum, același filtru AGREE-sau-fără-poziție, același stop trailing ATR(14) 3.033x față de extremul înregistrat până în acel moment, aceeași ieșire la ruperea regimului zilnic, aceeași dimensionare risk_pct ajustată în funcție de volatilitate / distanța până la stop, cu un plafon noțional de 49.7%, și exact vectorul de parametri selectat de optimizarea sursă (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Contul CASH impune exact o singură modificare structurală, conform ipotezei: {LONG,FLAT,SHORT} se reduce la {LONG,FLAT} — should_enter returnează BUY doar când ambele componente indică o creștere și None în caz contrar, astfel încât semnalul comun de scădere înseamnă 100% USDT, în locul unei poziții short. Modificări specifice spot: platforma BINANCE_SPOT cu levier 1.0 și fără termen de levier în position_size, size_precision 5 / price_precision 2 (BTCUSDT spot), min_notional majorat la $10, iar toate ieșirile sunt direcționate prin close_position de tip reduce-only al șablonului de bază, astfel încât un SELL poate doar să reducă cantitatea de activ de bază deținută (o poziție short spot neacoperită este imposibilă prin construcție, iar protecția _would_open_spot_short din clasa de bază nu este niciodată declanșată). calculate_signal returnează la fiecare bară randamentul continuu pe 18 bare de 4H (acesta variază de la o bară la alta); filtrul discret de confluență se află în should_enter, conform cerințelor. Costul de calcul pe bară este O(1): ATR folosește o fereastră fixă de 15 bare, iar randamentul rapid necesită o singură accesare prin index, astfel încât volumul de calcul nu crește odată cu istoricul. O rezervă sinceră pentru Analist: costul unei operațiuni complete de intrare și ieșire pe spot este ~0.20%, față de ~0.10% pentru strategia-sursă pe futures, astfel încât avantajul pe tranzacție trebuie să depășească costuri de tranzacționare duble — structura de ieșire care urmărește tendința (trailing + ruperea regimului, fără take-profit fix) este cea care face durata medie de deținere suficient de lungă pentru ca acest lucru să fie plauzibil, dar acesta este indicatorul de urmărit mai întâi.

Implementare

LONG-ONLY 1x BTCUSDT spot (BINANCE_SPOT, CASH) confluence de momentum pe două intervale. Componenta FAST = semnul randamentului pe ultimele 18 bare calculat pe barele 4-HOUR (primară); componenta SLOW = semnul randamentului pe ultimele 15 bare calculat pe barele 1-DAY, consumată prin on_extra_bar ca o componentă de context pe interval mai lent (interval diferit, astfel încât bariera de aliniere între componente a template-ului de bază nu amână semnalul 4H). Ambele componente trebuie să indice UP pentru a menține BTC; semnalul comun descendent (unde strategia părinte pe futures deschide short) și dezacordul înseamnă ambele menținerea 100% USDT. Ieșiri: trailing stop ATR(14) la 3.033x ATR sub vârful înregistrat al poziției, OR componenta zilnică se inversează descendent sub poziția long (ruperea regimului pe interval superior). Dimensionarea este scalată cu volatilitatea și relativă la capital: capital propriu * 1.011% / (3.033 * ATR), plafonată la 49.7% din soldul USDT în notional, cu multiplicator de levier NO (contul CASH nu poate împrumuta), cuantificată la size_precision 5 și respinsă sub notionalul minim spot de $10. Trei parametri ajustabili, pur OHLCV, fără date suplimentare, fără short.

Rezultate verificare

Fie folosește self._atr (actual) în comparația trailing din should_exit pentru a reproduce exact strategia părinte, fie precizează explicit în descriere că trailing-ul este ancorat la ATR de pe bara de intrare, astfel încât analistul să nu atribuie divergența față de strategia părinte schimbării de venue.

Rezultate verificare

ATR al stopului trailing este FROZEN la intrare (self._entry_atr, înregistrat în should_enter / la preluarea poziției) și nu este niciodată actualizat, astfel încât distanța de trailing este 3.033 x ATR de la intrare, în loc de 3.033 x valoarea curentă a ATR(14). Strategia-sursă promovată pe futures (BtcDualTimeframeMomentumConfluenceLS4H) își ajustează unidirecțional stopul trailing cu CURRENT ATR la fiecare bară. Formularea ipotezei („stop trailing ATR(14) la 3.033x ATR față de extremul înregistrat până în acel moment”) este respectată în ambele variante și, întrucât _extreme este monoton, nivelul stopului continuă să se ajusteze doar în sus, astfel încât aceasta nu este o eroare de corectitudine — dar, la o creștere a volatilității după intrare, stopul efectiv este mai strâns decât cel al strategiei-sursă, ceea ce reprezintă o diferență reală de comportament față de strategia despre care se afirmă că este portată „întocmai”.

Rezultate verificare

Setează starea tranzacției pe baza execuției (on_order_filled / prima bară cu o poziție deschisă), nu în interiorul should_enter, sau reseteaz-o preventiv la începutul calculate_signal, înainte de căutarea poziției.

Rezultate verificare

should_enter() modifică starea tranzacției (_in_long = True, _extreme, _entry_atr) BEFORE ce template-ul de bază a dimensionat ordinul și a aplicat filtrul de notional minim. Dacă position_size() returnează 0 sau verificarea notionalului minim de $10 respinge intrarea, strategia rămâne marcată ca long activ cu trailing armat, deși este flată. În practică, starea se autorepară la bara următoare (calculate_signal vede că poziția este None și resetează indicatorii, iar should_exit nu este atinsă cât timp strategia este flată), astfel încât nu există o eroare comportamentală observabilă — însă invariantul este fragil dacă traseul de ieșire este modificat vreodată.

Rezultate verificare

Nu este necesară nicio remediere pentru corectitudine. Dacă se dorește consumul exact în aceeași bară, recalculează _slow_dir leneș din self._extra_bars[...] în interiorul calculate_signal, în loc să-l memorezi în cache în on_extra_bar.

Rezultate verificare

Latență de o bară pe componenta zilnică: bara DAILY și ultima bară 4H a zilei au același marcaj temporal de închidere. Dacă motorul livrează mai întâi bara primară 4H, _maybe_process_primary() rulează și înregistrează _last_processed_ts, iar actualizarea _slow_dir a barei zilnice (care sosește la același marcaj temporal) este consumată abia din bara NEXT 4H. Acest comportament este conservator (poate doar să întârzie un semnal, niciodată să divulge date viitoare), dar înseamnă că ieșirea la ruperea regimului zilnic se poate declanșa cu până la 4 ore după închiderea zilnică în aproximativ jumătate dintre cazuri, iar paritatea dintre backtest și simularea pe hârtie depinde de stabilitatea ordinii de livrare.

Rezultate verificare

Implementare fidelă, dar există trei aspecte pe care analistul ar trebui să le evalueze pe întregul istoric: (1) costul unei operațiuni complete de intrare și ieșire pe spot este ~0.20%, față de ~0.10% pentru strategia-sursă pe futures, astfel încât același avantaj brut produce un rezultat net de aproximativ jumătate — mediul de testare arată deja comisioane de 10.03% din profitul brut; (2) vectorul de parametri (rapid 18 / lent 15 / trailing 3.033) a fost selectat printr-o rulare de optimizare pe o platformă de tranzacționare, o combinație de intervale temporale și un set de direcții DIFFERENT (LONG/SHORT futures), deci acesta este un transfer în afara eșantionului, nu o configurație optimizată — raportul Sharpe din mediul de testare este 0.527, cu sharpe_ci_low -0.233 și information_ratio -0.760 față de reper, adică un portofoliu BTC exclusiv long care are performanțe inferioare deținerii BTC în fereastra testului preliminar; (3) eliminarea componentei short înlătură aproximativ jumătate din totalul tranzacțiilor strategiei-sursă (250 tranzacții, toate long, expunere 43.6%), astfel încât raportul Sharpe realizat ar trebui să fie așteptat mult sub valoarea de 1.99 a strategiei-sursă, nu aproape de aceasta. Primul lucru de verificat în backtestul propriu-zis: avg_trade_return_pct față de pragul minim spot de 0.25% (mediul de testare arată 0.82%, dar acea fereastră exclude 2017 și are doar 2401 zile) și dacă terțila de volatilitate „normală” (-8.77% în mediul de testare) rămâne negativă pe întregul istoric.

Analiză backtest

314 tranzacții închise pe parcursul a 3146 zile (2017-08 → 2026-03), metrics_reliable=true, entry_diag 314/314 ordine de intrare trimise, dintre care 0 eliminate.

Analiză backtest

Tranzacțiile pun în aplicare ipoteza: toate 314 LONG / 0 short (reducere corectă CASH a LONG/FLAT/SHORT din strategia-sursă), raport maxim valoare noțională/capital propriu 0.50 față de plafonul de 0.497, durată medie de deținere 4z8h și expunere 43.6%, reproducând strategia-sursă pe futures.

Analiză backtest

avg_trade_return_pct 1.20% față de ~0.20% BINANCE_SPOT pentru o operațiune completă de intrare și ieșire; comisioanele reprezintă doar 8.97% din profitul brut, impactul 4.33% — profitabilitatea nu este la limita acoperirii comisioanelor.

Analiză backtest

max_drawdown 10.3% (sub valoarea implicită spot 15%), PF 1.41, randament 2.07 la o rată de succes de 40.4% (formă corectă a trendului), tercila de volatilitate stresată +28.0%.

Analiză backtest

Concentrare extremă: primele 10 din 314 tranzacții = 93.8% din randamentul însumat per tranzacție, primele 20 = 141% (tranzacțiile 21–314 sunt net negative).

Analiză backtest

Doar 6/10 ani calendaristici pe plus — exact la pragul minim strict — și ambii ani recenți pe minus (2025 −10.5%, 2026 −9.9%).

Analiză backtest

Sharpe 0.664 cu sharpe_ci_low 0.0042 și PSR 0.924 (<0.95): deja marginal înaintea pragului de selecție de aproximativ 225 încercări.

Analiză backtest

Îngrijorarea exprimată de QA este parțial confirmată: tercila de volatilitate „normală” rămâne negativă (−7.70%, 16.1% DD), information_ratio −0.757, alfa este de doar +2.4%/an — are performanță inferioară deținerii BTC, iar benchmark_meaningful=true, deci acest deficit este real.

Analiză backtest

Parametrii reprezintă un transfer în afara eșantionului de la o altă platformă de tranzacționare și un alt set de direcții — neajustați, mai degrabă decât supraajustați, dar și netestați aici.
Raportul strategiei

Stratmill este un instrument de cercetare și paper-trading, nu consultanță financiară sau broker. Rezultatele de backtest și paper trading sunt ipotetice. Tranzacționarea implică riscul de pierdere.