22 Οκτώβριος 2026 · δεδομένα

Ξαναχτίσαμε ένα backtest αφού ένας πάροχος δεδομένων άλλαξε το ιστορικό του

Ξαναχτίσαμε ένα backtest αφού ένας πάροχος δεδομένων άλλαξε το ιστορικό του

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

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

Δευτέρα: η επανεκτέλεση έδωσε διαφορετικό αποτέλεσμα

Η πρώτη ένδειξη ήταν ένα μικρό κενό σε ένα ρευστό spot ζεύγος. Η αρχική μας μπάρα έδειχνε υψηλό 62,418. Η επανεκτέλεση έδειχνε 62,431. Η διαφορά έμοιαζε αμελητέα, μέχρι που εντοπίσαμε το σημείο εισόδου της στρατηγικής: το όριό της βρισκόταν ανάμεσα σε αυτές τις τιμές. Μερικές αλλαγμένες μπάρες σήμαιναν διαφορετικά σήματα και, συνεπώς, διαφορετικές θέσεις αρκετές ημέρες αργότερα.

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

Αυτή είναι συνηθισμένη συμπεριφορά των δεδομένων. Τα χρηματιστήρια διορθώνουν εγγραφές· οι πάροχοι συμπληρώνουν κενά, διορθώνουν εσφαλμένες συναλλαγές και προσαρμόζουν τη λογική συγκέντρωσης. Ένα ερώτημα για «δεδομένα Ιανουαρίου» μπορεί να επιστρέψει διαφορετική απάντηση τον Μάρτιο.

Τρίτη: βρήκαμε την απόδειξη που έλειπε

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

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

Τι καταγράψαμεΣε τι μας επέτρεπε να απαντήσουμεΤι έλειπε
Πάροχος, σύμβολο, εύρος ημερομηνιώνΠοιο αίτημα υπέβαλε η εκτέλεσηΤο περιεχόμενο της απόκρισης
Έκδοση ροής επεξεργασίαςΠοιος κώδικας δημιούργησε τις μπάρεςΟι ακριβείς εγγραφές εισόδου
Χρονική σήμανση εκτέλεσηςΠότε εκτελέσαμε την εργασίαΠοια αναθεώρηση του παρόχου ήταν τότε διαθέσιμη

Είχαμε θεωρήσει ότι «ίδιο ερώτημα» σημαίνει «ίδια δεδομένα». Αυτή η παραδοχή έκανε το πείραμα να φαίνεται πιο αναπαραγώγιμο απ’ όσο ήταν στην πραγματικότητα.

Τετάρτη: η διόρθωση άλλαξε την εικόνα

Επαναλάβαμε την επεξεργασία των επηρεασμένων ημερομηνιών χρησιμοποιώντας και τις 2 διαθέσιμες εκδοχές των δεδομένων. Οι αναθεωρημένες μπάρες αφαίρεσαν 2 εισόδους και μετέφεραν 1 έξοδο κατά 1 μπάρα. Αυτές οι 3 συναλλαγές εξηγούσαν το μεγαλύτερο μέρος της μεταβολής του Sharpe. Η στρατηγική ήταν ευαίσθητη σε μερικές παρατηρήσεις κοντά στο όριο ενεργοποίησής της, παρόλο που η συνολική σειρά τιμών έμοιαζε σχεδόν ίδια στο διάγραμμα.

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

Πέμπτη: αλλάξαμε το ερευνητικό αρχείο

Προσθέσαμε αμετάβλητα στιγμιότυπα δεδομένων εισόδου στις νέες ερευνητικές εκτελέσεις. Κάθε διαμέρισμα αποκτά hash περιεχομένου, ενώ το manifest της εκτέλεσης καταγράφει την πηγή, τον χρόνο ανάκτησης, την έκδοση σχήματος, την πολιτική προσαρμογών και την έκδοση του κώδικα μετασχηματισμού. Για μεγάλα σύνολα δεδομένων, διατηρούμε τα ίδια τα αρχεία σε αποθήκευση με διευθύνσεις βάσει περιεχομένου, ώστε να μπορούν να κοινοποιούνται πανομοιότυπα διαμερίσματα χωρίς να αντικαθίστανται παλαιότερες εκδόσεις.

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

Ένα αναπαραγώγιμο backtest χρειάζεται ταυτότητα εισόδου, όχι μόνο ένα URL δεδομένων. Καταγράψτε τι παραλήφθηκε, πότε παραλήφθηκε και πώς μετατράπηκε στις εγγραφές που χρησιμοποίησε η στρατηγική σας.

Παρασκευή: τι θα παραλείπαμε την επόμενη φορά

Θα παραλείπαμε τη σύγκριση μόνο των συνοπτικών μετρικών. Μια μεταβολή του Sharpe σάς λέει ότι κάτι άλλαξε· δεν εντοπίζει την αιτία. Ξεκινήστε με τους αριθμούς εγγραφών και τα hash των διαμερισμάτων και έπειτα βρείτε την πρώτη ημερομηνία εισόδου που διαφέρει. Από εκεί, συγκρίνετε με αυτή τη σειρά τις μετασχηματισμένες εγγραφές, τα σήματα, τις εντολές και τις εκτελέσεις.

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

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

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