1 Σεπτέμβριος 2026 · εταιρικές πράξεις

Δεδομένα προσαρμοσμένα για split, αποσυναρμολογημένα: τι κάνει το split 10-for-1 της NVDA σε κάθε γραμμή

Δεδομένα προσαρμοσμένα για split, αποσυναρμολογημένα: τι κάνει το split 10-for-1 της NVDA σε κάθε γραμμή

Να μία γραμμή από αρχείο ημερήσιων στοιχείων μετοχών. NVDA, Παρασκευή 7 Ιουνίου 2024, η τελευταία συνεδρίαση πριν τεθεί σε ισχύ το split 10-for-1.

Στήλη Τιμή
ημερομηνία 2024-06-07
κλείσιμο 1208.88
όγκος 42,800,000 (στρογγυλοποιημένος)
συντελεστής_split 1.0
μέρισμα 0.00
προσαρμοσμένο_κλείσιμο 120.8781

Άφησα επίτηδες εκτός αυτής της προβολής τις στήλες OHLC. Επανέρχονται προς το τέλος, και αυτές είναι που προκαλούν αθόρυβα προβλήματα.

Ό,τι έχει ενδιαφέρον σε αυτή τη γραμμή βρίσκεται στο κενό ανάμεσα στη δεύτερη και την έκτη στήλη. Στις 7 Ιουνίου, οι συναλλαγές έγραψαν 1208.88. Κανείς δεν θα ξανασυναλλαχθεί ποτέ σε αυτή την τιμή, με την έννοια ότι η μετοχή στην οποία αναφερόταν δεν υπάρχει πια ως μονάδα. Το 120.8781 είναι ανακατασκευή, και δεν προκύπτει απλώς διαιρώντας το 1208.88 με το δέκα. Ας δούμε τις στήλες μία μία.

10:1διαιρέτης που εφαρμόζεται σε κάθε προηγούμενη γραμμή
0.99991789συντελεστής μερίσματος, καταχωρισμένος μία μέρα αργότερα
$90πλασματική προμήθεια ανά πλήρη συναλλαγή
5.6ppετήσια επιβάρυνση που δημιουργεί ένας διαιρέτης

ημερομηνία: 2024-06-07, και οι δύο άλλες ημερομηνίες που έχουν μεγαλύτερη σημασία

Το split ανακοινώθηκε στις 22 Μαΐου 2024 μαζί με τα αποτελέσματα. Η ημερομηνία καταγραφής ήταν στις 6 Ιουνίου. Οι συναλλαγές άρχισαν σε προσαρμοσμένη βάση split τη Δευτέρα 10 Ιουνίου. Τρεις ημερομηνίες, και η στήλη split_factor του παρόχου σας αντιστοιχεί ακριβώς σε μία από αυτές, συνήθως στην πρώτη συνεδρίαση μετά την προσαρμογή για split. Το σφάλμα κατά μία μέρα είναι το συνηθέστερο bug εταιρικών πράξεων που βλέπω, και δεν φαίνεται στα συνολικά αποτελέσματα: η καμπύλη κεφαλαίου σας εμφανίζει ένα κενό προς τα κάτω 90% ή ένα κενό προς τα πάνω 900% σε μία μόνο μέρα, κάτι που σχεδόν δεν επηρεάζει το Sharpe υπολογισμένο σε 2,000 μέρες, αλλά επηρεάζει οπωσδήποτε τη μέγιστη υποχώρηση ή έναν κανόνα stop-loss.

Το μέρισμα έχει το δικό του πρόβλημα ημερομηνίας, και αυτό άλλαξε για όλους το 2024. Το τριμηνιαίο μέρισμα της NVDA μετά το split, $0.01, είχε ημερομηνία καταγραφής στις 11 Ιουνίου. Ο διακανονισμός στις ΗΠΑ μεταφέρθηκε σε T+1 στις 28 Μαΐου 2024, πράγμα που σημαίνει ότι η ημερομηνία αποκοπής και η ημερομηνία καταγραφής είναι πλέον η ίδια μέρα. Κάθε loader που υπολογίζει την ημερομηνία αποκοπής ως «μία εργάσιμη μέρα πριν από την ημερομηνία καταγραφής» —σωστό επί δεκαετίες— άρχισε τον Ιούνιο του 2024 να εφαρμόζει αθόρυβα τις προσαρμογές μερίσματος μία συνεδρίαση νωρίτερα. Δεν εμφανίζεται κανένα σφάλμα. Απλώς ο συντελεστής καταλήγει σε λάθος γραμμή.

Η αστοχία στον κώδικα εταιρικών πράξεων δεν εκδηλώνεται ποτέ ως εξαίρεση. Είναι ένας αριθμός που απέχει μία μέρα και μοιάζει απολύτως εύλογος.

κλείσιμο: 1208.88 — η τιμή που δεν υπάρχει στο αρχείο

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

Η σταδιακή άνοδος της NVDA προς τα $1,000 την άνοιξη του 2024 ήταν πραγματική, με πραγματικές εντολές να τη στηρίζουν: τα στρογγυλά νούμερα λειτουργούσαν σαν μαγνήτες, τα strikes των options ήταν συγκεντρωμένα στα 950 και 1000, και κάθε προσέγγιση συνοδευόταν από κίνδυνο ειδήσεων. Στα προσαρμοσμένα δεδομένα, όλο αυτό το επεισόδιο διαδραματίζεται στα $100. Αν δοκιμάζετε συμπεριφορά γύρω από ψυχολογικά επίπεδα τιμών, λογική κάλυψης κενού κοντά σε στρογγυλά νούμερα ή ένα χαρακτηριστικό εγγύτητας σε strike, το δοκιμάζετε σε μια σειρά τιμών που ανακλιμακώθηκε λόγω ενός γεγονότος που δεν είχε συμβεί ακόμη.

Το ίδιο ισχύει για τα φίλτρα του επενδυτικού σύμπαντος. Το «αποκλεισμός μετοχών κάτω από $5» είναι ένας θεμιτός δείκτης για πραγματικά προβλήματα μικροδομής: μεγάλα σχετικά spreads, κανόνες αποδοχής ως εγγύηση και καθεστώτα ελάχιστης μεταβολής τιμής. Αν το εφαρμόσετε σε προσαρμοσμένο ιστορικό, αποκλείετε εταιρείες για περιόδους κατά τις οποίες διαπραγματεύονταν στα $30 και αργότερα έκαναν reverse split. Με το φίλτρο «τιμή πάνω από $500», θα αφαιρέσετε αθόρυβα την NVDA από κάθε έτος πριν από τον Ιούνιο του 2024. Τα φίλτρα τιμών πρέπει να εφαρμόζονται στις μη προσαρμοσμένες τιμές συναλλαγών. Τελεία.

συντελεστής_split: 1.0 — και το 0.1 στην επόμενη γραμμή

Ο συντελεστής είναι ένα σωρευτικό γινόμενο που υπολογίζεται προς τα πίσω από το σήμερα. Κάθε γραμμή πριν από τις 10 Ιουνίου 2024 έχει συντελεστή 0.1 από αυτό το split, πολλαπλασιασμένο με το 0.25 από το split 4-for-1 του 2021, πολλαπλασιασμένο με ό,τι είχε προηγηθεί. Το ιστορικό της NVDA πριν από το 2021 κλιμακώνεται κατά 0.025, οπότε μια μπάρα με τιμή συναλλαγής $200 το 2019 εμφανίζεται ως $5.00.

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

Δεύτερον, με κλίμακα 0.025, μια μετοχή που διαπραγματευόταν με βήματα των $0.01 τώρα κινείται σε προσαυξήσεις των $0.00025. Η λογική στρογγυλοποίησης στην ελάχιστη μεταβολή τιμής, οι συγκρίσεις «είναι αυτό νέο υψηλό», οι έλεγχοι ισότητας κινητής υποδιαστολής: όλα λειτουργούν πλέον κάτω από την ανάλυση που είχε πραγματικά η αγορά.

μέρισμα: 0.01 — ο αριθμός που αποσυντονίζει το πλέγμα τιμών σε όλο το προηγούμενο ιστορικό

Ένα σεντ. Μοιάζει με θόρυβο, και αυτός είναι ο λόγος που το adj_closeδείχνει 120.8781 αντί για ένα καθαρό 120.888.

Το κλείσιμο στις 10 Ιουνίου ήταν 121.79. Ο συντελεστής αποκοπής μερίσματος είναι (121.79 − 0.01) / 121.79 = 0.99991789. Αυτός ο συντελεστής πολλαπλασιάζει κάθε τιμή πριν από τις 11 Ιουνίου, οπότε το προσαρμοσμένο για split 120.888 γίνεται 120.878074. Μικρή διαφορά, αλλά μόνιμη, και εφαρμόζεται ξανά σε καθεμία από τις περίπου εξήντα ημερομηνίες αποκοπής στο ιστορικό της NVDA. Αυτό που μετρά είναι ο ανατοκισμός: όταν κοιτάτε το 2015, βλέπετε μια τιμή που έχει πολλαπλασιαστεί με δεκάδες παράλογους σχεδόν συντελεστές. Καμία προσαρμοσμένη ιστορική τιμή δεν βρίσκεται ακριβώς στο πλέγμα του ενός σεντ.

Άρα κάθε σύγκριση ==με στρογγυλό επίπεδο είναι λανθασμένη, κάθε έλεγχος «αγγίξαμε την τιμή ορίου» χρειάζεται ανοχή, και το ανακατασκευασμένο OHLC δεν ικανοποιεί πλέον την αναλλοίωτη συνθήκη ότι low ≤ open ≤ high μετά από αφελή στρογγυλοποίηση σε 4 δεκαδικά ψηφία. Αυτό σημαίνει επίσης ότι το adj_closeείναι σειρά συνολικής απόδοσης, ενώ το closeείναι σειρά απόδοσης τιμής· αν υπολογίζετε αποδόσεις από τη μία και υποχωρήσεις από την άλλη, αναμειγνύετε δύο διαφορετικούς ορισμούς για το τι συνέβη.

όγκος: 42,800,000 — ο διαιρέτης που δεν εφαρμόζεται με συνέπεια

Για να είναι συγκρίσιμος με τις συνεδριάσεις μετά το split, ο όγκος μετοχών πρέπει να πολλαπλασιάζεται επί 10. Κάποιοι πάροχοι το κάνουν. Άλλοι όχι. Μερικοί προσαρμόζουν το OHLC και αφήνουν τον όγκο ακατέργαστο, που είναι το χειρότερο από τα τρία, επειδή το αρχείο φαίνεται συνεπές εσωτερικά μέχρι να πολλαπλασιάσετε την τιμή με τον όγκο.

Η σωστή κίνηση είναι να σταματήσετε να χρησιμοποιείτε τον όγκο μετοχών ως χαρακτηριστικό και να χρησιμοποιείτε τον όγκο σε δολάρια, ο οποίος εξ ορισμού παραμένει αμετάβλητος στα split. Ένα φίλτρο ρευστότητας με μέσο όρο όγκου σε δολάρια 20 ημερών δεν χρειάζεται καθόλου λογική προσαρμογής και δεν μπορεί να χαλάσει από εταιρική πράξη. Η αμεταβλητότητα των χαρακτηριστικών υπερέχει του σωστού κώδικα προσαρμογής, επειδή ο κώδικας προσαρμογής απαιτεί συνεχή ακρίβεια.

Τρεις μορφές αρχείων παρόχων, τρεις τρόποι αστοχίας.

Τι παρέχεται Τι χαλάει
Μόνο προσαρμοσμένο κλείσιμο, ακατέργαστο OHLC Η λογική κενού και ενδοσυνεδριακών κινήσεων υπολογίζει σε δύο διαφορετικές κλίμακες τιμών
Προσαρμοσμένο OHLC, ακατέργαστος όγκος Ο όγκος σε δολάρια αποκλίνει κατά τον λόγο του split· τα φίλτρα ADV αστοχούν
Ακατέργαστο OHLCV μαζί με στήλες συντελεστών Τίποτα, αν τους εφαρμόσετε. Τα πάντα, αν τους εφαρμόσετε σε λάθος γραμμή

Οι στήλες που λείπουν: adj_open, adj_high, adj_low

Ας επαναφέρουμε τώρα το OHLC. Αν μια ροή δεδομένων προσαρμόζει μόνο το κλείσιμο και η στρατηγική σας υπολογίζει το κενό από το κλείσιμο της προηγούμενης συνεδρίασης ως open / prev_adj_close − 1, τότε στις 10 Ιουνίου 2024 υπολογίζει 120.37 / 120.8781 − 1, ένας σωστός αριθμός, περίπου −0.4%. Αν εκτελέσετε τον ίδιο κώδικα για τις 7 Ιουνίου 2024, υπολογίζει το άνοιγμα από το ακατέργαστο αρχείο —περίπου 1207— σε σχέση με κλείσιμο προσαρμοσμένο κατά 0.025 από παλαιότερα split, και προκύπτει κενό αρκετών χιλιάδων τοις εκατό.

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

Τι δεν σας λέει καμία στήλη: πόσες μετοχές θα είχατε αγοράσει πραγματικά

Αυτό είναι που κοστίζει χρήματα στο μοντέλο κόστους του backtest, και αυτός είναι ο λόγος που γράφω για ένα split μετοχής.

Οι προμήθειες για μετοχές στις ΗΠΑ χρεώνονται συχνά ανά μετοχή. Ας πούμε $0.005 με ελάχιστη χρέωση εντολής $1.00, μια συνηθισμένη σταθερή βαθμίδα χρέωσης για ιδιώτες μέσω broker. Τώρα εκτελέστε backtest για θέση $400,000 στην NVDA έναν χρόνο πριν από το split, όταν η ακατέργαστη τιμή ήταν κοντά στα $400 και η προσαρμοσμένη εμφανίζεται ως $40.

Μετοχές Προμήθεια
Τι συνέβη πραγματικά (ακατέργαστη τιμή $400) 1,000 $5.00
Τι βλέπει το backtest (προσαρμοσμένη τιμή $40) 10,000 $50.00

Ίδια έκθεση, ίδια συναλλαγή, 10 φορές υψηλότερο υπολογισμένο κόστος. Αυτό σημαίνει $45 ανύπαρκτου κόστους ανά σκέλος, $90 ανά πλήρη συναλλαγή, και μια στρατηγική με καθημερινό turnover συσσωρεύει περίπου $22,000 τον χρόνο σε κόστη που δεν υπήρξαν ποτέ. Σε χαρτοφυλάκιο $400k, 5.6 ποσοστιαίες μονάδες ετήσιας απόδοσης, κατασκευασμένες εξ ολοκλήρου από έναν διαιρέτη. Εδώ σας κάνει να φαίνεστε χειρότεροι απ' ό,τι ήσασταν στην πραγματικότητα, κάτι που είναι διαχειρίσιμο.

Τα reverse split λειτουργούν αντίστροφα, και αυτή είναι η επικίνδυνη κατεύθυνση. Ένα reverse split 1-for-10 σημαίνει ότι το προσαρμοσμένο ιστορικό δείχνει τιμές 10 φορές υψηλότερες και αριθμό μετοχών 10 φορές μικρότερο από αυτόν με τον οποίο θα είχατε συναλλαχθεί. Το μοντέλο κόστους σας διαιρεί αθόρυβα διά του δέκα την προμήθεια ανά μετοχή. Τα reverse split είναι συνηθισμένα στο σύμπαν των μετοχών μικρής κεφαλαιοποίησης, κάτω από $5 και με μεγάλα spreads, όπου οι χρεώσεις ανά μετοχή αποτελούν το μεγαλύτερο μεμονωμένο στοιχείο κόστους. Το backtest κολακεύει ακριβώς τις μετοχές που θα έπρεπε να τιμωρεί.

Η λύση είναι απλή και δομική: ορίστε τις θέσεις σε δολάρια, μετατρέψτε τις σε μετοχές χρησιμοποιώντας την μη προσαρμοσμένη τιμή εκείνης της ημερομηνίας και χρεώστε τις προμήθειες ανά μετοχή με βάση αυτόν τον αριθμό. Κρατήστε τη στήλη ακατέργαστης τιμής στον loader για πάντα, όχι ως τεκμήριο ελέγχου αλλά ως ενεργή είσοδο στη μηχανή εκτέλεσης.

  1. Σήματα και αποδόσεις: προσαρμοσμένη σειρά.
  2. Αριθμός μετοχών, προμήθειες ανά μετοχή, στρογγυλοποίηση στο tick, φίλτρα επιπέδου τιμών: μη προσαρμοσμένη σειρά.
  3. Ρευστότητα και χωρητικότητα: όγκος σε δολάρια, που δεν χρειάζεται ούτε το ένα ούτε το άλλο.

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

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