Στο παρόν άρθρο θα παρουσιάσουμε τη λογική ενός προγράμματος για trading και θα προτείνουμε λύσεις που πολλοί traders δεν έχουν σκεφτεί ότι μπορούν να εφαρμοστούν, πολύ απλά γιατί η υλοποίησή τους με το ανθρώπινο χέρι είναι τις περισσότερες φορές ακατόρθωτη ή στην καλύτερη περίπτωση απαιτεί πολύ χρόνο, ενέργεια και ακρίβεια.
Αρχιτεκτονική ενός προγράμματος αυτοματοποίησης
Κάθε λογισμικό που τρέχει σε μια ηλεκτρονική πλατφόρμα συναλλαγών ή κάθε αυτόνομη (standalone) εφαρμογή που επικοινωνεί και συνδέεται μέσω διεπαφής προγραμματισμού εφαρμογών (Application Programming Interface – API) με κάποιο χρηματιστήριο ή κάποια χρηματιστηριακή εταιρεία, πρέπει να υλοποιεί τέσσερις βασικές λειτουργίες:
• Ορισμός παραμέτρων εισόδου
• Αρχικοποίηση
• Εκτέλεση στρατηγικής
• Τερματισμός
Ο ορισμός παραμέτρων εισόδου μας επιτρέπει να ορίσουμε το πλήθος των παραμέτρων της στρατηγικής μας, να τις ονομάσουμε και να τους δώσουμε αρχική τιμή. Οι παράμετροι αυτές θα χρησιμοποιηθούν σε όλη τη διάρκεια της ζωής του συστήματός μας.
Η αρχικοποίηση είναι το πρώτο κομμάτι κώδικα που θα εκτελεστεί όταν το λογισμικό μας τεθεί σε λειτουργία. Είναι το κατάλληλο σημείο για να γίνουν κάποιοι αρχικοί έλεγχοι και να γίνουν κάποιοι υπολογισμοί που θα χρησιμοποιηθούν στην στρατηγική μας. Αυτό το κομμάτι κώδικα εκτελείται μόνον μία φορά, την στιγμή που το σύστημα μας θα τεθεί σε λειτουργία.
Η εκτέλεση στρατηγικής είναι το βασικότερο τμήμα ενός λογισμικού αυτοματοποίησης. Εκτελείται κάθε φορά που η αγορά θα έχει μια κανούργια τιμή. Κάνει υπολογισμούς, ελέγχει τους κανόνες και τις συνθήκες με τις οποίες έχουμε προγραμματίσει την στρατηγική μας και θα ανοίξει θέσεις όταν οι συνθήκες αυτές ικανοποιηθούν. Επίσης στο σημείο αυτό, το λογισμικό μπορεί να διενεργεί ελέγχους κλεισίματος θέσεων, να εφαρμόζει διάφορα φίλτρα και οτιδήποτε άλλο θέλουμε να εφαρμόσουμε.
Ο τερματισμός του συστήματός μας καλείται μόνον μία φορά, όταν αφαιρούμε ή απενεργοποιούμε το λογισμικό αυτοματοποίησης από μια αγορά. Χρησιμοποιείται συνήθως για την αφαίρεση γραφικών από τα διαγράμματα και την απελευθέρωση των πόρων του συστήματος.
Για την καλύτερη και βαθύτερη κατανόηση της αρχιτεκτονικής των αυτοματοποιημένων συστημάτων συναλλαγών ακολουθεί ένα απλό και σύνηθες παράδειγμα, κατανοητό στην μεγαλύτερη πλειονότητα των traders.
Έστω ότι θέλουμε να αυτοματοποιήσουμε μια στρατηγική που θα χρησιμοποιεί δύο κινητούς μέσους όρους, έναν γρήγορο και έναν αργό. Θέλουμε οι κινητοί μας μέσοι όροι να παραμετροποιούνται πλήρως και να ανοίγουμε αγοραστική θέση όταν ο γρήγορος κινητός μέσος όρος διασπά ανοδικά τον αργό, και θέση πώλησης όταν ο γρήγορος κινητός μέσος όρος διασπά καθοδικά τον αργό. Επίσης θέλουμε να εμφανίζουμε ανοδικό βελάκι πάνω στο διάγραμμα όταν ανοίγει θέση αγοράς και καθοδικό βελάκι στην θέση πώλησης.
Το σύστημά μας θα υλοποιηθεί με βάση την αρχιτεκτονική που αναλύσαμε παραπάνω, ως εξής:
Ορισμός παραμέτρων εισόδου – Θα ορίσουμε ως παραμέτρους τις περιόδους των κινητών μέσων όρων, τον τύπο του καθενός (Απλός, Εκθετικός κλπ) και την τιμή εφαρμογής τους (Κλείσμο κεριού, Άνοιγμα κεριού κλπ). Αυτές οι παράμετροι θα αλλάζουν από τον χρήστη κάθε φορά που θα τρέχει την στρατηγική του, παίρνοντας τις τιμές που εκείνος βάζει.
Αρχικοποίηση – Σε αυτό το κομμάτι λογισμικού, θα πραγματοποιήσουμε τον έλεγχο των παραμέτρων που έβαλε ο χρήστης. Αν για παράδειγμα, η περίοδος του γρήγορου κινητού είναι μεγαλύτερη από αυτήν του αργού, θα εμφανίσουμε στον χρήστη το κατάλληλο μήνυμα λάθους και δεν θα επιτρέψουμε στη στρατηγική να εκτελεστεί.
Εκτέλεση στρατηγικής – Σε αυτό το σημείο που τρέχει σε κάθε νέα τιμή της αγοράς, θα υπολογίζουμε τις τιμές των κινητών μέσων όρων με βάση την παραμετροποίηση του χρήστη και θα ελέγχουμε αν η συνθήκη τομής τους (ανοδική ή καθοδική) ικανοποιείται. Σε περίπτωση ικανοποίησης της συνθήκης, το σύστημα θα ανοίξει θέση (αγορά ή πώληση) και θα σχεδιάσει το αντίστοιχο βελάκι (ανοδικό ή καθοδικό) στο κερί που επιβεβαιώθηκε η διάσπαση των κινητών μέσων όρων.
Τερματισμός – Αν αποφασίσουμε να αφαιρέσουμε το αυτοματοποιημένο μας σύστημα από το διάγραμμα που το εφαρμόσαμε, θα κληθεί ο τερματισμός ο οποίος θα αφαιρέσει από το διάγραμμα όλα τα ανοδικά και καθοδικά βελάκια που είχαν σχεδιαστεί στις θέσεις που είχαν ανοίξει. Έτσι το διάγραμμα θα μείνει καθαρό, όπως ήταν πριν τρέξουμε το αυτοματοποιημένο μας σύστημα.
Σε μορφή ψευδοκώδικα αυτή η αρχιτεκτονική υλοποιείται όπως δείχνουμε παρακάτω.
Ορισμός παραμέτρων εισόδου
• Τιμή περιόδων γρήγορου κινητού μέσου όρου
• Τύπος γρήγορου κινητού μέσου όρου
• Τιμή εφαρμογής γρήγορου κινητού μέσου όρου
• Τιμή περιόδων αργού κινητού μέσου όρου
• Τύπος γρήγορου αργού μέσου όρου
• Τιμή εφαρμογής αργού κινητού μέσου όρου
Αρχικοποίηση
Αν τιμή γρήγορου κινητού μέσου όρου > τιμή αργού κινητού μέσου όρου τότε εμφάνισε μηνύμα «Η τιμή του γρήγορου κινητού μέσου όρου δεν μπορεί να είναι μεγαλύτερη ή ίση από την τιμή του αργού κινητού μέσου όρου» και τερμάτισε το σύστημα.
Εκτέλεση
• Υπολογισμός τιμών γρήγορου και αργού κινητού μέσου όρου σε κάθε νέα τιμή της αγοράς
• Αν υπάρχει ανοδική διάσπαση, άνοιξε θέση αγοράς και ζωγράφισε στο παρόν κερί ανοδικό βελάκι
• Αν υπάρχει καθοδική διάσπαση, άνοιξε θέση πώλησης και ζωγράφισε στο παρόν κερί καθοδικό βελάκι
Τερματισμός
Διάγραψε όλα τα βελάκια που είχαν σχεδιαστεί στις θέσεις που άνοιξαν από το σύστημά μας.}
Εξελιγμένες εφαρμογές της αυτοματοποίησης στο trading.
Αφού αναλύσαμε την αρχιτεκτονική ενός αυτοματοποιημένου συστήματος και ενισχύσαμε την κατανόησή της μέσω ενός απλού παραδείγματος, θα συνεχίσουμε στο μοτιβό του προηγουμένου μας άρθρου παρουσιάζοντας εφαρμογές στο trading τα προβλήματα της χειροποίητης υλοποίησής τους και πως η αυτοματοποίηση και το λογισμικό επιλύουν τα προβλήματα και καθιστούν εφαρμόσιμεςς πολύπλοκες ιδέες.
Εφαρμογή OCO (One Cancels the Other)
Περιγραφή εφαρμογής
Υπάρχουν περιπτώσεις που ο trader «στήνει» εντολές αγοράς και πώλησης σε προκαθορισμένα επίπεδα και επιθυμεί όταν κάποια από τις εντολές του εκτελεστεί, να ακυρωθεί η άλλη.
Περιγραφή προβλήματος
Ο trader πρέπει να είναι συνεχώς μπροστά στην οθόνη του και μολίς εκτελεστεί η μία θέση να ακυρώσει χειροκίνητα την άλλη.
Επίλυση προβλήματος μέσω της αυτοματοποίησης
Ένα σύστημα αυτοματοποίησης, θα «στήσει» τις θέσεις στις τιμές που θα προκαθορίσει ο χρήστης και θα ελέγχει αν κάποια από τις δύο εκτελεστεί. Σε αυτήν την περίπτωση θα ακυρώσει την άλλη ακαριαία. Ο trader γλυτώνει όλον αυτόν τον χρόνο αξιοποιώντας σε κάτι άλλο παραγωγικότερο.
Εφαρμογή συρόμενου περιορισμού ζημιάς (Trailing Stop Loss)
Περιγραφή εφαρμογής
Είναι αποδοτικότερο σε πολλές των περιπτώσεων, να μην ορίζεται σε μία θέση προκαθορισμένη τιμή – στόχος (Take Profit) αλλά να μετακυλίεται – σύρεται ο περιορισμός ζημιάς, όσο η αγορά κινείται στην επιθυμητή κατεύθυνση. Έτσι ο trader δεν αρκείται σε ένα συγκεκριμένο και προκαθορισμένο κέρδος αλλά επωφελείται από ολόκληρη την κίνηση της αγοράς.
Περιγραφή προβλήματος
Κάποιος πρέπει να βρίσκεται συνεχώς μπροστά στην οθόνη, να παρακολουθεί τις τιμές και να μετακινεί το Stop Loss κάθε φορά που εμφανίζεται νέα καλύτερη τιμή.
Επίλυση προβλήματος μέσω της αυτοματοποίησης
Τα πράγματα είναι πολύ απλά: το λογισμικό μας θα ανοίξει μόνο του τη θέση βάσει των κανόνων μας, θα παρακολουθεί τις τιμές και από το όριο κέρδους που θα του θέσουμε, σε κάθε καλύτερη τιμή θα μετακινεί το Stop Loss ακαριαία, έστω κι αν αυτή η καλύτερη τιμή είναι ανεπαίσθητα μικρή. Τα μάτια μας, τα νεύρα μας και ο χρόνος μας είναι πολύτιμα για να τα αναλώνουμε σε πράγματα που μπορούν να κάνουν οι μηχανές για μας εύκολα, γρήγορα, με ασφάλεια και ακρίβεια.
Εφαρμογή τμηματικού κλεισίματος θέσης (Partial Close)
Περιγραφή εφαρμογής
Πολλές φορές το αποτέλεσμα μιας θέσης δεν πρέπει να είναι άσπρο – μάυρο ή μονά – ζυγά. Με άλλα λόγια δεν είναι απαραίτητο η θέση να κλείσει είτε από τιμή – στόχο (Take Profit) είτε από περιορισμό ζημιάς (Stop Loss). Μπορούν να υπάρχουν ενδιάμεσες καταστάσεις όπως το τμηματικό κλείσιμο θέσης. Με την εφαρμογή του τμηματικού κλεισίματος, χωρίζουμε την απόσταση της τιμής εισόδου και της τιμής στόχου σε ενδιάμεσα επίπεδα. Κάθε φορά που η αγορά πιάνει ένα από τα επίπεδα αυτά, κλείνουμε ένα ποσοστό της θέσης μας και μετακινούμε το Stop Loss σε σχέση με την αρχική του τιμή. Έτσι επιτυχγάνουμε να κατοχυρώνουμε κέρδη και έστω κι αν η θέση μας δεν καταφέρει να πιάσει την τιμή στόχο και η αγορά γυρίσει στην αντίθετη κατεύθυνση, έχουμε Α. πάρει ένα τμήμα της θέσης μας με κέρδος Β. μετακινήσει το Stop Loss σε κερδοφόρο επίπεδο.
Περιγραφή προβλήματος
Η χειροκίνητη εφαρμογή αυτής της μεθόδου προϋποθέυει ότι ένας άνθρωπως αδιάληπτα παρακολουθεί την αγορά, επισκοπεί τα επίπεδα, κλείνει τμήμα της θέσης και μετακινεί το Stop Loss. Τι θα συμβεί αν έχουμε δέκα ή είκοσι ανοικτές θέσεις σε διάφορες αγορές; Πόσο γρήγορα και ακριβή μπορούν να είναι τα μάτια μας ή τα χέρια μας;
Επίλυση προβλήματος μέσω της αυτοματοποίησης
Θα συνεχίσουμε να το λέμε έστω κι αν η φράση καταντάει βαρετή: τα πράγματα είναι πολύ απλά και εύκολα. Το λογισμικό θα ελέγχει παράλληλα όλες τις θέσεις σε όλες τις αγορες, θα ελέγχει γρήγορα και με ακρίβεια τα επίπεδα μας, θα κλείνει τα ποσοστά των θέσεων που έχουμε προκαθορίσει και θα μετακινεί το Stop Loss κάθε θέσης στο επίπεδο που του έχουμε πει. Το μόνο που χρειαζόμαστε έιναι να υπολογίσουμε σωστά όλα τα επίπεδα και τα ποσοστά και φυσικά ένας καλός προγραμματιστής.
Εμείς θα γυρνάμε στην οθόνη μας μετά από την δουλειά μας ή τον απογευματινό μας καφέ και θα βλέπουμε τα αποτελέσματα. Αν έχουμε κινητό ή tablet με σύνδεση internet και με εγκατεστημένη την ηλεκτρονική πλατφόρμα συναλλαγών, θα βλέπουμε ζωντανά και αυτόματα, τμήματα θέσεων να κλείνουν σε διάφορα επίπεδα και Stop Losses να μετακινούνται.
Συμπέρασμα
Σε μια σειρά τριών άρθρων, ορίσαμε την αυτοματοποίηση στο trading, παρουσιάσαμε την διείσδυση που έχει στα τεχνολογικά εξελιγμένα κράτη, αναλύσαμε την αρχιτεκτονική των αυτοματοποιημένων συστημάτων συναλλαγών μέσω απλού παραδείγματος και ψευδοκώδικα, καταδείξαμε τα πλεονεκτήματα που παρουσιάζει και εμφανίσαμε πληθώρα εφαρμογών και προβλημάτων που επιλύει.
Ελπίζουμε ότι φανήκαμε χρήσιμοι στην κατανόηση της τεχνολογίας και του λογισμικού σε έναν χώρο όπως αυτόν των αγορών και των χρηματιστηρίων που θεωρούμε ότι έχει μεγάλη χρησιμότητα και εφαρμογή.
Πηγή:
Αρχικό άρθρο