Mga Estratehiya
SOL Pagpapatuloy ng breakout matapos ang macro announcement, long-short (SOLUSDT.BYBIT Perp, nakatali ang trade sa nakatakdang US event: Sundin ang breakout ng range na kaayon ng trend sa oras matapos ang FOMC/CPI/NFP/PCE, time+ATR stop, 3 parameter)
Resulta: Inabandona
SolMacroEventBreakoutContinuationLS
Buod ng Resulta
Sinubukan ng SolMacroEventBreakoutContinuationLS na samantalahin ang repricing na dulot ng impormasyon sa pamamagitan ng trend-aligned range breakout sa SOL perpetual, sa loob lamang ng isang oras matapos ang nakatakdang US macro release, gamit ang deterministic at hardcoded na event calendar na ini-route sa Bybit. Matapat na ipinatupad ng code ang hypothesis (72 nagsenyas = 72 isinumite, balanseng 42 long / 30 short, venue-managed ATR bracket kasama ang time stop), kaya patas ang pagsubok sa mapagpasyang sample na ~5 taon at 72 trade. Ngunit malinaw na negatibo ang resulta: total_return -24.59%, Sharpe -0.662, at profit_factor na 0.657 na mas mababa sa 1 bago pa isama ang mga fee, at kalat ang pagkalugi sa karamihan ng mga taon at kapwa kalmado at stressed na regime. Inabandona ito ng analyst sa backtest-review gate bilang negative_expectancy, dahil napasinungalingan ang premise sa SOL; walang pag-tune ng parameter ang makapagpapataas sa edge na gross-negative bago ang mga gastos, kaya hindi na umabot sa optimization, analysis at risk review.
Hypothesis
Itinatama ng Iteration 2 ang nag-iisang iniulat na pagkabigo (leverage_set_but_unused) sa pinakamaliit na posibleng pagbabago: binabasa na ngayon ng position_size() ang self.config.leverage DIRECTLY (hindi kinilala bilang leverage reference ang dating anyong getattr(self.config, 'leverage', ...)) at ginagamit ito bilang limitasyon sa gross notional: max_notional = equity * max_notional_frac * self.config.leverage. Talagang may epekto ang leverage — ang risk_pct na 1.5%, laban sa karaniwang ~1-1.5% post-release ATR stop, ay nangangailangan ng notional na 1.0-1.5x na equity, na posible lamang sa 2x margin; kaya NOT na kapareho ng 1x ang backtest. Walang ibang binago: hindi ginalaw ang iskedyul ng macro calendar, nakapirming pre-release range, tuloy-tuloy na ATR-distance signal, trend-alignment filter, bracket exit at time stop na nakapasa na sa Layer 1 static analysis.
Implementasyon
Long/short na SOLUSDT Bybit linear-perp strategy na nagte-trade ng ONLY sa loob ng isang oras matapos ang nakatakdang US macro release (FOMC 14:00 ET, CPI/NFP/PCE 08:30 ET), batay sa hardcoded na iskedyul ng event na mula lamang sa kalendaryo. Sa bawat release, ipinapirmi ang high/low range ng pre-release na 2h; pumapasok sa iisang trade bawat event kapag ang 15m close ay lumampas sa range nang higit sa entry_atr_mult ATR, sa direksiyong kapareho ng trailing 3-day return. Pinamamahalaan ang risk gamit ang venue-managed na OUO bracket (ATR-scaled stop + R-multiple take-profit) para makapag-trigger ang mga exit sa loob ng bar sa matitinding post-release candle, kasama ang bar-count time stop. Itinatakda ang laki ng posisyon para malagay sa panganib ang risk_pct ng equity sa ATR stop, na nililimitahan sa max_notional_frac x leverage x equity.
Mga Resulta ng Beripikasyon
Walang kailangang baguhin kung tinatawag ng base ang calculate_signal() sa self.min_bars_required(); kung hindi, palitan ang pangalan para maiwasan ang shadowing at itakda ang warmup sa nilalayong hook.
Ina-overwrite ng min_bars_required() ang method ng base template (na-flag ng static analyzer ang base_shadow). Mukhang sinadya ito — kailangan ng strategy ng mahabang warmup (trend_bars + atr_period + 5 = 389 bar) para mapasimulan ang mga buffer ng ATR/trend — at dahil sa Python polymorphism, ginagamit ng base loop ang override na IS. Hindi ito depekto, pero tiyaking tinatawag talaga ng base template ang instance method (hindi pribadong naka-cache na value) para masunod ang nilalayong 389-bar warmup.
Tiyaking binabasa ng base template ang stop_loss_pct/take_profit_pct mula sa self.parameters (hindi mula sa snapshot na kinuha sa __init__) kapag true ang use_bracket_orders, para umabot sa isinumiteng bracket ang per-event overwrite.
Binabago ng should_enter() ang self.parameters['stop_loss_pct'] / ['take_profit_pct'] sa bawat entry para maging ATR-adaptive ang mga leg ng venue bracket. Nakasalalay ito sa pagbasa ng base template sa mga key na iyon mula sa self.parameters sa oras ng pagsusumite, sa parehong call stack kaagad pagkatapos ng should_enter/position_size. Maayos ang mekanismo at may wastong non-zero default ang config (0.02 / 0.036), kaya hindi kailanman tatanggihan ang mga bracket entry; isa itong tahasang ipinapalagay na kasunduan sa base template.
Bihira ang exogenous trigger: nakabuo ang sandbox ng 9 trade sa loob ng 208 araw, na may ~36% event-to-trade pass rate. Kapag iniuugnay sa ~5-6y na kasaysayan ng Bybit ng SOL (~44 event/taon), ipinahihiwatig nito ang ~95-130 trade lamang — halos kulang para sa statistical power (L16/L26). Net-negative rin ang smoke test ng sandbox (PF 0.23, avg_trade_return_pct -0.36%, negatibo sa lahat ng tatlong vol tercile) sa isang draw na hindi in-optimize; maaaring masyadong pumipili ang trend-alignment filter at entry_atr_mult gate para makabuo ng mapagpasyang sample. Iminumungkahi na tiyakin ng analyst na lumampas sa ~100 ang bilang ng trade sa buong history at nananatili ang net edge bawat trade matapos ang 0.11% Bybit RT bago magsimula ng optimization.
Pagsusuri ng Backtest
- Sharpe
- -0.66
- Kabuuang Return
- -24.59%
- Max Drawdown
- 28.82%
- Kabuuang Trade
- 72
- Win Rate
- 37.5%
- Profit Factor
- 0.66
Matapat at deterministicong naipatupad ang mekanismo: kapag nagsenyas ang 72, isinusumite ang 72, balanseng 42 long / 30 short, hardcoded ang macro calendar nang walang look-ahead, at venue-managed ang ATR bracket kasama ang time stop.
Mapagpasyang sample para sa ganitong dalas ng trading: ang 72 trades sa loob ng 1788 araw (~5 taon) ay sapat para maalis ang pangamba ni QA tungkol sa ~100-trade na bilang. Malapit ito sa bilang na iyon, pero malinaw na negatibo ang resulta.
Gross-negative na signal: profit_factor 0.657 (<1 BEFORE na gastos — 15.4% lamang ng gross ang komisyon), kaya walang pag-tune ng parameter ang makapagpapataas sa edge na negatibo na bago ang mga fee.
Negatibo ang expectancy sa lahat ng sukatan: total_return -24.6%, expectancy -$342.8/trade, Sharpe -0.662 na may CI [-1.474, 0.216] na sumasaklaw sa zero, Sortino -0.20, recovery_factor -0.865.
Kabiguan sa iba’t ibang regime, hindi biglaang pagbagsak: nalulugi sa kalmado (-34.0%) at stressed (-17.8%) na tercile (only_one_regime=true, sa normal na tercile +14.6% lamang ang tubo), at negatibo sa 4 sa 6 taon sa kalendaryo (2022 -4.3%, 2023 -1.2%, 2025 -13.0%, 2026 -9.6%).
Napatunayan sa buong history ang alalahanin ni QA tungkol sa edge, at mas malala pa: hindi nakukuha ng post-macro trend-aligned breakout ang nilalayong galaw — win rate 0.375 (short leg 0.267); walang nalikhang edge ang whipsaw filter.
Kasaysayan ng Iterasyon
Bigo ang verification (leverage_set_but_unused): itinatakda ng config ang leverage=2.0, pero hindi ito ginagamit ng strategy sa pagtakda ng laki ng posisyon. Isama ito sa pagkalkula — notional = equity * fraction * leverage / price (basahin ang self.config.leverage) — o itakda ang leverage=1.0. Sa kasalukuyan, walang epekto ang leverage at kapareho ng 1x ang backtest.
Buod ng Resulta
Hindi sapat ang kapani-paniwalang thesis tungkol sa pagkalkula ng fee; nabigong makuha ng post-macro trend-aligned breakout sa SOL ang nilalayong galaw at nalugi ito sa 4 sa 6 taon at kapwa kalmado at stressed na vol regime, na nagpapakitang napasinungalingan ang premise at hindi lamang marupok dahil sa fee.
Inabandona ito ng analyst sa yugto ng pagsusuri sa backtest bago ang optimization: gross-negative ang signal bago ang mga gastos (profit_factor 0.657, 15.4% lamang ng gross ang komisyon), kaya hindi ito maililigtas ng pag-tune ng parameter at hindi sulit patakbuhin ang walk-forward optimization.
Isang long-short na SOLUSDT.BYBIT perpetual strategy na nagbukas lamang sa loob ng isang oras matapos ang mga nakatakdang US macro release (FOMC/CPI/NFP/PCE), gamit ang hardcoded na event calendar. Sinundan nito ang mga breakout na nakaayon sa trend mula sa pre-release range, na may ATR stop at bar-count time stop.
Sa mahigit 72 trade sa loob ng 1788 araw (~5 taon), nalugi ito na may total_return -24.59%, Sharpe -0.662 (CI [-1.474, 0.216]), profit_factor 0.657, expectancy -$342.84/trade, win rate 0.375 (short leg 0.267), at max drawdown na 28.82%.
Ang Stratmill ay isang tool para sa pananaliksik at paper trading, hindi payo sa pananalapi o isang broker. Ang mga resulta ng backtest at paper trading ay hypothetical. May panganib ng pagkalugi ang pangangalakal.