26 Σεπτέμβριος 2026 · έρευνα

Προσπαθήσαμε να αναπαραγάγουμε το backtest μιας στρατηγικής. Να πού αποκλίνανε οι αριθμοί.

Προσπαθήσαμε να αναπαραγάγουμε το backtest μιας στρατηγικής. Να πού αποκλίνανε οι αριθμοί.

Εκτελέσαμε ξανά ένα αποθηκευμένο backtest και πήραμε διαφορετική καμπύλη κεφαλαίου. Ίδιος κώδικας στρατηγικής, ίδια περίοδος, ίδιο σύμβολο. Το τελικό υπόλοιπο διέφερε κατά 1.8%, και τρεις συναλλαγές είχαν μετακινηθεί κατά ένα bar.

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

Ημέρα 1: Καταγράψαμε τι εννοούσαμε με το «ίδια εκτέλεση»

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

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

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

Ημέρα 2: Συγκρίναμε τις συναλλαγές, όχι το Sharpe

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

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

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

Ημέρα 3: Ένα «ίδιο» αρχείο δεδομένων αποδείχτηκε διαφορετικό

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

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

Ένα αναπαραγώγιμο backtest πρέπει να απαντά στο ερώτημα «ποια εκδοχή του παρελθόντος είδε;»

Ημέρα 4: Βρήκαμε μία αφανή προεπιλογή

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

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

3πηγές απόκλισης που εντοπίστηκαν
1.8%αρχική διαφορά στο τελικό υπόλοιπο
0αξία της αντιστοιχίας μόνο στο Sharpe

Τι θα παραλείπαμε την επόμενη φορά

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

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

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

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