Dua minggu terakhir ini saya sibuk mengerjakan sebuah proyek sampingan pribadi yang berhubungan dengan pasar finansial, yaitu melakukan otomatisasi terhadap kegiatan perdagangan di bursa cryptocurrency. Saya yakin untuk yang sudah terbiasa melakukan kegiatan trading pasti sering mendengar istilah robot trading. Di mana perdagangan dilakukan secara otomatis oleh komputer.
Saya memutuskan untuk membangun sistem sendiri dari nol dengan tujuan supaya benar-benar paham bagaimana sistem yang saya bangun bekerja sambil terus mengasah ilmu di bidang algorithmic trading.
Perlu diingat bahwa artikel yang saya tulis ini sifatnya hanya catatan belajar saya, jadi jangan ditelan mentah-mentah.
High-Frequency Trading (HFT) adalah strategi perdagangan aset di mana trader tidak menyimpan aset lama-lama, biasanya tidak akan lebih dari satu hari dengan keuntungan dari setiap trade sangat tipis tetapi dilakukan dengan jumlah yang banyak. Strategi dieksekusi secara cepat oleh komputer. HFT biasanya digunakan oleh investment banks, hedge fund, atau investor institusional untuk bertransaksi dalam volume yang besar dan kecepatan tinggi (bisa sampai hitungan milidetik) di bursa efek.
Di Indonesia, HFT tidak bisa digunakan di Bursa Efek Indonesia karena tidak diperbolehkan dan mungkin memang sistem di bursanya sendiri belum siap.
Oleh karena itu, untuk proses belajar, saya beralih ke bursa cryptocurrency karena bursa-bursa cryptocurrency pada umumnya memiliki API (Application Programming Interface) untuk mengakses data perdagangan secara real-time dan API untuk membuka posisi jual/beli.
Sistem yang saya buat menggunakan arsitektur microservices untuk memastikan bahwa sistem ini bisa diperbesar lagi dengan mudah (scalable). Ada empat services: Raw Data Service, Trading Service, Trading Strategy Development Service, dan Data Warehouse.
Arsitektur sistem trading yang saya rancang.
Service ini digunakan untuk mengambil ticker secara berkala dari bursa. Ticker adalah data harga jual dan beli pada suatu aset. Untuk saat ini saya ambil per 30 detik sekali untuk setiap aset karena saya rasa untuk saat ini belum perlu dilakukan lebih cepat lagi.
Data mentah yang didapat dari bursa langsung dimasukkan ke data warehouse agar nantinya bisa dianalisa dan digunakan untuk membuat strategi perdagangan. Selain dimasukkan ke Data Warehouse, data mentah ini juga dikirimkan secara real-time ke Trading Service menggunakan format MsgPack melewati MQTT Broker.
Raw Data Service saya bangun dengan menggunakan framework Ruby on Rails. Mungkin terlihat overkill ya menggunakan Rails untuk service sesederhana ini. Alasan saya menggunakannya karena selain saya sudah terbiasa, Rails juga sangat cepat untuk melakukan pembuatan purwarupa aplikasi yang banyak menggunakan CRUD, dan ada fitur Active Jobs sehingga saya tidak perlu pusing-pusing melakukan konfigurasi cron jobs.
Untuk service ini saya menggunakan Python tanpa framework. Mengapa Python? Karena ekosistem pustaka-pustaka pengolahan data dan analisa data sangat berlimpah dibandingkan Ruby.
Di dalam Trading Service ini lah algoritma trading diimplementasikan. Sistem akan bereaksi terhadap ticker yang didapat dari MQTT Broker, apakah sebaiknya melakukan posisi beli atau jual. Ketika sinyal beli atau jual sudah keluar, service ini akan mengontak Trading API di bursa.
Service ini tidak berhubungan dengan bursa sama sekali. Di bagian ini lah saya melakukan analisa teknikal dengan menggunakan berbagai macam indikator, membangun algoritma yang akan digunakan sebagai strategi, dan juga melakukan backtesting. Backtesting adalah tahapan menguji algoritma dengan menggunakan data historis apakah algoritma tersebut menguntungkan atau tidak. Data historis ini saya ambil dari Data Warehouse.
Contoh hasil backtesting menggunakan data satu hari ke belakang dengan timeframe satu menit
Di sini saya menggunakan PostgreSQL untuk melakukan penyimpanan data time series. Sejauh ini masih memadai.
Sistem yang saya bangun ini belum lah sempurna (boleh dibilang HFT abal-abal haha) dan masih jauh dari sistem HFT di luar sana yang dengan kecepatan tinggi dapat melakukan trading dalam hitungan milidetik. Bahkan hingga membuat flash crash pada pasar.
Mari jika mau berdiskusi atau memberi saran bisa tinggalkan pesan di kolom komentar atau lewat email saya yang tercantum di menu sebelah kiri.
Daftar API dan pustaka pemrograman yang digunakan