BtcSpotDualTimeframeMomentumConfluenceLong
فرضیهها
BTC همگرایی مومنتوم دو-بازهزمانیِ اسپات، LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT، اصلی 4H + تأیید 1D، فقط خرید هنگامی که هر دو بازه زمانی BOTH به سمت UP اشاره کنند، در غیر این صورت FLAT به نقد، خروج با تریلینگ ATR + شکسترژیم روزانه، پارامترهای بهینهشده منبع حفظشده)
فرضیهها
یک پورت LONG-ONLY، 1x، حساب CASH از بهترین استراتژی ارتقاءیافته کارخانه (BtcDualTimeframeMomentumConfluenceLS، شارپ 1.99، 458 معامله، +$4,774 در طول 29 روز آزمایشی) به BTCUSDT.BINANCE_SPOT، که مشخصاً بهعنوان FIRST LIVE-TRADING CANDIDATE ساخته شده زیرا صرافی زنده فقط اسپات است. مکانیزم بدون تغییر، خالص-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 به صرافی اسپات، زیرا صرافی زنده مورد نظر فقط اسپات است. مکانیزم عیناً حفظ شده: همان دو پای مومنتوم، همان دروازه 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، و تمام خروجها از طریق 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 ورود را حذف کند، استراتژی با پرچم in-long و تریل مسلح در حالی که تخت است باقی میماند. در عمل این در کندل بعدی خودبهبود مییابد (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 ساعت پس از بستهشدن روزانه در حدود نیمی از موارد فعال شود، و برابری بکتست/آزمایشی به پایدار بودن ترتیب تحویل بستگی دارد.
نتایج تأیید
پیادهسازی وفادار، اما سه نکته که تحلیلگر باید در تاریخچه کامل بسنجد: (1) رفتوبرگشت اسپات حدود 0.20% است در برابر حدود 0.10% استراتژی مادرِ فیوچرز، بنابراین همان مزیت ناخالص تقریباً نصف میشود — سندباکس در حال حاضر کمیسیون را 10.03% از ناخالص نشان میدهد؛ (2) بردار پارامتر (سریع 18 / کند 15 / تریل 3.033) توسط یک اجرای بهینهسازی روی یک DIFFERENT صرافی، ترکیب بازه زمانی و مجموعه جهت (LONG/SHORT فیوچرز) انتخاب شده است، پس این یک انتقال خارج از نمونه است، نه یک پیکربندی بهینهشده — شارپ سندباکس 0.527 با sharpe_ci_low -0.233 و information_ratio -0.760 در برابر معیار مرجع است، یعنی یک سبد BTC فقط-خرید که در بازه آزمایشی عملکردی پایینتر از نگهداشتن BTC دارد؛ (3) حذف پای فروش کوتاه تقریباً نیمی از جمعیت معاملات استراتژی مادر را حذف میکند (250 معامله، همگی خرید، مواجهه 43.6%)، بنابراین شارپ محققشده باید بهطور قابلتوجهی پایینتر از 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%).
بررسی بکتست
شارپ 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 ابزاری برای پژوهش و معامله آزمایشی است، نه مشاوره مالی یا کارگزار. نتایج بکتست و معامله آزمایشی فرضی هستند. معاملهگری با ریسک زیان همراه است.