Kesalahan umum dengan API Broker
Apa yang sering disalahpahami orang tentang API Broker
API Broker adalah antarmuka (biasanya terprogram) yang memungkinkan perangkat lunak mengirim permintaan ke broker/tempat eksekusi dan menerima respons seperti konfirmasi pesanan, eksekusi (fill), dan pembaruan terkait akun. Kesalahan umum terjadi ketika pengembang memperlakukan antarmuka tersebut seperti satu jalur pipa yang sepenuhnya andal, padahal sebenarnya itu adalah sistem dengan status, waktu, dan kemungkinan hasil kegagalan yang eksplisit.
Kesalahpahaman utama yang perlu diperhatikan:
- Menganggap “permintaan diterima” sama dengan “transaksi dieksekusi.” API dapat mengonfirmasi bahwa pesan Anda diterima sementara hasil akhirnya bergantung pada aturan eksekusi.
- Menganggap stempel waktu dan harga tersinkronisasi. Sistem yang berbeda mungkin menggunakan jam, siklus pembaruan, atau representasi yang berbeda.
- Mengabaikan perbedaan antara data pasar yang Anda lihat dan data pasar yang relevan untuk eksekusi. Eksekusi dapat bergantung pada spread, likuiditas, dan perubahan order book pada saat broker memproses pesanan Anda.
- Melupakan bahwa biaya itu ada dan dapat bervariasi: komisi, efek pembiayaan/semalam, dan biaya lainnya dapat mengubah hasil bersih.
- Menganggap kesalahan sebagai pengecualian yang jarang terjadi. Pada praktiknya, API dapat mengembalikan timeout, pesanan ditolak, eksekusi parsial, atau pembaruan yang hilang.
Mekanismenya: dari mana kesalahan berasal
API Broker biasanya melibatkan bagian-bagian yang bergerak ini:
- Pembuatan permintaan: Anda membuat pesanan dan memilih parameter (instrumen, kuantitas, jenis, time-in-force, dan pengidentifikasi).
- Transportasi dan pemrosesan: permintaan Anda berjalan melalui jaringan, diautentikasi, dan diproses oleh layanan broker.
- Pembaruan status: broker merespons dengan konfirmasi dan kemudian memublikasikan perubahan status (misalnya, terbuka → terisi sebagian → terisi/dibatalkan/ditolak).
- Pelaporan eksekusi: eksekusi (fill) dan detail akuntansi terkait dikirimkan saat eksekusi terjadi.
Kesalahan implementasi umum di dalam bagian-bagian tersebut:
- Tidak menggunakan pengidentifikasi yang stabil (atau menggunakannya secara tidak konsisten). Tanpa id sisi-klien yang jelas dan aturan pemutaran ulang yang konsisten, percobaan ulang (retry) dapat membuat duplikat.
- Mengabaikan ekspektasi idempotensi. Jika Anda mencoba ulang setelah timeout, Anda mungkin tidak tahu apakah broker sudah bertindak.
- Meng-hard-code asumsi tentang siklus hidup pesanan. Beberapa pesanan dapat ditolak setelah diterima, terisi sebagian beberapa kali, atau dibatalkan berdasarkan aturan venue.
- Mencampur nilai “perkiraan” dan “terkonfirmasi”. Jika sistem Anda mencatat perhitungan berdasarkan snapshot dan kemudian membandingkannya dengan eksekusi aktual, ketidakcocokan adalah hal yang wajar.
Bukti dan contoh pemeriksaan yang dapat Anda lakukan
Karena hasil bervariasi dan tidak ada data real-time yang diasumsikan di sini, pendekatan teraman adalah memverifikasi perilaku menggunakan pemeriksaan terkontrol:
- Audit mesin status: Untuk sampel pesanan uji, catat setiap pesan/kejadian dan pastikan aplikasi Anda bertransisi melalui setiap status yang Anda amati (diterima, terbuka, terisi sebagian, status akhir). Jika ada status yang diamati tetapi tidak ada dalam logika Anda, Anda menemukan kemungkinan bug.
- Uji percobaan ulang dan duplikasi: Simulasikan timeout jaringan tepat setelah mengirim permintaan pesanan. Kemudian verifikasi apakah broker membuat satu pesanan atau beberapa, dan konfirmasi bagaimana pengidentifikasi klien Anda berperilaku saat percobaan ulang.
- Pemeriksaan konsistensi akuntansi: Untuk setiap kejadian eksekusi yang Anda terima, bandingkan asumsi kotor/biaya Anda dengan apa yang dilaporkan broker sebagai hasil terealisasi. Jika API menyediakan bidang terpisah untuk biaya atau saldo, gunakan nilai terkonfirmasi tersebut daripada perkiraan.
- Pemeriksaan waktu dan urutan: Catat waktu lokal saat Anda mengirim permintaan dan stempel waktu yang dilaporkan broker (jika tersedia). Cari perbedaan urutan: Anda mungkin perlu mengurutkan berdasarkan waktu kejadian, bukan waktu kedatangan.
Pemeriksaan ini tidak menjamin kinerja masa depan, tetapi secara langsung menguji apakah asumsi perangkat lunak Anda sesuai dengan perilaku API broker yang dapat diamati.
Keterbatasan, mode kegagalan material, dan risiko
Keterbatasan utama adalah bahwa API broker beroperasi dalam kondisi dunia nyata: penundaan jaringan, kemacetan layanan, aturan venue, dan likuiditas yang bervariasi. Bahkan kode yang benar pun dapat menghasilkan hasil yang berbeda dari proses sebelumnya.
Setidaknya satu mode kegagalan material yang perlu direncanakan:
- Eksekusi parsial dan finalitas tertunda: Sistem Anda mungkin mengasumsikan pesanan selesai segera. Pada kenyataannya, eksekusi dapat dipecah dari waktu ke waktu, dan status akhir mungkin tiba kemudian.
Mode kegagalan lain yang umumnya menyebabkan kerugian:
- Pesanan ditolak tanpa konteks: Jika Anda memperlakukan penolakan sebagai kegagalan umum, Anda mungkin kehilangan kategori alasan yang diperlukan untuk memperbaiki masalah parameter.
- Pembaruan basi atau tidak lengkap: Anda dapat menerima pembaruan akun/pesanan di luar urutan. Tanpa rekonsiliasi yang cermat, Anda dapat menghitung posisi secara tidak benar.
- Perhitungan hasil bersih yang salah: Jika Anda mengabaikan biaya, aturan pembulatan, atau konvensi kontrak/margin, “P&L yang diharapkan” internal Anda dapat menyimpang dari apa yang dilaporkan broker.