Μετάβαση στο περιεχόμενο

Προβολή πρωτοτύπου

BtcSpotDualTimeframeMomentumConfluenceLong

Υποθέσεις

BTC Spot Dual-Timeframe Momentum Confluence, LONG-ONLY 1x (BTCUSDT.BINANCE_SPOT, 4H Primary + 1D Confirm, Long Only When BOTH Timeframes Point UP, FLAT to Cash Otherwise, ATR-Trailing + Daily-Regime-Break Exit, Source-Optimised Parameters Retained)

Υποθέσεις

Μια μεταφορά (port) LONG-ONLY, 1x, λογαριασμού CASH της στρατηγικής με την καλύτερη απόδοση που έχει προαχθεί από το factory (BtcDualTimeframeMomentumConfluenceLS, Sharpe 1.99, 458 συναλλαγές, +$4,774 σε 29 ημέρες paper trading) στο BTCUSDT.BINANCE_SPOT, που δημιουργήθηκε ειδικά ως FIRST LIVE-TRADING CANDIDATE επειδή το live venue είναι μόνο spot. Ο μηχανισμός παραμένει αναλλοίωτος, καθαρά OHLCV, ενιαίου μέσου (single-instrument): σκέλος FAST = πρόσημο της trailing απόδοσης 18-bar σε bars 4-HOUR· σκέλος SLOW = πρόσημο της trailing απόδοσης 15-bar σε bars DAILY (αναγνώσιμο μέσω on_extra_bar ως σκέλος πλαισίου, ποτέ ως φραγμός συγχρονισμού). Και τα δύο πρέπει να AGREE. Η μόνη δομική αλλαγή που επιβάλλει ο λογαριασμός CASH είναι η σύμπτυξη {LONG/FLAT/SHORT} σε {LONG/FLAT}: όπου το γονικό futures πηγαίνει SHORT σε κοινή πτωτική σύγκλιση, η έκδοση spot διατηρεί 100% USDT. Όλα τα υπόλοιπα διατηρούνται αυτούσια: trailing stop ATR(14) στο 3.033x ATR από το τρέχον ακραίο σημείο, έξοδος λόγω ημερήσιας μεταβολής καθεστώτος, διαστασιολόγηση σχετική με κεφάλαιο με κλιμάκωση μεταβλητότητας (risk_pct 1.011% / απόσταση stop 3.033xATR), ανώτατο όριο ονομαστικής αξίας 49.7%, και το ακριβές διάνυσμα παραμέτρων που επέλεξε η βελτιστοποίηση πηγής (fast_lookback 18, slow_lookback 15, trail_atr_mult 3.033). Τρεις ρυθμιζόμενες παράμετροι, χωρίς συμπληρωματικά δεδομένα, χωρίς shorts, χωρίς μόχλευση. Αλλαγές κώδικα ειδικά για spot: venue BINANCE_SPOT CASH (χωρίς πολλαπλασιαστή μόχλευσης στο position_size), size_precision 5 / price_precision 2, min_notional $10, πωλήσεις διαστασιολογημένες μόνο ως προς την κατεχόμενη βασική ποσότητα. Δεδομένα επιβεβαιωμένα ως διαθέσιμα: BTCUSDT.BINANCE_SPOT 4-HOUR και 1-DAY bars τρέχουν συνεχόμενα από 2017-08-17 (~9 έτη, ~19,800 bars 4H).

Υποθέσεις

Άμεση μεταφορά (port) του προαχθέντος γονικού futures BtcDualTimeframeMomentumConfluenceLS στο spot venue, επειδή το προβλεπόμενο live venue είναι μόνο spot. Ο μηχανισμός διατηρείται αυτούσιος: τα ίδια δύο σκέλη momentum, η ίδια πύλη AGREE-ή-επίπεδη (flat), το ίδιο trailing stop ATR(14) 3.033x από το τρέχον ακραίο σημείο, η ίδια έξοδος λόγω ημερήσιας μεταβολής καθεστώτος (regime break), η ίδια διαστασιολόγηση με κλιμάκωση μεταβλητότητας risk_pct / απόσταση stop με ανώτατο όριο ονομαστικής αξίας 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 και όχι short. Τροποποιήσεις ειδικά για spot: venue BINANCE_SPOT με μόχλευση 1.0 και χωρίς όρο μόχλευσης στο position_size, size_precision 5 / price_precision 2 (BTCUSDT spot), min_notional αυξήθηκε σε $10, και όλες οι έξοδοι δρομολογούνται μέσω του reduce-only close_position του βασικού template ώστε ένα SELL να μπορεί μόνο να μειώσει την κατεχόμενη βασική ποσότητα (ένα γυμνό spot short είναι αδύνατο εκ κατασκευής, και ο έλεγχος _would_open_spot_short του βασικού template δεν ενεργοποιείται ποτέ). calculate_signal επιστρέφει τη συνεχή απόδοση 18-bar 4H σε κάθε bar (μεταβάλλεται από bar σε bar)· η διακριτή πύλη σύγκλισης (confluence) βρίσκεται στο should_enter, όπως απαιτείται. Το κόστος ανά bar είναι O(1): το ATR χρησιμοποιεί ένα σταθερό παράθυρο 15-bar και η γρήγορη απόδοση είναι μία απλή αναζήτηση με δείκτη, οπότε δεν υπάρχει εργασία που κλιμακώνεται με το ιστορικό. Μία ειλικρινής επιφύλαξη για τον Analyst: το κόστος πλήρους κύκλου στο spot είναι ~0.20% έναντι ~0.10% στο γονικό futures, οπότε το πλεονέκτημα (edge) ανά συναλλαγή πρέπει να καλύψει διπλάσια τριβή — η δομή εξόδου με ακολούθηση τάσης (trail + regime break, χωρίς σταθερό take-profit) είναι αυτό που κάνει τον μέσο χρόνο διακράτησης αρκετά μεγάλο ώστε αυτό να είναι εύλογο, αλλά είναι η μετρική που πρέπει να παρακολουθηθεί πρώτη.

Υλοποίηση

LONG-ONLY 1x BTCUSDT spot (BINANCE_SPOT, CASH) σύγκλιση momentum δύο χρονικών πλαισίων (dual-timeframe). Σκέλος FAST = πρόσημο της trailing απόδοσης 18-bar σε bars 4-HOUR (primary)· σκέλος SLOW = πρόσημο της trailing απόδοσης 15-bar σε bars 1-DAY, το οποίο καταναλώνεται μέσω on_extra_bar ως σκέλος πλαισίου βραδύτερου χρονικού ορίζοντα (διαφορετικό χρονικό πλαίσιο, οπότε ο φραγμός ευθυγράμμισης σκελών (cross-leg alignment barrier) του βασικού template δεν αναβάλλει ποτέ το σήμα 4H). Και τα δύο σκέλη πρέπει να δείχνουν UP για να διατηρηθεί BTC· η κοινή πτώση (όπου το γονικό futures κάνει short) και η διαφωνία σημαίνουν και οι δύο διακράτηση 100% USDT. Έξοδοι: trailing stop ATR(14) στο 3.033x ATR κάτω από το τρέχον υψηλό (peak) της θέσης, OR την αντιστροφή προς τα κάτω του ημερήσιου σκέλους υπό το long (μεταβολή καθεστώτος υψηλότερου χρονικού πλαισίου). Η διαστασιολόγηση είναι κλιμακούμενη ως προς τη μεταβλητότητα και σχετική με το κεφάλαιο: equity * 1.011% / (3.033 * ATR), με ανώτατο όριο 49.7% του υπολοίπου USDT σε ονομαστική αξία, με πολλαπλασιαστή μόχλευσης NO (ο λογαριασμός CASH δεν μπορεί να δανειστεί), κβαντισμένο σε size_precision 5 και απορρίπτεται κάτω από την ελάχιστη ονομαστική αξία spot $10. Τρεις ρυθμιζόμενες παράμετροι, καθαρά OHLCV, χωρίς συμπληρωματικά δεδομένα, χωρίς shorts.

Αποτελέσματα Επαλήθευσης

Είτε χρησιμοποιήστε το self._atr (τρέχον) στη σύγκριση trail του should_exit για ακριβή αντιστοίχιση με το γονικό, είτε δηλώστε ρητά στην περιγραφή ότι το trail είναι αγκυρωμένο στο ATR του bar εισόδου, ώστε ο αναλυτής να μην αποδώσει την απόκλιση από το γονικό στην αλλαγή venue.

Αποτελέσματα Επαλήθευσης

Το ATR του trailing stop είναι FROZEN κατά την είσοδο (self._entry_atr, καταγράφεται στο should_enter / κατά την υιοθέτηση θέσης) και δεν ανανεώνεται ποτέ, οπότε η απόσταση trail είναι 3.033 x ATR-κατά-την-είσοδο αντί για 3.033 x τρέχον ATR(14). Το προαχθέν γονικό futures (BtcDualTimeframeMomentumConfluenceLS4H) προσαρμόζει (ratchets) το trail του με το CURRENT ATR σε κάθε bar. Η διατύπωση της υπόθεσης ('ATR(14) trailing stop στο 3.033x ATR από το τρέχον ακραίο σημείο') ικανοποιείται και στις δύο περιπτώσεις, και εφόσον το _extreme είναι μονότονο το επίπεδο stop εξακολουθεί να προσαρμόζεται μόνο προς τα πάνω, οπότε αυτό δεν αποτελεί ελάττωμα ορθότητας — αλλά σε περίπτωση επέκτασης μεταβλητότητας μετά την είσοδο, το πραγματικό stop είναι πιο σφιχτό από αυτό του γονικού, κάτι που αποτελεί πραγματική συμπεριφορική διαφορά από τη στρατηγική που ισχυρίζεται ότι μεταφέρει 'αυτούσια'.

Αποτελέσματα Επαλήθευσης

Ορίστε την κατάσταση συναλλαγής από την εκτέλεση (on_order_filled / πρώτο bar με ανοιχτή θέση) αντί μέσα στο should_enter, ή επαναφέρετέ την αμυντικά στην αρχή του calculate_signal πριν από την αναζήτηση θέσης.

Αποτελέσματα Επαλήθευσης

Το should_enter() μεταβάλλει την κατάσταση συναλλαγής (_in_long = True, _extreme, _entry_atr) BEFORE το βασικό template έχει διαστασιολογήσει την εντολή και έχει εφαρμόσει τον φραγμό ελάχιστης ονομαστικής αξίας. Αν το position_size() επιστρέψει 0 ή ο έλεγχος ελάχιστης ονομαστικής αξίας $10 απορρίψει την είσοδο, η στρατηγική παραμένει επισημασμένη ως in-long με οπλισμένο trail ενώ είναι flat. Στην πράξη αυτό αυτοθεραπεύεται στο επόμενο bar (calculate_signal βλέπει ότι η θέση είναι None και επαναφέρει τις σημαίες, και το should_exit δεν προσπελαύνεται ποτέ ενώ είναι flat), οπότε δεν υπάρχει παρατηρήσιμο συμπεριφορικό σφάλμα — αλλά η αναλλοίωτη ιδιότητα (invariant) είναι εύθραυστη αν η διαδρομή εξόδου αλλάξει ποτέ.

Αποτελέσματα Επαλήθευσης

Δεν απαιτείται διόρθωση για την ορθότητα. Αν επιθυμείται ακριβώς η ίδια-bar κατανάλωση, υπολογίστε ξανά το _slow_dir με τεμπέλικο (lazy) τρόπο από το self._extra_bars[...] μέσα στο calculate_signal αντί να το αποθηκεύετε στο on_extra_bar.

Αποτελέσματα Επαλήθευσης

Καθυστέρηση ενός bar στο ημερήσιο σκέλος: το DAILY bar και το τελευταίο 4H bar της ημέρας μοιράζονται την ίδια χρονοσφραγίδα κλεισίματος. Αν ο κινητήρας παραδώσει πρώτα το κύριο bar 4H, εκτελείται το _maybe_process_primary() και σφραγίζει το _last_processed_ts, και η ενημέρωση _slow_dir του ημερήσιου bar (που φτάνει με την ίδια χρονοσφραγίδα) καταναλώνεται μόνο από το NEXT 4H bar. Αυτό είναι συντηρητικό (μπορεί μόνο να καθυστερήσει ένα σήμα, ποτέ να διαρρεύσει μελλοντικά δεδομένα), αλλά σημαίνει ότι η έξοδος λόγω ημερήσιας μεταβολής καθεστώτος μπορεί να ενεργοποιηθεί έως και 4 ώρες μετά το ημερήσιο κλείσιμο σε περίπου τις μισές περιπτώσεις, και η ισοτιμία backtest/paper εξαρτάται από τη σταθερότητα της σειράς παράδοσης.

Αποτελέσματα Επαλήθευσης

Πιστή υλοποίηση, αλλά τρία σημεία που ο αναλυτής θα πρέπει να σταθμίσει στο πλήρες ιστορικό: (1) το κόστος πλήρους κύκλου (round-trip) στο spot είναι ~0.20% έναντι ~0.10% του γονικού futures, οπότε το ίδιο μεικτό πλεονέκτημα (edge) αποδίδει καθαρά περίπου τα μισά — το sandbox ήδη δείχνει προμήθεια στο 10.03% του μεικτού· (2) το διάνυσμα παραμέτρων (γρήγορο 18 / αργό 15 / trail 3.033) επιλέχθηκε από μια διαδικασία βελτιστοποίησης σε ένα DIFFERENT venue, μείγμα χρονικού πλαισίου και σύνολο κατευθύνσεων (LONG/SHORT futures), οπότε αυτό αποτελεί μεταφορά εκτός δείγματος (out-of-sample), όχι βελτιστοποιημένη διαμόρφωση — το Sharpe του sandbox είναι 0.527 με sharpe_ci_low -0.233 και information_ratio -0.760 έναντι του benchmark, δηλαδή ένα βιβλίο συναλλαγών μόνο-long BTC που υποαποδίδει σε σχέση με τη διακράτηση BTC στο παράθυρο δοκιμής (smoke window)· (3) η αφαίρεση του short σκέλους αφαιρεί περίπου τον μισό πληθυσμό συναλλαγών του γονικού (250 συναλλαγές, όλες long, 43.6% έκθεση), οπότε το πραγματοποιηθέν Sharpe αναμένεται να είναι σαφώς χαμηλότερο από το 1.99 του γονικού και όχι κοντά σε αυτό. Πρώτο πράγμα προς έλεγχο στο πραγματικό backtest: avg_trade_return_pct έναντι του κατώτατου ορίου κόστους spot 0.25% (το sandbox δείχνει 0.82%, αλλά αυτό το παράθυρο εξαιρεί 2017 και είναι μόνο 2401 ημερών) και αν το 'κανονικό' τριτημόριο μεταβλητότητας (-8.77% στο sandbox) παραμένει αρνητικό στο πλήρες ιστορικό.

Έλεγχος Backtest

314 κλειστές συναλλαγές σε 3146 ημέρες (2017-08 → 2026-03), metrics_reliable=true, entry_diag 314/314 εγγραφές υποβλήθηκαν με 0 απορριφθείσες.

Έλεγχος Backtest

Οι συναλλαγές υλοποιούν την υπόθεση: όλες 314 LONG / 0 short (σωστή σύμπτυξη CASH του LONG/FLAT/SHORT του γονικού), μέγιστη ονομαστική αξία/ίδια κεφάλαια 0.50 έναντι του ανώτατου ορίου 0.497, μέση διακράτηση 4d8h και 43.6% έκθεση που αναπαράγει το γονικό futures.

Έλεγχος Backtest

avg_trade_return_pct 1.20% έναντι κύκλου πλήρους διαδρομής ~0.20% BINANCE_SPOT· οι προμήθειες μόλις 8.97% του μεικτού, επίπτωση 4.33% — δεν είναι οριακό ως προς τα τέλη.

Έλεγχος Backtest

max_drawdown 10.3% (κάτω από το προεπιλεγμένο spot 15%), PF 1.41, απόδοση 2.07 με ποσοστό επιτυχίας 40.4% (σωστό σχήμα τάσης), τριτημόριο μεταβλητότητας υπό πίεση +28.0%.

Έλεγχος Backtest

Ακραία συγκέντρωση: οι κορυφαίες 10 από 314 συναλλαγές = 93.8% της αθροιστικής απόδοσης ανά συναλλαγή, οι κορυφαίες 20 = 141% (οι συναλλαγές 21–314 καθαρά αρνητικές).

Έλεγχος Backtest

Μόνο 6/10 ημερολογιακά έτη θετικά — ακριβώς στο σκληρό κατώτατο όριο — και τα δύο πιο πρόσφατα έτη αρνητικά (2025 −10.5%, 2026 −9.9%).

Έλεγχος Backtest

Sharpe 0.664 με sharpe_ci_low 0.0042 και PSR 0.924 (<0.95): ήδη οριακό πριν από το όριο επιλογής των ~225 δοκιμών.

Έλεγχος Backtest

Η ανησυχία του QA επιβεβαιώνεται εν μέρει: το 'κανονικό' τριτημόριο μεταβλητότητας παραμένει αρνητικό (−7.70%, 16.1% DD), information_ratio −0.757, alpha μόνο +2.4%/έτος — υποαποδίδει σε σχέση με τη διακράτηση BTC, και benchmark_meaningful=true οπότε αυτή η υστέρηση είναι πραγματική.

Έλεγχος Backtest

Οι παράμετροι αποτελούν μεταφορά εκτός δείγματος (out-of-sample) από άλλο venue/σύνολο κατευθύνσεων — μη συντονισμένες (untuned) παρά υπερπροσαρμοσμένες (overfit), αλλά και μη δοκιμασμένες εδώ.
Αναφορά στρατηγικής

Το Stratmill είναι εργαλείο έρευνας και εικονικών συναλλαγών (paper trading), όχι επενδυτική συμβουλή ή χρηματιστηριακός μεσίτης. Τα αποτελέσματα backtest και paper trading είναι υποθετικά. Οι συναλλαγές ενέχουν κίνδυνο απώλειας.