עבור לתוכן

הצגת המקור

BtcSpotDualTimeframeMomentumConfluenceLong

השערות

BTC מומנטום ספוט דו-טווח-זמן (Spot Dual-Timeframe Momentum Confluence), LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, 4H ראשי + אישור 1D, לונג בלבד כאשר BOTH טווחי הזמן מצביעים UP, FLAT למזומן אחרת, טריילינג ATR + יציאה בעקבות שבירת-משטר יומית, פרמטרים ממוטבי-מקור נשמרו)

השערות

העברת חשבון LONG-ONLY, 1x, CASH של האסטרטגיה המקודמת בעלת הביצועים הטובים ביותר במפעל (BtcDualTimeframeMomentumConfluenceLS, שארפ 1.99, 458 עסקאות, +$4,774 על פני 29 ימי נייר (paper)) אל 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 בירידה משותפת (joint-down), גרסת הספוט מחזיקה 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). שלושה פרמטרים כווניים (tunables), ללא נתונים משלימים, ללא שורטים, ללא מינוף. שינויי קוד ספציפיים לספוט: זירת 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-or-flat, אותו טריילינג סטופ ATR(14) 3.033x מהקיצון המתגלגל, אותה יציאה בעקבות שבירת-משטר יומית (daily-regime-break), אותו גודל פוזיציה מותאם-תנודתיות risk_pct / מרחק-סטופ עם תקרת נוציונל 49.7%, ואותו וקטור פרמטרים מדויק שנבחר על ידי האופטימיזציה במקור (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). חשבון ה-CASH מכריח שינוי מבני יחיד בדיוק, כפי שההיפותזה מפרטת: {LONG,FLAT,SHORT} מתקפל ל-{LONG,FLAT} — should_enter מחזיר BUY רק כאשר יש עלייה משותפת (joint-up) ו-None בכל מקרה אחר, כך שירידה משותפת (joint-down) היא 100% USDT ולא שורט. עריכות ספציפיות לספוט: זירת BINANCE_SPOT עם מינוף 1.0 וללא איבר מינוף ב-position_size, size_precision 5 / price_precision 2 (BTCUSDT ספוט), min_notional הועלה ל-$10, וכל היציאות מנותבות דרך close_position מסוג reduce-only של תבנית הבסיס כך ש-SELL יכול רק להקטין כמות בסיס מוחזקת (שורט ספוט חשוף (naked) בלתי אפשרי מבחינה מבנית, וההגנה _would_open_spot_short של הבסיס אף פעם לא מופעלת). calculate_signal מחזיר את תשואת ה-18-נר 4H הרציפה בכל נר (היא משתנה מנר לנר); שער ההסכמה (confluence) הבדיד נמצא ב-should_enter, כנדרש. העלות לכל נר היא O(1): ATR משתמש בחלון קבוע של 15 נרות והתשואה המהירה היא חיפוש אינדקס בודד, כך שאין עבודה שמתעצמת עם ההיסטוריה. הסתייגות כנה לאנליסט: עלות הליכה-ושיבה (round-trip) בספוט היא כ-0.20% לעומת כ-0.10% באב-החוזים העתידיים, כך שהקצה לכל עסקה חייב לכסות כפול מהחיכוך — מבנה היציאה במגמת-מעקב (טריילינג + שבירת משטר, ללא take-profit קבוע) הוא מה שגורם למשך ההחזקה הממוצע להיות ארוך מספיק כדי שזה יהיה סביר, אך זה המדד הראשון שיש לעקוב אחריו.

מימוש

LONG-ONLY 1x BTCUSDT ספוט (BINANCE_SPOT, CASH) הסכמת מומנטום דו-טווח-זמן (dual-timeframe momentum confluence). רגל FAST = סימן תשואת 18-הנר המתגלגלת על נרות 4-HOUR (ראשי); רגל SLOW = סימן תשואת 15-הנר המתגלגלת על נרות 1-DAY, נקראת דרך on_extra_bar כרגל הקשר בטווח-זמן איטי יותר (טווח זמן שונה, כך שמחסום היישור בין הרגליים בתבנית הבסיס אף פעם לא דוחה את אות ה-4H). על שתי הרגליים להצביע UP כדי להחזיק BTC; גם ירידה משותפת (joint-down, שבה אב-החוזים העתידיים עושה שורט) וגם אי-הסכמה משמעותם החזקת 100% USDT. יציאות: טריילינג סטופ ATR(14) ב-3.033x ATR מתחת לשיא המתגלגל של הפוזיציה, OR הרגל היומית מתהפכת כלפי מטה תחת הלונג (שבירת משטר בטווח-זמן גבוה יותר). גודל הפוזיציה מותאם-תנודתיות ויחסי-הון: equity * 1.011% / (3.033 * ATR), עם תקרה של 49.7% מיתרת USDT בנוציונל, עם מכפיל מינוף NO (חשבון CASH אינו יכול ללוות), מקוונטט ל-size_precision 5 ונדחה מתחת לנוציונל המינימלי לספוט של $10. שלושה פרמטרים כווניים (tunables), OHLCV טהור, ללא נתונים משלימים, ללא שורטים.

תוצאות אימות

יש להשתמש ב-self._atr (הנוכחי) בהשוואת הטריילינג של should_exit כדי להתאים לאב במדויק, או לציין במפורש בתיאור שהטריילינג מעוגן ל-ATR של נר הכניסה, כך שהאנליסט לא ייחס את הסטייה מהאב לשינוי הזירה.

תוצאות אימות

ATR של הטריילינג סטופ הוא FROZEN בכניסה (self._entry_atr, נלכד ב-should_enter / עם אימוץ הפוזיציה) ואף פעם לא מתעדכן, כך שמרחק הטריילינג הוא 3.033 x ATR-בכניסה ולא 3.033 x ATR(14) נוכחי. אב-החוזים העתידיים המקודם (BtcDualTimeframeMomentumConfluenceLS4H) מהדק (ratchets) את הטריילינג שלו עם CURRENT ATR בכל נר. ניסוח ההיפותזה ('טריילינג סטופ ATR(14) ב-3.033x ATR מהקיצון המתגלגל') מתקיים בשני המקרים, ומכיוון ש-_extreme הוא מונוטוני, רמת הסטופ עדיין רק מהודקת כלפי מעלה, כך שזה אינו פגם בנכונות — אך בהתרחבות תנודתיות לאחר הכניסה, הסטופ האפקטיבי הדוק יותר משל האב, וזהו הבדל התנהגותי אמיתי מהאסטרטגיה שהעברה שלה נטענת כ'כלשונה' (verbatim).

תוצאות אימות

יש להגדיר את מצב העסקה מתוך הביצוע (fill) (on_order_filled / הנר הראשון עם פוזיציה פתוחה) ולא בתוך should_enter, או לאפס אותו באופן מגונן בראש calculate_signal לפני חיפוש הפוזיציה.

תוצאות אימות

should_enter() משנה את מצב העסקה (_in_long = True, _extreme, _entry_atr) BEFORE תבנית הבסיס קבעה את גודל ההזמנה והחילה את שער הנוציונל המינימלי. אם position_size() מחזיר 0 או שבדיקת הנוציונל המינימלי של $10 דוחה את הכניסה, האסטרטגיה נשארת מסומנת כ-in-long עם טריילינג מוכן (armed) בעודה שטוחה (flat). בפועל זה מתקן את עצמו (self-heals) בנר הבא (calculate_signal רואה שהפוזיציה היא None ומאפס את הדגלים, ו-should_exit אף פעם לא נגיש בעודה שטוחה), כך שאין באג התנהגותי נראה לעין — אך השמורה (invariant) שברירית אם נתיב היציאה אי פעם ישתנה.

תוצאות אימות

אין צורך בתיקון לצורך נכונות. אם רוצים צריכה באותו נר בדיוק, יש לחשב מחדש את _slow_dir באופן עצל (lazily) מתוך self._extra_bars[...] בתוך calculate_signal במקום לשמור אותו במטמון (cache) ב-on_extra_bar.

תוצאות אימות

השהיית נר אחד ברגל היומית: לנר DAILY ולנר ה-4H האחרון של היום יש אותו חותמת זמן סגירה (timestamp). אם המנוע מספק תחילה את נר ה-4H הראשי, _maybe_process_primary() רץ ומטביע חותמת _last_processed_ts, ועדכון ה-_slow_dir של הנר היומי (המגיע באותה חותמת זמן) נקלט רק מנר ה-NEXT 4H. זה שמרני (הוא יכול רק לעכב אות, לעולם לא לדלוף מידע עתידי), אך המשמעות היא שהיציאה בעקבות שבירת-משטר יומית יכולה להתרחש עד 4 שעות לאחר הסגירה היומית בכמחצית מהמקרים, ותאימות ה-backtest/paper תלויה בכך שסדר האספקה יהיה יציב.

תוצאות אימות

מימוש נאמן למקור, אך יש שלושה דברים שעל האנליסט לשקול על פני מלוא ההיסטוריה: (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% לעומת הליכה-ושיבה (round trip) של כ-0.20% BINANCE_SPOT; העמלות הן רק 8.97% מהגולמי, השפעה 4.33% — לא גבולי מבחינת עמלות (not fee-marginal).

סקירת בדיקה היסטורית

max_drawdown 10.3% (תחת ברירת המחדל של ספוט 15%), PF 1.41, תשלום 2.07 עם שיעור פגיעה 40.4% (צורת מגמה נכונה), שליש תנודתיות בלחץ (stressed) +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): כבר גבולי (marginal) לפני רף הבחירה של כ-225 ניסויים (trials).

סקירת בדיקה היסטורית

החשש של QA אושר חלקית: שליש התנודתיות ה'רגיל' נשאר שלילי (−7.70%, 16.1% DD), information_ratio −0.757, אלפא של +2.4%/שנה בלבד — הוא נחות בביצועים לעומת החזקת BTC, ומכיוון ש-benchmark_meaningful=true הפער הזה אמיתי.

סקירת בדיקה היסטורית

הפרמטרים הם העברה מחוץ למדגם (out-of-sample) מזירה/סט כיוונים אחר — לא מכוילים (untuned) ולא מותאמי-יתר (overfit), אך גם לא נבחנו כאן.
דוח אסטרטגיה

Stratmill הוא כלי למחקר ולמסחר נייר (Paper Trading), ואינו ייעוץ פיננסי או ברוקר. תוצאות בדיקה לאחור ומסחר נייר הן היפותטיות. מסחר טומן בחובו סיכון להפסד.