Όπως ίσως γνωρίζετε, η αγορά συναλλάγματος (Forex ή FX) χρησιμοποιείται για συναλλαγές μεταξύ ζευγαριών νομισμάτων. Αλλά ίσως να μην γνωρίζετε ότι είναι η πιο ρευστή αγορά στον κόσμο.
Πριν από λίγα χρόνια, με κίνητρο την περιέργειά μου, έκανα τα πρώτα μου βήματα στον κόσμο του αλγοριθμικού εμπορίου Forex, δημιουργώντας έναν λογαριασμό επίδειξης και έπαιζα προσομοιώσεις (με ψεύτικα χρήματα) στο Meta Trader 4 πλατφόρμα συναλλαγών.
Μετά από μια εβδομάδα «διαπραγμάτευσης», σχεδόν διπλασίασα τα χρήματά μου. Με ενθάρρυνση από τις επιτυχημένες αλγοριθμικές συναλλαγές μου, έσκαψα βαθύτερα και τελικά εγγραφή σε διάφορα φόρουμ FX. Σύντομα, περνούσα ώρες διαβάζοντας για αλγοριθμικά συστήματα συναλλαγών (σύνολα κανόνων που καθορίζουν εάν πρέπει να αγοράσετε ή να πουλήσετε), προσαρμοσμένοι δείκτες , διάθεση στην αγορά και άλλα.
Περίπου αυτή τη στιγμή, κατά λάθος, άκουσα ότι κάποιος προσπαθούσε να βρει έναν προγραμματιστή λογισμικού για να αυτοματοποιήσει ένα απλό σύστημα συναλλαγών. Ήταν πίσω στο κολέγιο μου όταν έμαθα ταυτόχρονος προγραμματισμός στην Java (νήματα, σηματοφόροι και όλα αυτά τα σκουπίδια). Σκέφτηκα ότι αυτό το αυτοματοποιημένο σύστημα δεν θα μπορούσε να είναι πολύ πιο περίπλοκο από το δικό μου προηγμένη επιστήμη δεδομένων μάθημα εργασίας, οπότε ρώτησα για τη δουλειά και ήρθα στο πλοίο.
Ο πελάτης ήθελε ενσωματωμένο αλγοριθμικό λογισμικό συναλλαγών MQL4 , μια λειτουργική γλώσσα προγραμματισμού που χρησιμοποιείται από την πλατφόρμα Meta Trader 4 για την εκτέλεση ενεργειών που σχετίζονται με τα αποθέματα.
MQL5 έκτοτε κυκλοφόρησε. Όπως θα περίμενε κανείς, αντιμετωπίζει ορισμένα από τα ζητήματα του MQL4 και συνοδεύεται από περισσότερες ενσωματωμένες λειτουργίες, οι οποίες διευκολύνουν τη ζωή.Ο ρόλος της πλατφόρμας συναλλαγών (Meta Trader 4, σε αυτήν την περίπτωση) είναι να παρέχει σύνδεση με έναν μεσίτη Forex. Στη συνέχεια, ο μεσίτης παρέχει μια πλατφόρμα με πληροφορίες σε πραγματικό χρόνο σχετικά με την αγορά και εκτελεί τις παραγγελίες αγοράς / πώλησης. Για αναγνώστες που δεν είναι εξοικειωμένοι με τις συναλλαγές Forex, ακολουθούν οι πληροφορίες που παρέχονται από τη ροή δεδομένων:
Μέσω του Meta Trader 4, μπορείτε να έχετε πρόσβαση σε όλα αυτά τα δεδομένα με εσωτερικές λειτουργίες, προσβάσιμα σε διάφορα χρονικά διαστήματα: κάθε λεπτό (M1), κάθε πέντε λεπτά (M5), M15, M30, κάθε ώρα (H1), H4, D1, W1, MN .
Η κίνηση της τρέχουσας τιμής ονομάζεται a τσιμπούρι . Με άλλα λόγια, ένα τσιμπούρι είναι μια αλλαγή στην τιμή Προσφοράς ή Ζήτησης για ένα ζεύγος νομισμάτων. Κατά τη διάρκεια ενεργών αγορών, μπορεί να υπάρχουν πολλά τσιμπούρια ανά δευτερόλεπτο. Κατά τη διάρκεια των αργών αγορών, μπορεί να υπάρχουν λεπτά χωρίς ένα σημάδι. Το τσιμπούρι είναι ο παλμός του ρομπότ της αγοράς συναλλάγματος.
Όταν κάνετε μια παραγγελία μέσω μιας τέτοιας πλατφόρμας, εσείς αγορά ή Πουλώ ένα συγκεκριμένο όγκο ενός συγκεκριμένου νομίσματος. Μπορείτε επίσης να ορίσετε όρια stop-loss και take-profit. ο όριο διακοπής απώλειας είναι το μέγιστο ποσό των κουκούτσια (διακυμάνσεις τιμών) που μπορείτε να χάσετε πριν εγκαταλείψετε μια συναλλαγή. ο όριο λήψης κέρδους είναι το ποσό των pips που θα συγκεντρώσετε υπέρ σας πριν εξαργυρώσετε.
Εάν θέλετε να μάθετε περισσότερα σχετικά με τα βασικά στοιχεία της διαπραγμάτευσης (π.χ., pips, τύποι παραγγελιών, spread, slippage, εντολές αγοράς και άλλα), δείτε εδώ .Οι αλγοριθμικές προδιαγραφές συναλλαγών του πελάτη ήταν απλές: ήθελαν ένα ρομπότ Forex με βάση δύο δείκτες. Για το ιστορικό, οι δείκτες είναι πολύ χρήσιμο όταν προσπαθείτε να ορίσετε μια κατάσταση αγοράς και να λάβετε αποφάσεις συναλλαγών, καθώς βασίζονται σε προηγούμενα δεδομένα (π.χ., την υψηλότερη τιμή τιμής την τελευταία ν μέρες). Πολλοί έρχονται ενσωματωμένοι στο Meta Trader 4. Ωστόσο, οι δείκτες στους οποίους ενδιαφέρει ο πελάτης μου προέρχονται από ένα προσαρμοσμένο σύστημα συναλλαγών.
Ήθελαν να ανταλλάσσουν κάθε φορά δύο από αυτούς τους προσαρμοσμένους δείκτες που τέμνονται και μόνο σε μια συγκεκριμένη γωνία.
Καθώς βρώμικα τα χέρια μου, έμαθα ότι τα προγράμματα MQL4 έχουν την ακόλουθη δομή:
Η λειτουργία εκκίνησης είναι η καρδιά κάθε προγράμματος MQL4 αφού εκτελείται κάθε φορά που κινείται η αγορά (ergo, αυτή η λειτουργία θα εκτελείται μία φορά ανά τικ). Αυτό ισχύει ανεξάρτητα από το χρονικό πλαίσιο που χρησιμοποιείτε. Για παράδειγμα, θα μπορούσατε να λειτουργείτε στο χρονικό πλαίσιο H1 (μία ώρα), αλλά η συνάρτηση έναρξης θα εκτελούσε πολλές χιλιάδες φορές ανά χρονικό πλαίσιο.
Για να επιλύσω αυτό, ανάγκασα τη λειτουργία να εκτελεί μία φορά ανά μονάδα περιόδου:
int start() { if(currentTimeStamp == Time[0]) return (0); currentTimeStamp = Time[0]; ...
Λήψη των τιμών των δεικτών:
// Loading the custom indicator extern string indName = 'SonicR Solid Dragon-Trend (White)'; double dragon_min; double dragon_max; double dragon; double trend; int start() { … // Updating the variables that hold indicator values actInfoIndicadores(); …. string actInfoIndicadores() { dragon_max=iCustom(NULL, 0, indName, 0, 1); dragon_min=iCustom(NULL, 0, indName, 1, 1); dragon=iCustom(NULL, 0, indName, 4, 1); trend=iCustom(NULL, 0, indName, 5, 1); }
Η λογική της απόφασης, συμπεριλαμβανομένης της τομής των δεικτών και των γωνιών τους:
int start() { … if(ticket==0) { if (dragon_min > trend && (ordAbierta== 'OP_SELL' || primeraOP == true) && anguloCorrecto('BUY') == true && DiffPrecioActual('BUY')== true ) { primeraOP = false; abrirOrden('OP_BUY', false); } if (dragon_max 0) { ticket=0; return(0); } } else Print('OrderSelect failed error code is',GetLastError()); if (ordAbierta == 'OP_BUY' && dragon_min = trend ) cerrarOrden(false); } }
Αποστολή παραγγελιών:
void abrirOrden(string tipoOrden, bool log) { RefreshRates(); double volumen = AccountBalance() * point; double pip = point * pipAPer; double ticket = 0; while( ticket <= 0) { if (tipoOrden == 'OP_BUY') ticket=OrderSend(simbolo, OP_BUY, volumen, Ask, 3, 0/*Bid - (point * 100)*/, Ask + (point * 50), 'Orden Buy' , 16384, 0, Green); if (tipoOrden == 'OP_SELL') ticket=OrderSend(simbolo, OP_SELL, volumen, Bid, 3, 0/*Ask + (point * 100)*/, Bid - (point * 50), 'Orden Sell', 16385, 0, Red); if (ticket<=0) Print('Error abriendo orden de ', tipoOrden , ' : ', ErrorDescription( GetLastError() ) ); } ordAbierta = tipoOrden; if (log==true) mostrarOrden(); }
Εάν σας ενδιαφέρει, μπορείτε να βρείτε τον πλήρη, τρέξιμο κώδικα στο GitHub .
Μόλις δημιούργησα το αλγοριθμικό σύστημα συναλλαγών μου, ήθελα να μάθω: 1) αν συμπεριφερόταν κατάλληλα, και 2) εάν η στρατηγική συναλλαγών Forex που χρησιμοποίησε ήταν καλή.
Επανεξέταση (μερικές φορές γράφεται 'back-testing') είναι η διαδικασία δοκιμής ενός συγκεκριμένου (αυτοματοποιημένου ή μη) συστήματος κάτω από τα γεγονότα του παρελθόντος. Με άλλα λόγια, δοκιμάζετε το σύστημά σας χρησιμοποιώντας το παρελθόν ως πληρεξούσιο για το παρόν.
Το MT4 έρχεται με ένα αποδεκτό εργαλείο για να δοκιμάσετε μια στρατηγική συναλλαγών Forex (σήμερα, υπάρχουν πιο επαγγελματικά εργαλεία που προσφέρουν μεγαλύτερη λειτουργικότητα). Για να ξεκινήσετε, ρυθμίζετε τα χρονικά σας πλαίσια και εκτελείτε το πρόγραμμά σας με προσομοίωση. το εργαλείο θα προσομοιώσει κάθε τσεκάρι γνωρίζοντας ότι για κάθε μονάδα θα πρέπει να ανοίγει σε συγκεκριμένη τιμή, να κλείνει σε μια συγκεκριμένη τιμή και, να φτάσει σε καθορισμένα υψηλά και χαμηλά επίπεδα.
Αφού συγκρίνετε τις ενέργειες του προγράμματος με τις ιστορικές τιμές, θα έχετε καλή ιδέα για το εάν εκτελείται σωστά ή όχι.
Οι δείκτες που είχε επιλέξει, μαζί με τη λογική των αποφάσεων, δεν ήταν κερδοφόροι.Από το backtesting, έλεγξα τον δείκτη επιστροφής του ρομπότ FX για κάποια τυχαία χρονικά διαστήματα. περιττό να πω, ήξερα ότι ο πελάτης μου δεν θα γινόταν πλούσιος με αυτό— οι δείκτες που είχε επιλέξει, μαζί με τη λογική των αποφάσεων, δεν ήταν κερδοφόροι . Ως δείγμα, εδώ είναι τα αποτελέσματα της εκτέλεσης του προγράμματος πάνω από το παράθυρο M15 για 164 λειτουργίες:
Σημειώστε ότι το υπόλοιπό μας (η μπλε γραμμή) τελειώνει κάτω από το σημείο εκκίνησης.
Μια προειδοποίηση: το να λέμε ότι ένα σύστημα είναι «κερδοφόρο» ή «μη κερδοφόρο» δεν είναι πάντα γνήσιο. Συχνά, τα συστήματα είναι (μη) κερδοφόρα για χρονικές περιόδους βάσει της «διάθεσης» της αγοράς, η οποία μπορεί να ακολουθήσει μια σειρά προτύπων γραφήματος:
Αν και η δοκιμή με έκανε να είμαι επιφυλακτικός για τη χρησιμότητα αυτού του ρομπότ FX, Με ενδιέφερε όταν άρχισα να παίζω με τις εξωτερικές παραμέτρους του και παρατήρησα μεγάλες διαφορές στη συνολική αναλογία επιστροφής. Αυτή η συγκεκριμένη επιστήμη είναι γνωστή ως Βελτιστοποίηση παραμέτρων .
Έκανα κάποιες σκληρές δοκιμές για να δοκιμάσω και να συμπεράνω τη σημασία των εξωτερικών παραμέτρων στο Return Ratio και βρήκα κάτι σαν αυτό:
Ή, καθαρίστηκε:
Μπορεί να πιστεύετε (όπως έκανα) ότι πρέπει να χρησιμοποιήσετε την παράμετρο Α. Αλλά η απόφαση δεν είναι τόσο απλή όσο φαίνεται. Συγκεκριμένα, σημειώστε το απρόβλεπτη της παραμέτρου Α: για μικρές τιμές σφάλματος, η επιστροφή της αλλάζει δραματικά. Με άλλα λόγια, η παράμετρος Α είναι πολύ πιθανό να προβλέψει υπερβολικά μελλοντικά αποτελέσματα, καθώς οποιαδήποτε αβεβαιότητα, οποιαδήποτε αλλαγή καθόλου θα οδηγήσει σε χειρότερη απόδοση.
Όμως, το μέλλον είναι αβέβαιο! Και έτσι η επιστροφή της παραμέτρου Α είναι επίσης αβέβαιη. Η καλύτερη επιλογή, στην πραγματικότητα, είναι να βασιστείτε στην απρόβλεπτη κατάσταση. Συχνά, μια παράμετρος με χαμηλότερη μέγιστη απόδοση αλλά ανώτερη προβλεψιμότητα (λιγότερη διακύμανση) θα είναι προτιμότερη από μια παράμετρο με υψηλή απόδοση αλλά χαμηλή προβλεψιμότητα.
Το μόνο πράγμα που μπορείτε να είστε σίγουροι είναι ότι δεν γνωρίζετε το μέλλον της αγοράς και πιστεύοντας ότι ξέρετε πώς θα αποδώσει η αγορά με βάση τα προηγούμενα δεδομένα είναι λάθος. Με τη σειρά του, πρέπει να αναγνωρίσετε αυτό το απρόβλεπτο στις προβλέψεις σας στο Forex.
Το να πιστεύεις ότι ξέρεις πώς θα αποδώσει η αγορά με βάση τα προηγούμενα δεδομένα είναι λάθος.Αυτό δεν σημαίνει απαραίτητα ότι πρέπει να χρησιμοποιήσουμε την παράμετρο Β, επειδή ακόμη και οι χαμηλότερες αποδόσεις της παραμέτρου Α αποδίδουν καλύτερα από την παράμετρο Β. Αυτό είναι μόνο για να σας δείξω ότι η βελτιστοποίηση των παραμέτρων μπορεί να οδηγήσει σε δοκιμές που υπερεκτιμούν τα πιθανά μελλοντικά αποτελέσματα και μια τέτοια σκέψη δεν είναι προφανής.
Από την πρώτη αλγοριθμική εμπειρία συναλλαγών Forex, έχω δημιουργήσει πολλά αυτοματοποιημένα συστήματα συναλλαγών για πελάτες και μπορώ να σας πω ότι υπάρχει πάντα περιθώριο για εξερεύνηση και περαιτέρω ανάλυση Forex. Για παράδειγμα, έφτιαξα πρόσφατα ένα σύστημα βασισμένο στην εύρεση των λεγόμενων κινήσεων 'Big Fish'. δηλαδή, τεράστιες παραλλαγές pips σε μικροσκοπικές, μικρές μονάδες χρόνου. Αυτό είναι ένα θέμα που με συναρπάζει.
Η οικοδόμηση του δικού σας συστήματος προσομοίωσης FX είναι μια εξαιρετική επιλογή για να μάθετε περισσότερα σχετικά με τις συναλλαγές στην αγορά Forex και οι πιθανότητες είναι ατελείωτες. Για παράδειγμα, θα μπορούσατε να προσπαθήσετε να αποκρυπτογραφήσετε την πιθανότητα κατανομής των διακυμάνσεων των τιμών ως συνάρτηση της μεταβλητότητας σε μία αγορά (για παράδειγμα EUR / USD) και ίσως να κάνετε ένα μοντέλο προσομοίωσης Monte Carlo χρησιμοποιώντας τη διανομή ανά κατάσταση μεταβλητότητας, χρησιμοποιώντας οποιονδήποτε βαθμό ακρίβεια που θέλετε. Θα το αφήσω ως άσκηση για το πρόθυμος αναγνώστης.
Ο κόσμος του Forex μπορεί να είναι συντριπτικός κατά καιρούς, αλλά ελπίζω ότι αυτή η διατύπωση σας έχει δώσει ορισμένα σημεία για το πώς να ξεκινήσετε με τη δική σας στρατηγική συναλλαγών Forex.
Σήμερα, υπάρχει μια τεράστια ομάδα εργαλείων για τη δημιουργία, τη δοκιμή και τη βελτίωση των αυτοματισμών του συστήματος συναλλαγών: Trading Blox για δοκιμή, NinjaTrader για διαπραγμάτευση, OCaml για προγραμματισμό, για να αναφέρουμε μερικά.
Έχω διαβάσει εκτενώς για τον μυστηριώδη κόσμο που είναι η αγορά συναλλάγματος. Ακολουθούν μερικές εγγραφές που προτείνω σε προγραμματιστές και ενθουσιώδεις αναγνώστες:
Οι συναλλαγές Forex (ή FX) πραγματοποιούν αγορές και πωλήσεις μέσω ζεύγους νομισμάτων (π.χ. USD έναντι EUR) στην αγορά συναλλάγματος.
Οι μεσίτες Forex κερδίζουν χρήματα μέσω προμηθειών και προμηθειών. Οι έμποροι Forex βγάζουν (ή χάνουν) χρήματα με βάση το χρονοδιάγραμμά τους: Εάν είναι σε θέση να πουλήσουν αρκετά υψηλά σε σύγκριση με το πότε αγόρασαν, μπορούν να αποφέρουν κέρδος.
Το Backtesting είναι η διαδικασία δοκιμής μιας συγκεκριμένης στρατηγικής ή συστήματος χρησιμοποιώντας τα γεγονότα του παρελθόντος.
Η αλγοριθμική συναλλαγή είναι όταν ένα ρομπότ / πρόγραμμα χρησιμοποιεί ένα σύνολο κανόνων που το λένε πότε να αγοράσει ή να πουλήσει.