Trading Algoritmik Forex: Kisah Praktis untuk Insinyur
Diterbitkan: 2022-03-11Seperti yang Anda ketahui, pasar Valuta Asing (Forex, atau FX) digunakan untuk perdagangan antara pasangan mata uang. Tetapi Anda mungkin tidak menyadari bahwa ini adalah pasar paling likuid di dunia.
Beberapa tahun yang lalu, didorong oleh rasa ingin tahu saya, saya mengambil langkah pertama saya ke dunia perdagangan algoritmik Forex dengan membuat akun demo dan memainkan simulasi (dengan uang palsu) di platform perdagangan Meta Trader 4.
Setelah seminggu 'berdagang', saya hampir menggandakan uang saya. Didorong oleh perdagangan algoritmik saya sendiri yang sukses, saya menggali lebih dalam dan akhirnya mendaftar ke sejumlah forum FX. Segera, saya menghabiskan berjam-jam membaca tentang sistem perdagangan algoritmik (set aturan yang menentukan apakah Anda harus membeli atau menjual), indikator khusus, suasana pasar, dan banyak lagi.
Klien Pertama Saya
Sekitar waktu ini, secara kebetulan, saya mendengar bahwa seseorang sedang mencoba mencari pengembang perangkat lunak untuk mengotomatisasi sistem perdagangan sederhana. Ini kembali ke masa kuliah saya ketika saya belajar tentang pemrograman bersamaan di Java (utas, semafor, dan semua sampah itu). Saya berpikir bahwa sistem otomatis ini tidak bisa jauh lebih rumit daripada tugas kursus ilmu data tingkat lanjut saya, jadi saya bertanya tentang pekerjaan itu dan bergabung.
Klien menginginkan perangkat lunak perdagangan algoritmik yang dibangun dengan MQL4, bahasa pemrograman fungsional yang digunakan oleh platform Meta Trader 4 untuk melakukan tindakan terkait saham.
Peran platform perdagangan (Meta Trader 4, dalam hal ini) adalah menyediakan koneksi ke broker Forex. Broker kemudian menyediakan platform dengan informasi real-time tentang pasar dan mengeksekusi pesanan beli/jual Anda. Bagi pembaca yang tidak terbiasa dengan trading Forex, berikut informasi yang disediakan oleh data feed:
Melalui Meta Trader 4, Anda dapat mengakses semua data ini dengan fungsi internal, dapat diakses dalam berbagai rentang waktu: setiap menit (M1), setiap lima menit (M5), M15, M30, setiap jam (H1), H4, D1, W1, MN .
Pergerakan Harga Saat Ini disebut tick . Dengan kata lain, tick adalah perubahan harga Bid atau Ask untuk pasangan mata uang. Selama pasar aktif, mungkin ada banyak kutu per detik. Selama pasar lambat, mungkin ada menit tanpa tanda centang. Kutu adalah detak jantung robot pasar mata uang.
Saat Anda memesan melalui platform seperti itu, Anda membeli atau menjual volume tertentu dari mata uang tertentu. Anda juga menetapkan batas stop-loss dan take-profit. Batas stop-loss adalah jumlah maksimum pips (variasi harga) yang Anda mampu untuk kehilangan sebelum menyerah pada perdagangan. Batas take-profit adalah jumlah pips yang akan Anda kumpulkan sesuai keinginan Anda sebelum menguangkannya.
Spesifikasi perdagangan algoritmik klien sederhana: mereka menginginkan robot Forex berdasarkan dua indikator. Sebagai latar belakang, indikator sangat membantu ketika mencoba mendefinisikan keadaan pasar dan membuat keputusan perdagangan, karena didasarkan pada data masa lalu (misalnya, nilai harga tertinggi dalam n hari terakhir). Banyak yang sudah terpasang di Meta Trader 4. Namun, indikator yang diminati klien saya berasal dari sistem perdagangan khusus.
Mereka ingin berdagang setiap kali dua indikator khusus ini berpotongan, dan hanya pada sudut tertentu.
Tangan di atas
Saat tangan saya kotor, saya mengetahui bahwa program MQL4 memiliki struktur berikut:
- [Petunjuk Praprosesor]
- [Parameter Eksternal]
- [Variabel Global]
- [Fungsi Init]
- [Fungsi Deinit]
- [Mulai Fungsi]
- [Fungsi Kustom]
Fungsi start adalah inti dari setiap program MQL4 karena dijalankan setiap kali pasar bergerak (ergo, fungsi ini akan dijalankan sekali per tick). Ini adalah kasus terlepas dari jangka waktu yang Anda gunakan. Misalnya, Anda dapat beroperasi pada jangka waktu H1 (satu jam), namun fungsi mulai akan dijalankan ribuan kali per jangka waktu.
Untuk mengatasi ini, saya memaksa fungsi untuk dijalankan sekali per unit periode:
int start() { if(currentTimeStamp == Time[0]) return (0); currentTimeStamp = Time[0]; ...
Mendapatkan nilai indikator:
// 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); }
Logika keputusan, termasuk persimpangan indikator dan sudutnya:
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 < trend && (ordAbierta== "OP_BUY" || primeraOP == true) && anguloCorrecto("SELL") == true && DiffPrecioActual("SELL")== true ) { primeraOP = false; abrirOrden("OP_SELL", false); } } else { if(OrderSelect(ticket,SELECT_BY_TICKET)==true) { datetime ctm=OrderCloseTime(); if (ctm>0) { ticket=0; return(0); } } else Print("OrderSelect failed error code is",GetLastError()); if (ordAbierta == "OP_BUY" && dragon_min <= trend ) cerrarOrden(false); else if (ordAbierta == "OP_SELL" && dragon_max >= trend ) cerrarOrden(false); } }
Mengirim pesanan:
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(); }
Jika Anda tertarik, Anda dapat menemukan kode lengkap yang dapat dijalankan di GitHub.

Backtesting
Setelah saya membangun sistem perdagangan algoritmik saya, saya ingin tahu: 1) apakah itu berperilaku tepat, dan 2) apakah strategi perdagangan Forex yang digunakannya bagus.
Backtesting (kadang-kadang ditulis "back-testing") adalah proses pengujian sistem tertentu (otomatis atau tidak) di bawah peristiwa masa lalu. Dengan kata lain, Anda menguji sistem Anda menggunakan masa lalu sebagai proxy untuk masa kini.
MT4 hadir dengan alat yang dapat diterima untuk menguji kembali strategi perdagangan Forex (saat ini, ada lebih banyak alat profesional yang menawarkan fungsionalitas lebih besar). Untuk memulai, Anda mengatur kerangka waktu Anda dan menjalankan program Anda di bawah simulasi; alat ini akan mensimulasikan setiap tick dengan mengetahui bahwa untuk setiap unit itu harus dibuka pada harga tertentu, ditutup pada harga tertentu dan, mencapai harga tertinggi dan terendah yang ditentukan.
Setelah membandingkan tindakan program dengan harga historis, Anda akan memiliki pemahaman yang baik apakah program tersebut dijalankan dengan benar atau tidak.
Dari backtesting, saya telah memeriksa rasio pengembalian robot FX untuk beberapa interval waktu acak; Tak perlu dikatakan, saya tahu bahwa klien saya tidak akan menjadi kaya dengan itu— indikator yang dia pilih, bersama dengan logika keputusan, tidak menguntungkan . Sebagai contoh, berikut adalah hasil menjalankan program melalui jendela M15 untuk 164 operasi:
Perhatikan bahwa saldo kita (garis biru) berakhir di bawah titik awalnya.
Optimasi Parameter, dan Kebohongannya
Meskipun backtesting telah membuat saya waspada terhadap kegunaan robot FX ini, saya tertarik ketika saya mulai bermain-main dengan parameter eksternal dan melihat perbedaan besar dalam Rasio Pengembalian secara keseluruhan. Ilmu khusus ini dikenal sebagai Optimasi Parameter .
Saya melakukan beberapa pengujian kasar untuk mencoba dan menyimpulkan pentingnya parameter eksternal pada Rasio Pengembalian dan menghasilkan sesuatu seperti ini:
Atau, dibersihkan:
Anda mungkin berpikir (seperti yang saya lakukan) bahwa Anda harus menggunakan Parameter A. Tetapi keputusannya tidak semudah kelihatannya. Secara khusus, perhatikan ketidakpastian Parameter A: untuk nilai kesalahan kecil, pengembaliannya berubah secara dramatis. Dengan kata lain, Parameter A sangat mungkin untuk memprediksi hasil di masa mendatang karena ketidakpastian apa pun, perubahan apa pun akan menghasilkan kinerja yang lebih buruk.
Tapi memang, masa depan tidak pasti! Dan kembalinya Parameter A juga tidak pasti. Pilihan terbaik, pada kenyataannya, adalah mengandalkan ketidakpastian. Seringkali, parameter dengan pengembalian maksimum yang lebih rendah tetapi prediktabilitas yang unggul (lebih sedikit fluktuasi) akan lebih disukai daripada parameter dengan pengembalian tinggi tetapi prediktabilitas yang buruk.
Satu-satunya hal yang dapat Anda yakini adalah bahwa Anda tidak mengetahui masa depan pasar, dan berpikir bahwa Anda tahu bagaimana kinerja pasar berdasarkan data masa lalu adalah sebuah kesalahan. Pada gilirannya, Anda harus mengakui ketidakpastian ini dalam prediksi Forex Anda.
Ini tidak berarti kita harus menggunakan Parameter B, karena bahkan pengembalian yang lebih rendah dari Parameter A berkinerja lebih baik daripada Parameter B; ini hanya untuk menunjukkan kepada Anda bahwa Mengoptimalkan Parameter dapat menghasilkan tes yang melebih-lebihkan kemungkinan hasil di masa mendatang, dan pemikiran seperti itu tidak jelas.
Pertimbangan Perdagangan Algoritmik Forex Keseluruhan
Sejak pengalaman perdagangan Forex algoritmik pertama, saya telah membangun beberapa sistem perdagangan otomatis untuk klien, dan saya dapat memberi tahu Anda bahwa selalu ada ruang untuk dijelajahi dan analisis Forex lebih lanjut harus dilakukan. Sebagai contoh, saya baru-baru ini membangun sebuah sistem berdasarkan penemuan apa yang disebut gerakan “Ikan Besar”; yaitu, variasi pip yang besar dalam satuan waktu yang sangat kecil. Ini adalah subjek yang membuat saya terpesona.
Membangun sistem simulasi FX Anda sendiri adalah pilihan yang sangat baik untuk mempelajari lebih lanjut tentang perdagangan pasar Forex, dan kemungkinannya tidak terbatas. Misalnya, Anda dapat mencoba menguraikan distribusi probabilitas variasi harga sebagai fungsi volatilitas di satu pasar (EUR/USD misalnya), dan mungkin membuat model simulasi Monte Carlo menggunakan distribusi per status volatilitas, menggunakan tingkat apa pun dari akurasi yang Anda inginkan. Saya akan meninggalkan ini sebagai latihan untuk pembaca yang bersemangat .
Dunia Forex terkadang bisa menjadi luar biasa, tapi saya harap tulisan ini memberi Anda beberapa poin tentang cara memulai strategi trading Forex Anda sendiri.
Bacaan lebih lanjut
Saat ini, ada banyak alat untuk membangun, menguji, dan meningkatkan Otomasi Sistem Perdagangan: Trading Blox untuk pengujian, NinjaTrader untuk perdagangan, OCaml untuk pemrograman, dan lain-lain.
Saya telah membaca secara ekstensif tentang dunia misterius yaitu pasar mata uang. Berikut adalah beberapa artikel yang saya rekomendasikan untuk programmer dan pembaca yang antusias:
- BabyPips: Ini adalah titik awal jika Anda tidak tahu jongkok tentang perdagangan Forex.
- The Way of the Turtle, oleh Curtis Faith: Yang ini, menurut pendapat saya, adalah Forex Bible . Bacalah setelah Anda memiliki pengalaman berdagang dan mengetahui beberapa strategi Forex.
- Analisis Teknis untuk Profesional Perdagangan — Strategi dan Teknik untuk Pasar Keuangan Global yang Bergolak Saat Ini, oleh Constance M. Brown
- Pemrograman Expert Advisor – Membuat Sistem Perdagangan Otomatis di MQL untuk Meta Trader 4, oleh Andrew R. Young
- Sistem Perdagangan – Pendekatan Baru untuk Pengembangan Sistem dan Pengoptimalan Portofolio, oleh Urban Jeckle dan Emilio Tomasini: Sangat teknis, sangat fokus pada pengujian FX.
- Implementasi Langkah-demi-Langkah Sistem Perdagangan Mata Uang Multi-Agen, oleh Rui Pedro Barbosa dan Orlando Belo: Yang satu ini sangat profesional, menjelaskan bagaimana Anda dapat membuat sistem perdagangan dan platform pengujian.