HyperliquidSolFundingExtremeContrarian
परिकल्पनाएँ
Hyperliquid SOL Perp Funding-Extreme Contrarian — Long-Short, Single-Name: FADE Crowded Positioning जब Rolling Funding Z-Score Extreme पर पहुँचता है (Very Positive Funding = Over-Leveraged Longs → SHORT; Very Negative = Capitulated Shorts → LONG), Price Non-Confirmation द्वारा पुष्टि, Funding Reversion / ATR Stop / Time Stop पर Exit (SOLUSDT.HYPERLIQUID, 4H, 3-Parameter)
परिकल्पनाएँ
Hyperliquid SOL perpetual पर एक LONG-SHORT, single-instrument, POSITIONING-driven contrarian strategy, जो एक NON-OHLCV mechanical signal — perpetual FUNDING — पर आधारित थी, factory के dead cash-and-carry family के लिए OPPOSITE way में उपयोग की गई। यह NOT delta-neutral carry है (जो इसलिए समाप्त हुई क्योंकि funding P&L basis noise की तुलना में बहुत छोटा था) और NOT price momentum (the HL momentum baskets are 0/84)। इसके बजाय, funding का उपयोग crowding/positioning gauge के रूप में DIRECTIONAL fade का समय तय करने के लिए किया जाता है: अच्छी तरह documented परिणाम यह है कि जब perp funding अत्यंत positive होती है, तो longs over-leveraged होते हैं और hold करने के लिए भुगतान करते हैं — ऐसी स्थिति जो ऐतिहासिक रूप से LOWER forward perp returns (squeeze/washout risk) से पहले आती है; और इसी तरह extreme-negative funding capitulated shorts को दर्शाती है, जिनके बाद bounces आते हैं। एक साथ तीन under-represented buckets भरने के लिए चुना गया: HYPERLIQUID (6.8% बनाम 20% target), long_short (14.2%), और एक data-safe non-OHLCV edge जो OHLCV overfit graveyard में नहीं है। Single-name और 3-parameter deliberately रखे गए, ताकि इसे implementable रखा जा सके (multi-instrument HL baskets coding timeouts में समाप्त हो गए) और overfitting से बचा जा सके। IMPLEMENTATION NOTE: funding baseline को rolling deque के रूप में बनाए रखें और incrementally update करें (प्रति update O(1)) — NEVER में पूरी funding series को rescan करें on_bar (उस pattern के कारण बार-बार 300s sandbox timeouts हुए)।
परिकल्पनाएँ
Iteration 2 single Layer-2 failure (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, सभी छह scenarios) को ठीक करता है। Layer-2 `_StrategyProxy` strategy के प्रत्येक callable attribute को `types.MethodType` के माध्यम से एक plain wrapper पर फिर से bind करता है, जो base class के one-argument `_bar_ts` staticmethod को bound method में बदल देता है — इसलिए `self._bar_ts(bar)` दो arguments के साथ पहुँचता है। न्यूनतम fix उस एक call को module-level `_bar_timestamp_ns(bar)` helper से बदलता है, जो सीधे `bar.ts_event` पढ़ता है (`ts_init` पर fallback करते हुए) — व्यवहारिक रूप से identical और proxy की rebinding से immune। और कुछ नहीं बदला: imports, class structure, funding parsing, signal logic, entries, exits और sizing उस previous_code के byte-identical हैं जिसने Layer 1 पास किया था, इसलिए कोई पिछली check regress नहीं कर सकती। ध्यान दें कि `_bar_interval_ns` अभी भी `__init__` से call होता है, जो proxy द्वारा किसी भी चीज़ को rebind करने से पहले real instance पर चलता है, इसलिए यह अप्रभावित है। Leverage 2.0 को gross-notional cap में `self.config.leverage` के माध्यम से `position_size` में consume किया जाता है।
परिकल्पनाएँ
Negative-expectancy single-name funding-extreme contrarian fade — optimize करने के लिए कोई edge नहीं। PF 0.60, total_return -33.7%, Sharpe -0.42, expectancy -$156/trade, और avg_trade_return_pct -0.37% (negative, 0.15% Hyperliquid fee floor से नीचे, L22)। हर वर्ष नुकसान (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) के साथ long और short दोनों legs की sub-43% win rate और avg_loss > avg_win — contrarian fade व्यवस्थित रूप से move की गलत दिशा में है, और एकमात्र positive month एक single +10.77% outlier day है (kurtosis 9.8)। Mechanism अच्छी तरह implemented है (कोई timeout नहीं, funding credited), लेकिन यह दो zero-survivor families में आता है: single-name mean-reversion/fade (L55) और single-perp supplementary(funding)-gated directional (L73)। Price-non-confirmation gate ने वास्तविक edge नहीं जोड़ा। Per-trade edge का sign negative है, जिसे कोई parameter tuning नहीं पलट सकती। Optimization के 2 घंटे लगाना उचित नहीं। Failure pattern: fee_edge/no_edge single-perp funding-gated contrarian fade।
कार्यान्वयन
Hyperliquid के SOL पर्पेचुअल पर लॉन्ग-शॉर्ट, एकल इंस्ट्रूमेंट की विपरीत-रुझान रणनीति (4 घंटे के बार)। फंडिंग का उपयोग एक ही दिशा में पोज़िशनों की भीड़ के मापक के रूप में किया जाता है: hl_funding_rates के दर्ज मान का, उसके अपने पिछले वितरण के सापेक्ष, रोलिंग z-स्कोर प्रत्येक बार पर सतत संकेत के रूप में लौटाया जाता है। अत्यधिक धनात्मक z (भीड़भाड़ वाली, ज़रूरत से ज़्यादा फंडिंग चुका रही लॉन्ग पोज़िशनें) के विरुद्ध SHORT लिया जाता है; अत्यधिक ऋणात्मक z (हार मान चुके शॉर्ट ट्रेडर) के विरुद्ध LONG लिया जाता है, लेकिन केवल तब जब कीमत भीड़ की दिशा की पुष्टि न करे (समापन मूल्य नया confirm_bars-बार उच्च/निम्न स्तर न बना रहा हो)। निकास फंडिंग के वापस सामान्य होने (|z| <= exit_z), प्रवेश के समय दर्ज और स्थिर किए गए ATR स्टॉप, या position.ts_opened से मापे गए कैलेंडर-समय स्टॉप पर होता है। पोज़िशन का आकार तय करने में जोखिम को प्राथमिकता दी जाती है: ATR स्टॉप लगने पर इक्विटी का लगभग risk_frac नुकसान होता है, और सकल नॉशनल मूल्य पर एक स्वतंत्र सीमा भी लागू है।
सत्यापन परिणाम
CLEAN RESTART 2026-09-04 — इस रन का verdict history और learning records हटा दिए गए और इसे verification से पुनः शुरू किया गया। इसका पिछला abandonment pipeline के कारण हुआ था, market के कारण नहीं: Layer-2 harness ने @staticmethod helpers को गलत bind किया था (ठीक किया गया), QA ने unoptimized smoke test पर terminal performance verdicts जारी किए थे (हटा दिया गया — QA अब केवल correctness का निर्णय करता है), और sandbox timeouts backtest-slot starvation के कारण हुए थे (ठीक किया गया)। Hypothesis और strategy code अपरिवर्तित हैं। Code को उसके merits पर verify करें; performance का निर्णय बाद में full backtest और optimizer द्वारा किया जाएगा।
सत्यापन परिणाम
_param_bounds को 3 headline tunables (entry_z, exit_z, funding_lookback_prints) तक सीमित करें; risk/plumbing params को constants के रूप में lock करें।
सत्यापन परिणाम
Hypothesis एक '3-parameter deliberately, to resist overfitting' design प्रस्तुत करती है, लेकिन _param_bounds में 11 optimizable params सामने आते हैं। Mechanism सही है, लेकिन 11-dim walk-forward search बताए गए anti-overfit rationale के विपरीत है और PBO risk बढ़ाता है। Blocking नहीं।
सत्यापन परिणाम
कोई आवश्यक नहीं; analyst के लिए नोट किया गया।
सत्यापन परिणाम
Layer-2 synthetic signals सभी 0.0 पर frozen थे (कोई funding injected नहीं), इसलिए trading path का exercise केवल sandbox द्वारा हुआ (जिसने real funding पर 65 बार trade किया)। Non-fatal।
बैकटेस्ट समीक्षा
Mechanism साफ़ तौर पर सक्रिय होता है और पर्याप्त sample (953 दिनों में 201 trades) उत्पन्न करता है, कोई timeout नहीं — O(log n) funding implementation अपेक्षित रूप से काम करती है
बैकटेस्ट समीक्षा
Single-instrument, single supplementary feed (hl_funding_rates), कोई data/verification pathology नहीं; funding को PnL में credit किया जाता है
बैकटेस्ट समीक्षा
ऋणात्मक अपेक्षित लाभ: profit_factor 0.60, total_return -33.7%, प्रति ट्रेड अपेक्षित लाभ -$156
बैकटेस्ट समीक्षा
avg_trade_return_pct -0.37% — negative और 0.15% Hyperliquid fee floor (L22) से बहुत नीचे
बैकटेस्ट समीक्षा
तीनों वर्षों में घाटा (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) — लाभकारी बढ़त का लगातार अभाव, न कि समय के साथ क्षीण हुई बढ़त
बैकटेस्ट समीक्षा
दोनों legs नुकसान में हैं (long win 42%, short win 42%) और avg_loss > avg_win — funding-extreme fade move की गलत दिशा में है
बैकटेस्ट समीक्षा
एकमात्र positive month एक single +10.77% outlier day है (kurtosis 9.8); underlying tape समान रूप से negative है
बैकटेस्ट समीक्षा
Single-name funding-gated directional fade — mean-reversion (0/174) और single-perp supplementary-gated directional (L73) zero-survivor classes
Iteration History
Verification विफल (Layer 2 — synthetic scenarios):
उपयोग किए गए Parameters: ['exit_z', 'entry_z', 'atr_bars', 'risk_frac', 'min_prints', 'confirm_bars', '_param_bounds', 'atr_stop_mult', 'max_hold_bars', 'max_lag_seconds', 'max_notional_frac', 'funding_lookback_prints']
जाँचें कि __init__ self.parameters.get() से सभी attributes सेट करता है।
- steady_uptrend: TypeError: FactoryStrategy._bar_ts() को 1 positional argument चाहिए, लेकिन 2 दिए गए (bar timestamp: 1735690500000)
- steady_downtrend: TypeError: FactoryStrategy._bar_ts() को 1 positional argument चाहिए, लेकिन 2 दिए गए (bar timestamp: 1735690500000)
- flat_ranging: TypeError: FactoryStrategy._bar_ts() को 1 positional argument चाहिए, लेकिन 2 दिए गए (bar timestamp: 1735690500000)
- volatility_spike: TypeError: FactoryStrategy._bar_ts() को 1 positional argument चाहिए, लेकिन 2 दिए गए (bar timestamp: 1735690500000)
- zero_volume: TypeError: FactoryStrategy._bar_ts() को 1 positional argument चाहिए, लेकिन 2 दिए गए (bar timestamp: 1735690500000)
- price_gap: TypeError: FactoryStrategy._bar_ts() को 1 positional argument चाहिए, लेकिन 2 दिए गए (bar timestamp: 1735690500000)
Stratmill एक रिसर्च और पेपर-ट्रेडिंग टूल है, वित्तीय सलाह या ब्रोकर नहीं। बैकटेस्ट और पेपर परिणाम काल्पनिक हैं। ट्रेडिंग में नुकसान का जोखिम होता है।