13 Σεπτέμβριος 2026 · εκτέλεση

Πόση καθυστέρηση πρέπει να προσθέσετε σε ένα backtest; Μετρήσαμε κάθε millisecond του δικού μας

Πόση καθυστέρηση πρέπει να προσθέσετε σε ένα backtest; Μετρήσαμε κάθε millisecond του δικού μας

Τέσσερις αριθμοί, όλοι μετρημένοι στο δικό μας paper-trading stack, σε μία στρατηγική, με σήματα για perpetual BTCUSDT στο 1-minute, σε διάστημα 31 ημερών και 1,418 εντολών. Διάμεσος χρόνος από το κλείσιμο της μπάρας έως την επιβεβαίωση της εντολής από το exchange: 195 ms. 99ο εκατοστημόριο: 2,970 ms. Διάμεσος στο 1% των λεπτών με την υψηλότερη πραγματοποιηθείσα μεταβλητότητα: 840 ms. Και η σταθερή τιμή καθυστέρησης που υπήρχε στη ρύθμιση του backtest για το μεγαλύτερο μέρος του προηγούμενου έτους: 0.

195 msδιάμεσος από το κλείσιμο της μπάρας έως την επιβεβαίωση εντολής
2,970 msp99, ίδια διαδρομή
840 msδιάμεσος στα λεπτά του κορυφαίου 1% μεταβλητότητας

Τρεις από αυτούς τους αριθμούς είναι βαρετοί. Όλοι ξέρουν ότι το μηδέν είναι λάθος, αργά ή γρήγορα το αντικαθιστούν με κάτι, και αυτό το κάτι είναι σχεδόν πάντα μια σταθερή τιμή που κάποιος διάλεξε εμπειρικά. 100 ms, 250 ms, «ας είμαστε συντηρητικοί, 500». Ο αριθμός που έχει πραγματικά σημασία είναι το 840, γιατί δείχνει ότι η καθυστέρησή σας εξαρτάται από την κατάσταση της αγοράς· και οι καταστάσεις της αγοράς όπου εκτοξεύεται είναι οι ίδιες όπου το σήμα σας νομίζει ότι εντόπισε κάτι.

Πού καταλήγουν τα 195 milliseconds

Ακολουθεί ο πλήρης προϋπολογισμός, μετρημένος σε κάθε στάδιο με χρονικές σημάνσεις από μονοτονικό ρολόι σε κάθε βήμα. Το μηχάνημα είναι ένα AWS instance στο ap-northeast-1, στην ίδια περιοχή με τα endpoints του venue, δηλαδή περίπου το καλύτερο που μπορεί να πετύχει μια μη συστεγασμένη εγκατάσταση λιανικής.

Στάδιο p50 p95 p99
Κλείσιμο μπάρας → λήψη συμβάντος WS kline-closed 128 ms 402 ms 1,940 ms
Ανάλυση + ενημέρωση κατάστασης χαρακτηριστικών 3 ms 9 ms 28 ms
Απόφαση: αξιολόγηση μοντέλου + έλεγχοι κινδύνου 11 ms 22 ms 60 ms
Υποβολή εντολής → επιβεβαίωση από exchange 47 ms 180 ms 1,100 ms
Από άκρο σε άκρο (μετρημένο, όχι αθροισμένο) 195 ms 690 ms 2,970 ms

Δύο πράγματα να προσέξετε πριν πάμε στο ενδιαφέρον σημείο. Πρώτον, οι διάμεσοι δεν αθροίζονται: 128 + 3 + 11 + 47 = 189, ενώ η μετρημένη διάμεσος από άκρο σε άκρο είναι 195. Τα εκατοστημόρια δεν είναι αθροιστικά· αν υπολογίσετε την καθυστέρηση αθροίζοντας τα p99 κάθε σταδίου, θα βρείτε 3,128 ms, ενώ το πραγματικό p99 είναι 2,970. Εδώ η διαφορά είναι μικρή, αλλά γίνεται τεράστια όταν τα στάδια συσχετίζονται προς την αντίθετη κατεύθυνση. Μετρήστε ολόκληρη τη διαδρομή.

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

Το 840

Αν βάλετε καθεμία από τις 1,418 εντολές σε κατηγορία ανάλογα με την πραγματοποιηθείσα μεταβλητότητα του λεπτού που παρήγαγε το σήμα, η κατανομή αλλάζει εντελώς.

Κατηγορία μεταβλητότητας της μπάρας σήματος Εντολές p50 από άκρο σε άκρο p99 από άκρο σε άκρο
Κατώτερο τεταρτημόριο 201 141 ms 488 ms
Μεσαία δύο τεταρτημόρια 796 183 ms 1,210 ms
Ανώτερο τεταρτημόριο 407 312 ms 2,880 ms
Κορυφαίο 1% όλων των λεπτών 14 840 ms 4,100 ms

Κάθε στάδιο επιβραδύνεται ταυτόχρονα, κι έτσι το φαινόμενο συσσωρεύεται. Ουρά συγκέντρωσης και μετάδοσης του venue επιβαρύνεται από το φορτίο της μηχανής αντιστοίχισης εντολών, οπότε ένα λεπτό με 11,000 συναλλαγές περνάει αργότερα από ένα λεπτό με 600. Η δική σας διεργασία χειρίζεται περισσότερες ενημερώσεις βάθους και περισσότερες εκτελέσεις συναλλαγών στο ίδιο διάστημα, επομένως η ενημέρωση χαρακτηριστικών που συνήθως διαρκεί 3 ms παίρνει 28. Η διαδρομή εντολών REST ανταγωνίζεται τον πανικό όλων των άλλων, και αρχίζετε να βλέπετε περιστασιακά σφάλματα 503 και επανάληψη, που σας κοστίζουν από μόνα τους ένα ολόκληρο δευτερόλεπτο. Ο συντελεστής συσχέτισης μεταξύ του πλήθους συναλλαγών στην μπάρα σήματος και της καθυστέρησης από άκρο σε άκρο στο δείγμα μας ήταν 0.41. Όχι τεράστιος. Αρκετός για να ακυρώσει μια σταθερή τιμή.

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

Κάποτε περάσαμε μια μέρα κυνηγώντας μια ακραία τιμή 3.6 δευτερολέπτων που εμφανιζόταν περίπου την ίδια ώρα κάθε βράδυ. Έφταιγε το logrotate: έκοβε με αντιγραφή ένα αρχείο 2 GB στον ίδιο τόμο EBS όπου έγραφε η διεργασία, μπλοκάροντας τον βρόχο συμβάντων. Η αγορά δεν έφταιγε. Μετρήστε πρώτα και μετά κατηγορήστε τη μικροδομή.

Τι σημαίνει αυτό για την εκτέλεση

Η τιμή μετακινείται όσο περιμένετε. Σε ένα τυχαίο λεπτό, η μέση δυσμενής κίνηση κατά τη διάμεση καθυστέρηση των 195 ms ήταν περίπου 1.1 bps αντίθετα από την κατεύθυνση του σήματος. Στα λεπτά του ανώτερου τεταρτημορίου, με 312 ms, ήταν 5.8 bps. Στα λεπτά του κορυφαίου 1%, με 840 ms, περίπου 14 bps δυσμενούς μετατόπισης προτού καν φτάσει η εντολή στο βιβλίο εντολών.

Στα BTC perps, το spread έχει ελάχιστη συμμετοχή σε αυτό: ένα tick σε τιμή 84,000 ισοδυναμεί με 0.012 bps, οπότε η ζημιά προέρχεται από τη δυσμενή μετατόπιση και όχι από το κόστος διέλευσης του spread. Αν μεταφέρετε την ίδια στρατηγική σε perp μεσαίας κεφαλαιοποίησης, εμφανίζεται και ο δεύτερος παράγοντας: το spread στην κορυφή του βιβλίου στο δείγμα μας αυξήθηκε από 1.4 bps στα ήρεμα λεπτά σε 6.2 bps στο ανώτερο τεταρτημόριο, ενώ το βάθος σε αυτή την τιμή μειώθηκε περισσότερο από το μισό. Πληρώνετε τη μετατόπιση, το ευρύτερο spread και το μικρότερο βάθος, όλα μαζί, επειδή έχουν κοινή αιτία.

Όταν αναπαράγαμε τις ίδιες 31 ημέρες με καθυστέρηση υπό συνθήκη για κάθε μπάρα αντί για σταθερά 200 ms, η μέση τιμή εισόδου του backtest έγινε κατά 3.1 bps χειρότερη, σχεδόν αποκλειστικά στο 9% των συναλλαγών. Η απόκλιση της τιμής εισόδου μεταξύ backtest και paper trading μειώθηκε από 4.2 bps σε 0.9 bps. Το Sharpe εντός δείγματος για αυτή τη στρατηγική έπεσε από 1.7 σε 1.1, που είναι ο ειλικρινής αριθμός και ήταν πάντα.

Τι βάζετε, λοιπόν, στη ρύθμιση

Όχι μία σταθερή τιμή. Αυτό κάνουμε τώρα:

  1. Κάντε δειγματοληψία, μην ορίζετε σταθερή τιμή. Για κάθε προσομοιωμένη εντολή, αντλήστε την καθυστέρηση από μια εμπειρική κατανομή που λαμβάνει υπόψη τη δραστηριότητα της συγκεκριμένης μπάρας· αρκούν το πλήθος συναλλαγών και η απόλυτη απόδοση, και τα δύο υπάρχουν ήδη σε ένα τυπικό kline. Προσαρμόστε την κατανομή μία φορά ανά venue και ανά τύπο εντολής και επαναπροσαρμόζετέ την κάθε μήνα.
  2. Διατηρήστε την ουρά. Μην προσαρμόζετε λογαριθμοκανονική κατανομή και θεωρείτε ότι τελειώσατε· το p99 κρύβεται σε καταιγίδες επαναλήψεων και παύσεις GC, που καμία ομαλή κατανομή δεν αναπαράγει. Χρησιμοποιούμε τα εμπειρικά εκατοστημόρια, με επαναδειγματοληπτημένη ουρά πάνω από το p95.
  3. Η καθυστέρηση ισχύει και για τις ακυρώσεις. Η αντικατάσταση stop ή η ακύρωση αντιστάθμισης υπόκειται στην ίδια καθυστέρηση, και στις γρήγορες αγορές η ακύρωσή σας ανταγωνίζεται την εκτέλεση. Αν ο προσομοιωτής σας ακυρώνει αμέσως, το μοντέλο κινδύνου σας είναι φανταστικό.
  4. Προσθέστε έλεγχο παλαιότητας και προσομοιώστε τον. Εμείς απορρίπτουμε κάθε σήμα του οποίου η μπάρα είναι παλαιότερη από 1.5 δευτερόλεπτα όταν φτάσει. Αυτή είναι πραγματική συμπεριφορά με πραγματικό κόστος: αφαιρεί σιωπηρά συναλλαγές, και πρέπει να αφαιρεί τις ίδιες και στο backtest.
  5. Επαναβαθμονομήστε με βάση το paper trading. Το paper trading είναι εκεί όπου βρίσκετε την πραγματική εικόνα. Καταγράφετε τις χρονικές σημάνσεις των τεσσάρων βημάτων για κάθε εντολή και συγκρίνετε τις κατανομές με όσα υπέθεσε ο προσομοιωτής, κάθε εβδομάδα.

Ίδια παθογένεια και σε άλλες κατηγορίες περιουσιακών στοιχείων. Μετοχές ΗΠΑ: το ενοποιημένο χρηματιστηριακό feed προσθέτει τη δική του καθυστέρηση συγκέντρωσης πάνω από αυτή του broker σας και επιβραδύνεται όταν πιέζεται ο ρυθμός μηνυμάτων για τον ίδιο δομικό λόγο. Αγορές προβλέψεων: στα περισσότερα venues η υποβολή εντολών γίνεται μόνο μέσω REST, και έχουμε μετρήσει διάμεσους κάτω από 100 ms που φτάνουν τα πολλαπλά δευτερόλεπτα όταν συμβαίνει ένα γεγονός επίλυσης και καταφθάνουν όλοι ταυτόχρονα. Crypto options: η τιμή που χρησιμοποιείτε μπορεί να είναι ήδη 2 δευτερόλεπτα παλιά ακριβώς στο λεπτό που κινήθηκε το υποκείμενο.

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

Βάλτε μετρήσεις στα τέσσερα βήματα. Είναι δουλειά ενός απογεύματος και θα σας πει περισσότερα για τη στρατηγική σας από άλλη μία εβδομάδα αναζήτησης παραμέτρων.

καθυστέρησηbacktestingpaper tradingεκτέλεσηcrypto futures
ΚοινοποίησηXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Όλα τα άρθρα