26 Αύγουστος 2026 · δεδομένα αγοράς

Ανατομία ενός κεριού 1 λεπτού: όσα το OHLCV δεν αποκαλύπτει στο backtest σου

Ανατομία ενός κεριού 1 λεπτού: όσα το OHLCV δεν αποκαλύπτει στο backtest σου

Ιδού ένα κερί. Binance USDⓈ-M perpetual, BTCUSDT, το λεπτό που ξεκινά στις 13:46:00 UTC. Προήλθε από το endpoint klines ως ένας απλός πίνακας δώδεκα τιμών, και είναι η πιο συνηθισμένη μονάδα εισόδου στην ποσοτική έρευνα retail επενδυτών και συναφών παραγόντων. Σχεδόν κάθε στρατηγική που παράγουμε αγγίζει κάτι με αυτή τη μορφή.

Ας το αναλύσουμε λοιπόν, δείκτη προς δείκτη, και ας δούμε πόσα από αυτά παρερμηνεύει ένα backtest.

ΔείκτηςΤιμήΌνομα
01773495960000ώρα ανοίγματος (ms)
1"84120.50"άνοιγμα
2"84177.90"υψηλό
3"84098.10"χαμηλό
4"84163.40"κλείσιμο
5"38.417"όγκος βάσης (BTC)
61773496019999ώρα κλεισίματος (ms)
7"3232108.94"όγκος quote (USDT)
81204αριθμός συναλλαγών
9"21.883"όγκος βάσης από αγορές taker
10"1841203.55"όγκος quote από αγορές taker
11"0"αγνόηση

[0] και [6]: ποιο λεπτό είναι αυτό, και ποιο ρολόι το λέει

Ώρα ανοίγματος 1773495960000, ώρα κλεισίματος 1773496019999. Πρόσεξε τη δεύτερη: τελειώνει σε 19999, ένα χιλιοστό του δευτερολέπτου πριν από το άνοιγμα του επόμενου κεριού. Το παράθυρο είναι μισό-ανοικτό (half-open), και το χρηματιστήριο σου το λέει ρητά. Οι μισοί από τους bugs δεδομένων που έχω κυνηγήσει ξεκίνησαν επειδή κάποιος αντιμετώπισε και τα δύο άκρα ως συμπεριλαμβανόμενα και μέτρησε διπλά μια συναλλαγή στο όριο, ή ευθυγράμμισε ένα resample έτσι ώστε κάθε κερί 5 λεπτών να δανείζεται ένα χιλιοστό του δευτερολέπτου από τον γείτονά του.

Οι χρονοσφραγίδες είναι ώρα του matching engine του χρηματιστηρίου. Όχι το ρολόι σου, όχι το ρολόι λήψης δεδομένων του προμηθευτή σου, και όχι το ίδιο ρολόι που χρησιμοποιεί το στιγμιότυπο funding. Όταν συνδέεις (join) μια σειρά kline με μια σειρά funding rate ή μια σειρά open interest που αντλήθηκε από διαφορετικό endpoint, συνδέεις πηγές που συμφωνούν εντός περίπου ενός δευτερολέπτου, τις περισσότερες φορές. Για μια στρατηγική 1 λεπτού αυτό είναι σφάλμα χρονισμού 1,7% σε κάθε συνδεδεμένη γραμμή. Για οτιδήποτε κάτω από το λεπτό είναι μοιραίο.

Και αυτό το κερί φέρει χρονοσφραγίδα στο άνοιγμά του. Οι πληροφορίες που περιέχει δεν είναι γνωστές μέχρι τις 13:46:59.999. Κάθε ερώτημα σύμβασης δεικτοδότησης — μετατοπίζω κατά ένα, χρησιμοποιώ τη χρονοσφραγίδα κλεισίματος ή ανοίγματος του κεριού ως χρόνο συμβάντος — είναι στην πραγματικότητα το ίδιο ερώτημα lookahead μεταμφιεσμένο.

[1] "84120.50": το άνοιγμα που δεν μπορείς να διαπραγματευτείς

Το άνοιγμα είναι η τιμή της πρώτης συναλλαγής που καταγράφηκε μέσα στο παράθυρο. Είναι μια ολοκληρωμένη συναλλαγή μεταξύ δύο άλλων ανθρώπων. Μέχρι τη στιγμή που το κερί υπάρχει ως γραμμή στο dataframe σου, αυτή η τιμή είναι ήδη εξήντα δευτερόλεπτα παλιά.

Το προηγούμενο κερί έκλεισε στα 84109.80, οπότε υπάρχει κίνηση τιμής $10.70 μέσα στο κενό (gap) ανάμεσα σε δύο διαδοχικά κεριά 1 λεπτού. Αυτό είναι 1,3 μονάδες βάσης, αόρατο σε ένα γράφημα, και περίπου το ένα τέταρτο της προμήθειας taker. Εντάξει. Αλλά κοίταξε την ίδια σειρά σε ένα alt perp κατά τη διάρκεια ανακοίνωσης CPI των ΗΠΑ και αυτά τα κενά μεταξύ κεριών φτάνουν τις 15 έως 40 μονάδες βάσης. Ένα backtest που δίνει σήμα στο κλείσιμο του κεριού και εκτελείται στο άνοιγμα του επόμενου κεριού υποθέτει σιωπηλά ότι το κενό είναι μηδέν, και είναι μηδέν ακριβώς όταν δεν έχει σημασία.

[2] και [3]: "84177.90" υψηλό, "84098.10" χαμηλό

Εδώ είναι που πεθαίνουν οι περισσότερες μηχανές εκτέλεσης (fill engines), γι' αυτό αυτή η ενότητα είναι η μεγάλη.

Το υψηλό και το χαμηλό είναι ακραίες τιμές που αγγίχθηκαν. Δεν φέρουν ούτε μέγεθος ούτε διάρκεια. Από το ακατέργαστο trade tape για το ίδιο αυτό λεπτό, όλα όσα ήταν στα 84100.00 ή χαμηλότερα ήταν 0,62 BTC σε εννέα καταγραφές μέσα σε ένα παράθυρο 1,4 δευτερολέπτων. Οπότε ένα stop backtest στα 84100 "εκτελείται" — και αν η θέση σου είναι 3 BTC, έφαγες ολόκληρο το ορατό βιβλίο εντολών στην πτώση και το υπόλοιπο μέγεθός σου εκτελέστηκε κάπου στην επαναφορά 84105–84130. Το κερί λέει ότι το χαμηλό ήταν 84098.10. Το κερί δεν λέει ότι μόλις $52.000 ονομαστικής αξίας διαπραγματεύτηκαν εκεί.

1204συναλλαγές στο λεπτό
0.032 BTCμέσο μέγεθος καταγραφής (~$2,7k)
0.62 BTCσύνολο διαπραγματεύσεων στο ή κάτω από το χαμηλό tick
57%του όγκου ξεκίνησε από αγοραστές

Η αντίθετη κατεύθυνση είναι χειρότερη, γιατί σε κολακεύει. Ας υποθέσουμε ότι είχες μια εντολή sell limit σε αναμονή στα 84175. Το υψηλό του κεριού είναι 84177.90, οπότε μια αφελής μηχανή σε εκτελεί στα 84175 και καταγράφει maker rebate αντί για κόστος taker. Το αν αυτή η εκτέλεση πραγματικά συνέβη εξαρτάται από τη θέση στην ουρά (queue position) σε εκείνο το επίπεδο τιμής, κάτι που το κερί δεν μπορεί να γνωρίζει και εσύ πιθανότατα ποτέ δεν κατέγραψες. Το να αγγιχθεί δεν σημαίνει ότι εκτελέστηκε.

Ο κανόνας στον οποίο καταλήξαμε στη μηχανή εκτέλεσής μας: μια εντολή limit σε αναμονή εκτελείται μόνο αν το κερί διαπραγματευτεί μέσα από το επίπεδο, όχι απλώς μέχρι εκεί. Οι εκτελέσεις ακριβώς στο ακραίο tick απαιτούν αποδεικτικά στοιχεία όγκου-ανά-τιμή από το trade tape, διαφορετικά απορρίπτονται. Αυτό αφαίρεσε περίπου 6% των συναλλαγών από ένα τυπικό βιβλίο mean-reversion και μείωσε το backtested Sharpe μιας υποψήφιας στρατηγικής από 1,9 σε 1,1. Αυτή η υποψήφια στρατηγική δεν ήταν ποτέ πραγματική· ο κανόνας εκτέλεσης απλώς ήταν το πρώτο πράγμα αρκετά ειλικρινές ώστε να το πει.

Σχετική παγίδα: η διαδρομή εντός του κεριού (intrabar path). Αν το εύρος ενός κεριού καλύπτει τόσο το stop όσο και το take-profit σου, το OHLCV δεν μπορεί να σου πει ποιο ήρθε πρώτο. Κάθε μηχανή πρέπει να επιλέξει μια σύμβαση. Η δική μας υποθέτει πάντα stop-first, κάτι που είναι απαισιόδοξο και περιστασιακά λάθος, αλλά ποτέ δεν παράγει ψεύτικο κέρδος. Αν η μηχανή σου υποθέτει take-profit-first, τα κεριά με μεγάλο εύρος θα κατασκευάσουν κέρδος από την ασάφεια, και τα κεριά με μεγάλο εύρος είναι ακριβώς αυτά που κυριαρχούν στην κατανομή του PnL σου.

[4] "84163.40": ο λιγότερο αξιόπιστος αριθμός στο κερί

Το κλείσιμο είναι η τελευταία καταγραφή μέσα στο παράθυρο. Αυτό είναι όλο. Μπορεί να είναι ένα odd-lot 0,002 BTC από ένα bot που στρογγυλοποιεί μια θέση στις 13:46:59.8. Αυτό το ένα, δομικά τυχαίο tick είναι αυτό που οι περισσότερες pipelines έρευνας χρησιμοποιούν για να υπολογίσουν κάθε σήμα, να αποτιμήσουν κάθε θέση, και να αξιολογήσουν κάθε έξοδο.

Στα BTC perps έχει ελάχιστη σημασία· σε ένα λεπτόρρευστο altcoin perp στις 04:00 UTC έχει τεράστια σημασία, και η διαφορά ανάμεσα στα κλεισίματα δύο venues για το ίδιο λεπτό μπορεί να ξεπεράσει ολόκληρο το edge σου ανά συναλλαγή. Όταν το PnL μιας στρατηγικής εξαρτάται συγκεκριμένα από το κλείσιμο, την ξανατρέχουμε αποτιμώντας αντ' αυτού στη mark price του χρηματιστηρίου, η οποία προκύπτει από δείκτη (index) και είναι πολύ πιο δύσκολο να παραποιηθεί. Αν τα αποτελέσματα διαφέρουν, η στρατηγική διαπραγματευόταν το τεχνούργημα (artifact).

[5] και [7]: "38.417" και "3232108.94", όγκος σε ποιες μονάδες

Ο όγκος βάσης είναι σε BTC· ο όγκος quote είναι σε USDT. Και τα δύο εδώ, κάτι που δεν προσφέρουν όλα τα venues. Ο λόγος που έχει σημασία είναι η συγκέντρωση (aggregation) δεδομένων σε πολλαπλά venues. Τα coin-margined συμβόλαια τιμολογούνται σε συμβόλαια ονομαστικής αξίας $100. Κάποια equities feeds αναφέρουν round lots. Τα venues προγνωστικών αγορών (prediction markets) αναφέρουν αριθμό μεριδίων (shares) όπου ένα μερίδιο είναι μια δυαδική αξίωση σε δολάρια. Το να αθροίζεις "όγκο" σε ένα μεικτό σύμπαν χωρίς κανονικοποίηση σε μία ενιαία μονάδα ονομαστικής αξίας παράγει μια κατάταξη ρευστότητας που είναι καθαρή ανοησία — και θα είναι ανοησία με τρόπο που φαίνεται σταθερός και επιβιώνει σε κάθε έλεγχο.

Κανονικοποίησε τα πάντα σε ονομαστική αξία quote κατά τη λήψη (ingest). Αποθήκευσε και το ακατέργαστο πεδίο, αλλά ποτέ μην αφήσεις μια στρατηγική να το δει.

[8] 1204: το πεδίο που πρέπει να καθορίζει το μοντέλο impact σου

Ο αριθμός συναλλαγών διαιρώντας τον όγκο βάσης δίνει μια μέση καταγραφή 0,032 BTC, περίπου $2.700. Αν η υποψήφια στρατηγική σου θέλει να μπει με $250.000 ταυτόχρονα, ζητάει να είναι περίπου 92 φορές μεγαλύτερη από την τυπική συναλλαγή εκείνου του λεπτού. Αυτός ο αριθμός, όχι κάποια γενική σταθερά slippage 5 μονάδων βάσης, είναι αυτό που πρέπει να καθορίζει τον όρο impact τετραγωνικής ρίζας σου. Υπολογίζουμε το participation rate ανά κερί ως στήλη πρώτης τάξης και απορρίπτουμε στρατηγικές των οποίων η διάμεση είσοδος υπερβαίνει λίγα τοις εκατό της ονομαστικής αξίας του κεριού, γιατί οτιδήποτε βασίζεται σε αυτό είναι μυθοπλασία.

Ο αριθμός συναλλαγών επισημαίνει επίσης φθηνά τα περίεργα λεπτά. Όγκος φυσιολογικός, αριθμός συναλλαγών κατέρρευσε στις 11; Κάποιος έκανε ένα block. Όγκος φυσιολογικός, αριθμός συναλλαγών στις 9.000; Αυτό είναι μια καταρράκτωση ρευστοποιήσεων (liquidation cascade) που καταναλώνεται σε μικροσκοπικά κομμάτια.

[9] και [10]: "21.883", το πεδίο που όλοι πετούν

Όγκος βάσης από αγορές taker. 21,883 από τα 38,417 BTC σε αυτό το κερί ξεκίνησαν από αγοραστές, οπότε το signed volume delta είναι +5,349 BTC και ο διαχωρισμός των aggressors είναι 57/43 υπέρ των αγοραστών. Το χρηματιστήριο σου δίνει το order flow imbalance, δωρεάν, σε ένα πεδίο που οι περισσότεροι δεν διαβάζουν ποτέ επειδή το pandas δεν ονόμασε τη στήλη γι' αυτούς.

Δεν ισχυρίζομαι ότι προβλέπει από μόνο του τις αποδόσεις· οι αφελείς στρατηγικές delta είναι από τους πιο αξιόπιστους τρόπους να δωρίσεις χρήματα στο βιβλίο προμηθειών. Αλλά είναι μια γνήσια διαφορετική μέτρηση από την τιμή, είναι διαθέσιμη στο ίδιο request που ούτως ή άλλως έκανες, και σου επιτρέπει να ξεχωρίσεις ένα ράλι που αγοράστηκε από ένα ράλι που συνέβη επειδή οι πωλητές αποσύρθηκαν. Αυτά τα δύο φαίνονται πανομοιότυπα στο OHLC και συμπεριφέρονται διαφορετικά δέκα λεπτά αργότερα. Ο research agent μας αντιμετωπίζει μια υπόθεση που αγνοεί τον διαχωρισμό taker σε ένα venue που τον δημοσιεύει σαν να αφήνει στοιχεία στο τραπέζι.

[11] "0": ignore — και όλα τα υπόλοιπα που δεν βρίσκονται εδώ

Ο δείκτης 11 είναι ένα deprecated πεδίο, μόνιμα μηδέν. Πιο ενδιαφέρουσα είναι η λίστα των πραγμάτων που δεν περιέχει αυτό το κερί: κανένα bid, κανένα ask, κανένα spread, κανένα βάθος βιβλίου (book depth), κανένα funding rate, κανένα open interest, καμία ρευστοποίηση, καμία mark price, καμία index price. Και το πιο κρίσιμο, κανένας τρόπος να ξέρεις αν η δική σου εντολή θα ήταν maker ή taker, κάτι που είναι η διαφορά ανάμεσα στο να πληρώνεις 0,045% και στο να κερδίζεις 0,01% σε αυτό το venue.

Οπότε κάθε μοντέλο προμηθειών χτισμένο μόνο πάνω σε klines είναι μια υπόθεση ντυμένη με τα ρούχα ενός αριθμού. Το λύνουμε αναγκάζοντας κάθε στρατηγική να δηλώνει εκ των προτέρων το στυλ εκτέλεσής της, και μετά χρεώνοντας taker σε οτιδήποτε δεν μπορεί να αποδείξει το αντίθετο.

Το κερί που ποτέ δεν εμφανίστηκε

Τελευταίο κομμάτι, και αυτό που δαγκώνει πιο σκληρά έξω από τα majors. Ένα λεπτό με μηδέν συναλλαγές δεν παράγει κανένα kline. Οι προμηθευτές και οι βιβλιοθήκες συνήθως το συμπληρώνουν με forward-fill: άνοιγμα = υψηλό = χαμηλό = κλείσιμο = προηγούμενο κλείσιμο, όγκος 0. Ο δείκτης σου υπολογίζει χαρούμενα. Η στρατηγική σου βλέπει μια έγκυρη γραμμή και μπορεί να παράγει σήμα σε ένα λεπτό κατά το οποίο κανείς στον κόσμο δεν διαπραγματεύτηκε αυτό το instrument.

Σε ένα mid-cap perp που είχαμε λάβει, το 4,1% των κεριών 1 λεπτού σε ένα δωδεκάμηνο παράθυρο είχε μηδέν συναλλαγές. Μια υποψήφια στρατηγική mean-reversion σε αυτό το σύμβολο τοποθετούσε το 38% των εισόδων της σε συνθετικά κεριά, γιατί οι επίπεδες συνθετικές τιμές είναι catnip για οτιδήποτε μετράει απόκλιση από έναν κινητό μέσο όρο. Είχε εκπληκτικά αποτελέσματα backtest. Διαπραγματευόταν τα κενά στα δεδομένα.

Γι' αυτό το layer λήψης (ingest) φέρει τώρα ένα boolean synthetic ανά κερί, το οποίο διαδίδεται σε κάθε resample, και το γκάντλετ επαλήθευσης απορρίπτει κάθε στρατηγική της οποίας οι συναλλαγές συγκεντρώνονται εκεί. Φθηνή στήλη. Έχει σκοτώσει περισσότερες υποψήφιες στρατηγικές από οποιονδήποτε δείκτη που έχουμε γράψει ποτέ.

Δώδεκα τιμές. Τέσσερις από αυτές παρερμηνεύονται συστηματικά, δύο απορρίπτονται συστηματικά, και μια ολόκληρη κατηγορία απουσιάζει από τη γραμμή και φαντάζεται τη μηχανή. Πριν το επόμενο backtest σου, πήγαινε τράβηξε ένα ακατέργαστο κερί από το δικό σου store και διάβασε κάθε πεδίο δυνατά, συγκρίνοντάς το με το τι υποθέτει η λογική εκτέλεσής σου γι' αυτό. Είναι μια άσκηση είκοσι λεπτών και δεν έχω δει ποτέ κανέναν να την κάνει και να μη βρει τίποτα.

ohlcvμικροδομή αγοράςμηχανική δεδομένωνbacktestingcrypto futures
ΚοινοποίησηXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Όλα τα άρθρα