27 Αύγουστος 2026 · μηχανική δεδομένων

Το σύμπαν των συμβόλων σου είναι μια χρονομηχανή: μεροληψία επιβίωσης στα backtest crypto perpetuals

Το σύμπαν των συμβόλων σου είναι μια χρονομηχανή: μεροληψία επιβίωσης στα backtest crypto perpetuals

Μου έστειλες το notebook το βράδυ της Κυριακής και από τότε το έχω ανοιχτό στη δεύτερη οθόνη. Cross-sectional momentum, τα 150 Binance USDⓈ-M perps με τον μεγαλύτερο όγκο σε δολάρια τις τελευταίες 30 ημέρες, εβδομαδιαίο rebalancing, long στο ανώτερο δεκατημόριο και short στο κατώτερο, από 2021-01 έως 2026-06. Sharpe 2.31, μέγιστη υποχώρηση 14.2% και ένα μοντέλο κόστους που μου φάνηκε ρεαλιστικό: taker στην είσοδο, taker στην έξοδο, funding που συσσωρεύεται ανά διάστημα, και όρος slippage που κλιμακώνεται ανάλογα με το μέγεθός σου σε σχέση με το βιβλίο εντολών. Έκανες σωστά τη δύσκολη δουλειά. Μετά ρώτησες γιατί έξι εβδομάδες paper trading δεν έβγαλαν τίποτα και αν χάθηκε το πλεονέκτημα.

Δεν χάθηκε. Δεν υπήρξε ποτέ στο backtest. Κοίτα το κελί 4:

info = requests.get(BASE + "/fapi/v1/exchangeInfo").json()
symbols = [s["symbol"] for s in info["symbols"]
           if s["status"] == "TRADING" and s["quoteAsset"] == "USDT"]

Κάλεσες αυτό το endpoint τον Ιούνιο του 2026 και χρησιμοποίησες την απάντηση για να ορίσεις τι ήταν διαπραγματεύσιμο τον Μάρτιο του 2021. Από κατασκευής, κάθε σύμβολο αυτής της λίστας είχε επιβιώσει μέχρι τον Ιούνιο του 2026. Αυτό είναι όλο το σφάλμα, και έχει μεγαλύτερη επίπτωση από όλο το υπόλοιπο μοντέλο κόστους μαζί.

2.31 → 0.74Sharpe, λίστα επιζώντων έναντι point-in-time
~1 στα 5από τα σύμβολα του σύμπαντός σου το 2021 δεν υπάρχουν πια
380 KBένα ημερήσιο snapshot exchangeInfo, συμπιεσμένο με gzip

Τι δεν θα σου πει το endpoint

Το exchangeInfo δεν έχει ιστορικό. Δεν έχει παράμετρο asOf, ούτε αρχείο, ούτε changelog. Είναι μια φωτογραφία του τώρα και η Binance δεν σου υποσχέθηκε ποτέ κάτι άλλο. Όταν γίνεται delist ένα συμβόλαιο, η καταχώρισή του διαγράφεται από την απόκριση και το ticker παύει να υπάρχει για το API. Από το 2019, η Binance έχει καταχωρίσει πάνω από 600 USDⓈ-M perpetuals και έχει αποσύρει πολύ περισσότερα από εκατό. BTS, COCOS, TOMO, RAY, FTT, SC, και μια μεγάλη ουρά από alt-season συμβόλαια του 2021 που είχαν ένα ένδοξο τρίμηνο, κι έπειτα αραίωσαν ώσπου το ανταλλακτήριο τα απέσυρε.

Σκέψου ποια ονόματα λατρεύει ένα momentum screen 30 ημερών. Όχι το BTC. Λατρεύει εκείνο που μόλις τριπλασιάστηκε με το pump της καταχώρισης και έναν κύκλο στο Twitter. Αυτή η ομάδα και η ομάδα των τελικών delistings επικαλύπτονται σε μεγάλο βαθμό, και το φίλτρο του σύμπαντός σου αφαίρεσε ακριβώς αυτή την επικάλυψη.

Ξαναέτρεξα τη στρατηγική σου με το αρχείο των snapshot μας, point-in-time σύμπαν, ίδιο σήμα, ίδιο κόστος, και το Sharpe βγήκε 0.74 με υποχώρηση 31%. Περίπου τα δύο πέμπτα της διαφοράς οφείλονται σε σύμβολα που έγιναν delist και δεν σου επιτρεπόταν ποτέ να κρατήσεις. Άλλο ένα τέταρτο οφείλεται στο αντίστροφο πρόβλημα, που είναι πιο ύπουλο και υποψιάζομαι πως θα σου αρέσει λιγότερο.

Το άλλο άκρο της χρονομηχανής: σύμβολα που δεν υπήρχαν ακόμη

Το feature σου είναι απόδοση 90 ημερών. Το κυλιόμενο παράθυρό σου έχει min_periods=20, επειδή το ρύθμισες μία φορά για να μη σου αφανίσει το warmup το πρώτο τρίμηνο του δείγματος και δεν το ξανακοίταξες. Έτσι, ένα συμβόλαιο που καταχωρίστηκε πριν από 21 ημέρες παίρνει momentum score υπολογισμένο από τρεις εβδομάδες μετακαταχωρισμένης κίνησης τιμών, κατατάσσεται στο ανώτερο δεκατημόριο περίπου όποτε πήγε καλά η καταχώριση, και μπαίνει στο χαρτοφυλάκιό σου.

Αυτό το κομμάτι μπορεί να θεωρηθεί θεμιτό. Να τι δεν είναι: ο πάροχός σου συμπλήρωσε αναδρομικά κάποια από αυτά τα σύμβολα με δεδομένα spot ή δείκτη από πριν υπάρξει το perp, οπότε μερικά συμβόλαια έχουν ιστορικό kline που προηγείται του δικού τους onboardDate. Μπορείς να το ελέγξεις σε περίπου ένα λεπτό. Κάνε join τον πίνακα τιμών με τις ημερομηνίες καταχώρισης και μέτρησε τις γραμμές πριν από την καταχώριση. Στα δεδομένα σου υπάρχουν 41 σύμβολα με μπάρες πριν από την καταχώριση, και ένα από αυτά, το καλοκαίρι του 2023, προσθέτει κέρδος 6% σε μία εβδομάδα στην καμπύλη κεφαλαίου από θέση σε συμβόλαιο που θα εμφανιζόταν εννέα ημέρες αργότερα.

Μια συμβολοσειρά ticker δεν είναι αναγνωριστικό. Είναι μια ετικέτα που νοικιάζεις από το ανταλλακτήριο, μερικές φορές δύο φορές.

Και κάπως έτσι φτάνουμε στις μετονομασίες. Το MATICUSDT έγινε POLUSDT. Το FTMUSDT έγινε SUSDT με μετατροπή 1:1. Η ιστορία του LUNA τον Μάιο του 2022 άφησε ένα LUNCUSDT και αργότερα ένα ολοκαίνουργιο LUNAUSDT, που μοιράζεται την ίδια ρίζα ticker με κάτι που έχασε λίγο-πολύ τα πάντα. Αν ο loader σου χρησιμοποιεί ως κλειδί τη συμβολοσειρά του συμβόλου και ενώνει όποια αρχεία βρει, έχεις τουλάχιστον μία χρονοσειρά με ασυνέχεια που δεν είναι κίνηση τιμής, και το momentum feature σου θα διαβάσει αυτή την ασυνέχεια ως το ισχυρότερο σήμα στη διατομή.

Όλα τα υπόλοιπα που αλλάζουν κάτω από τα πόδια σου

Αφού δεχτείς ότι η λίστα συμβόλων αλλάζει με τον χρόνο, το ίδιο ισχύει και για κάθε άλλο πεδίο σε εκείνη την απόκριση. Για όλα χρησιμοποιείς τις σημερινές τιμές.

ΠεδίοΠώς αλλάζειΤι χαλάει
statusTRADING → SETTLING → εξαφανίζεταιΜεροληψία επιβίωσης· πλασματικές έξοδοι σε τιμή κλεισίματος στην οποία δεν έγινε ποτέ συναλλαγή
onboardDateΝέες καταχωρίσεις κάθε εβδομάδα· απουσιάζει για σύμβολα που έπαψαν να υπάρχουνΣυναλλαγές σε συμβόλαια πριν υπάρξουν
tickSize / stepSizeΡυθμίζονται ξανά καθώς αλλάζουν τα επίπεδα τιμώνΣτρογγυλοποίηση εντολών και τιμές ορίου που θα είχαν απορριφθεί
minNotionalΑυξάνεται με τον καιρό σε ρηχά βιβλία εντολώνΜικρά σκέλη που ο live router σου θα απέρριπτε
fundingIntervalHours8h για χρόνια, έπειτα 4h ή 1h σε πολλά σύμβολαCarry με απόκλιση 2–3× ακριβώς στα alt που κρατά το screen σου
όρια μόχλευσηςΟι βαθμίδες και το περιθώριο συντήρησης αναθεωρήθηκανΜοντελοποίηση ρευστοποίησης και δυνατότητα περιθωρίου

Το funding είναι το πιο επώδυνο στην περίπτωσή σου. Ο βρόχος συσσώρευσης υποθέτει τρεις πληρωμές την ημέρα σε όλο το ιστορικό. Ένα σημαντικό μέρος του alt χαρτοφυλακίου πέρασε σε funding ανά τέσσερις ώρες, και τα short σκέλη σε σύμβολα με υψηλό funding είναι η πηγή μεγάλου μέρους του προσομοιωμένου PnL σου. Δεν έχεις απλώς μια μικρή απόκλιση λόγω στρογγυλοποίησης. Έχεις απόκλιση κατά έναν συντελεστή.

Το ίδιο το delisting είναι ένα συμβάν, και δεν το μοντελοποιείς

Στο point-in-time rerun έδωσα στη στρατηγική σου μια γενναιόδωρη έξοδο. Τα πραγματικά delistings ακολουθούν ένα σενάριο: ανακοίνωση, συνήθως επτά έως δεκατέσσερις ημέρες νωρίτερα, μετά ένα παράθυρο μόνο για μείωση θέσεων και στη συνέχεια αναγκαστικός διακανονισμός σε τιμή mark. Η ανακοίνωση είναι δημόσια πληροφορία και μπορείς να δράσεις βάσει αυτής, οπότε η έντιμη προσομοίωση είναι έξοδος στο κλείσιμο της ημέρας της ανακοίνωσης. Όμως αυτό το κλείσιμο βρίσκεται ήδη 10-20% χαμηλότερα από την προηγούμενη εβδομάδα σε ένα τυπικό alt delisting, το βιβλίο είναι ρηχό, και ο όρος slippage πρέπει να γνωρίζει ότι λειτουργεί σε διαφορετικό καθεστώς. Αν η μηχανή εκτέλεσης σου δίνει την τιμή διακανονισμού χωρίς καμία επίπτωση στην αγορά, έχεις κάνει σιωπηλά τα περιουσιακά στοιχεία που πεθαίνουν διαπραγματεύσιμα σε δίκαιη αξία.

Αν δεν αρχειοθέτησες ποτέ το exchangeInfo, δεν έχεις ξεμείνει από επιλογές. Το δημόσιο dump στο data.binance.vision/data/futures/um/monthly/klines/ εξακολουθεί να κρατά καταλόγους για σύμβολα που έγιναν delist πολύ αφότου το API τα ξέχασε. Κατέγραψε τα περιεχόμενα των καταλόγων, και το πρώτο και τελευταίο μηνιαίο αρχείο για κάθε σύμβολο δίνουν ένα λειτουργικό παράθυρο καταχώρισης και delisting χωρίς κανέναν πάροχο. Είναι ανακατασκευή, όχι αρχείο, και δεν θα ανακτήσει τα tick sizes ή τα διαστήματα funding. Όμως θα σου πει ποιο σύμβολο υπήρχε πότε, δηλαδή το 80% όσων χρειάζεσαι τη Δευτέρα.

Τι θα ήθελα να φτιάξεις πριν ξαναπειράξεις το σήμα

  1. Ένα cron που αντλεί καθημερινά το exchangeInfo από κάθε venue που ερευνάς και το γράφει σε object storage με κλειδί την ημερομηνία. Συμπιεσμένο με gzip είναι κάτω από μισό megabyte. Δέκα χρόνια θα σου κοστίσουν ένα σφάλμα στρογγυλοποίησης στο S3 και θα σου δώσουν μια ερευνητική δυνατότητα που δεν μπορείς να αγοράσεις αργότερα.
  2. Ένα asset master που προκύπτει από αυτά τα snapshot: μία γραμμή ανά (venue, symbol, valid_from, valid_to) με όλο το σύνολο πεδίων. Κάνε diff διαδοχικών snapshot για να το δημιουργήσεις και αντιμετώπιζε κάθε αλλαγή πεδίου ως νέα γραμμή.
  3. Μια συνάρτηση σύμπαντος με υποχρεωτικό όρισμα χρονικής σήμανσης. universe(ts), ποτέ universe(). Κάνε αδύνατη την προεπιλεγμένη επιλογή, ώστε κανείς, ούτε καν εσύ ο μελλοντικός στις 1am, να μην μπορεί κατά λάθος να επιλέξει τη λίστα επιζώντων.
  4. Έναν έλεγχο πριν από την καταχώριση στον loader δεδομένων: καμία μπάρα δεν επιτρέπεται να υπάρχει πριν από το onboard_ts μείον μία ημέρα. Απέτυχε το run· μην εμφανίσεις προειδοποίηση.
  5. Ένα σταθερό εσωτερικό ID μέσου που επιβιώνει από τις μετονομασίες, με το ticker υποβιβασμένο σε χαρακτηριστικό. Αντιστοίχισε τα POL και MATIC σε ένα ID, και επισήμανε τις αλλαγές ονομαστικής αξίας ώστε η λογική συνέχειας να μπορεί να αρνηθεί τη συνένωσή τους.

Κάνε αυτά και ξανατρέξε τη στρατηγική. Η εκτίμησή μου είναι ότι θα βρεθείς κοντά στο 0.74 που υπολόγισα, και το ενδιαφέρον ερώτημα θα είναι αν ένα 0.74 που περιλαμβάνει τα σύμβολα που εξαφανίστηκαν έχει κάτι που αξίζει paper trading. Μπορεί. Το cross-sectional momentum στα perps δεν είναι αμελητέο, και ένα μέρος όσων απομένουν αφού διορθώσεις το σύμπαν είναι γνήσιο carry από τη short πλευρά. Θα δεις επίσης ότι τα αποτελέσματα του paper trading και του backtest αρχίζουν να συμφωνούν, επειδή το paper trading λειτουργούσε πάντα με point-in-time σύμπαν. Δεν είχε άλλη επιλογή.

Υ.Γ. Δεν είναι ιδιοτροπία των crypto, απλώς εδώ είναι πιο έντονο. Οι ερευνητές μετοχών παλεύουν με τις αποδόσεις από delistings και τα επαναχρησιμοποιημένα tickers από τότε που το CRSP άρχισε να τα διαθέτει, ενώ οι αγορές προβλέψεων το πάνε στα άκρα: κάθε συμβόλαιο λήγει εκ σχεδιασμού, άρα το σύμπαν αποτελείται αποκλειστικά από καταχωρίσεις και λήξεις. Αν μεταφέρεις ποτέ αυτό το screen στο Kalshi, φτιάξε πρώτα το asset master. Εκεί δεν υπάρχει άλλου είδους ιστορικό.

μεροληψία επιβίωσηςpoint-in-time δεδομέναcrypto futuresbacktestingμηχανική δεδομένων
ΚοινοποίησηXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Όλα τα άρθρα