Hari Ketika Saya Menonaktifkan Sakelar Pengaman Saya Sendiri

Di suatu tempat dalam riwayat bot live trading pertama saya, ada sebuah commit yang tidak saya banggakan. Panjangnya dua kata. Di tengah sistem yang sedang berjalan, untuk membuat sebuah masalah menghilang, saya menjangkau ke dalam mekanisme pengaman yang seharusnya melindungi akun dan menulis: if False.

Itu berhasil, dengan cara yang sama seperti mematikan alarm asap “berhasil.” Alarmnya berhenti. Hal yang sedang diawasi oleh alarm itu tidak.

Pengaman yang tak henti-hentinya menyala

Di awal, saya telah melakukan satu hal dengan benar: saya memberi bot live itu batas kerugian harian. Jika akun turun terlalu jauh dalam satu hari, sistem seharusnya berhenti trading dan menunggu saya. Itu adalah jenis pemutus sirkuit yang paling dasar, dan di atas kertas itu persis jenis disiplin yang diajarkan untuk dibangun oleh seorang pemula.

Masalahnya adalah ia terus menyala padahal sebenarnya tidak ada yang salah. Setiap kali bot mengerahkan kas ke dalam sebuah posisi, pengaman itu melihat saldo kas turun dan membacanya sebagai kerugian. Jadi ia melakukan tugasnya, dengan keras dan terus-menerus, menghentikan sebuah sistem yang tidak sedang mengalami kondisi kerugian yang diklaim oleh pengaman tersebut. Sebuah alarm yang berbunyi setiap beberapa menit tanpa alasan bukanlah fitur keselamatan; itu adalah kebisingan. Dan kebisingan, pada akhirnya, dibungkam.

Hotfix dua kata

Maka saya membungkamnya. Di tengah sesi, dengan bot sedang berjalan, saya menonaktifkan pemeriksaan kerugian harian — if False — dan merilisnya. Penghentian itu berhenti. Bot kembali trading dengan bebas. Selama beberapa menit rasanya seperti sebuah perbaikan.

Itu bukan perbaikan. Itu adalah salah satu keputusan paling berbahaya yang saya buat dalam keseluruhan proyek itu, dan layak untuk dijelaskan secara tepat mengapa.

Apa yang sebenarnya saya lakukan

Pengaman itu menyala karena ia diberi informasi yang buruk — ia mengacaukan pengeluaran kas untuk sebuah posisi dengan kehilangan uang. Itu adalah bug yang nyata, dan ia punya perbaikan yang nyata: ajari pengaman itu perbedaan antara membeli dan merugi.

Saya tidak melakukan itu. Saya mematikan pengamannya. Saya memperlakukan masalah pengukuran seolah-olah itu masalah pengaman, dan saya menyelesaikannya dengan menghapus pengaman tersebut. Itu setara dalam engineering dengan mencabut baterai dari detektor asap karena ia terus berbunyi cicit. Bunyi cicitnya berhenti. Begitu pula perlindungannya.

Pengaman yang dinonaktifkan adalah utang yang berbunga-bunga

Inilah bagian yang seharusnya lebih membuat saya takut daripada saat itu. Sebelum hotfix, masalah saya hanya sekadar menjengkelkan: sebuah pengaman yang menghentikan saya terlalu sering. Setelah hotfix, masalah saya menjadi tak terlihat dan tak terbatas — sebuah bot live, trading uang sungguhan, tanpa batas kerugian yang berfungsi sama sekali.

Alarm palsu itu punya biaya yang bisa saya lihat: trading yang terganggu. Pengaman yang dinonaktifkan punya biaya yang tidak bisa saya lihat — sampai hari di mana kerugian sejati mungkin tiba dan menemukan tidak ada apa pun yang menghalanginya. Saya telah menukar gangguan yang terlihat dan bisa dilewati dengan risiko yang tak terlihat dan tak berujung, dan saya melakukannya untuk membuat lampu merah berubah hijau lebih cepat.

Itulah godaan dari menonaktifkan sebuah pengaman: biayanya ditangguhkan. Tidak ada hal buruk yang terjadi seketika. Tagihannya, kalau pun datang, datang belakangan dan sekaligus — pada saat yang paling buruk, yang justru merupakan saat di mana pengaman itu ada untuk menanganinya.

Langkah yang benar: perbaiki pengamannya, jangan bungkam ia

Respons yang benar adalah yang membosankan. Pengaman yang dimaksudkan itu valid, tetapi input pengukuran dan akuntansinya rusak. Jadi Anda perbaiki inputnya: pisahkan sinyal-sinyal yang memberinya makan sehingga ia bereaksi terhadap kerugian yang sesungguhnya, bukan terhadap pergerakan biasa kas ke dalam posisi. Begitu pengaman itu bisa membedakan kerugian nyata dari pembelian normal, ia berhenti berteriak serigala — dan ia ada di sana, utuh, untuk kerugian yang benar-benar akan penting.

Aturan yang saya ambil dari ini hampir memalukan karena sederhananya, dan sekarang saya memperlakukannya hampir sebagai mutlak: Anda tidak boleh terus trading dengan mekanisme pengaman yang dimatikan. Jika sebuah pengaman menyala secara keliru, diagnosis input-inputnya dan logikanya sendiri sebelum Anda mengubah atau menonaktifkannya — dan perbaiki atau ganti ia sebelum Anda melanjutkan, alih-alih berjalan tanpa perlindungan.

Inti dari sebuah pengaman adalah saat-saat ketika Anda tidak ada di sana

Ada alasan mengapa ini lebih penting bagi sistem otomatis daripada hampir apa pun yang Anda operasikan dengan tangan. Sebuah bot live berjalan saat Anda tidur, saat Anda bekerja, saat Anda hampir lupa ia ada. Mekanisme pengamannya sebenarnya bukan untuk saat-saat ketika Anda sedang mengawasi — Anda hampir tidak membutuhkannya saat itu. Mereka ada untuk saat-saat ketika Anda tidak ada: pergerakan tajam pukul 4 pagi, bug yang hanya terpicu di hari libur, kaskade yang berlangsung dalam sembilan puluh detik ketika Anda beranjak dari meja.

Ketika Anda menonaktifkan sebuah pengaman untuk melewati sebuah gangguan hari ini, Anda meminjam terhadap justru saat-saat itu. Anda bertaruh bahwa jam yang tak terawasi itu akan menjadi jam yang tenang. Pasar tidak menawarkan taruhan itu dengan syarat yang adil.

Saya menyimpan commit dua kata itu dalam pikiran sebagai semacam label peringatan. if False adalah perbaikan termudah di dunia, dan sering kali, itu sama sekali bukan perbaikan — itu adalah cara mengubah masalah yang bisa Anda lihat menjadi bencana yang tidak bisa Anda lihat.

— Tidak ada sinyal, tidak ada imbal hasil, bukan nasihat investasi.