Uji Dulu Skrip Trading Binance Buatan AI di Testnet Spot: Alamat Mana yang Diganti, Endpoint Mana yang Tak Bisa Dipakai, dan Kenapa Datanya Bisa Hilang
Menyuruh AI menulis skrip trading Binance itu gampang; yang sulit adalah mengujinya dengan aman setelah skripnya jadi. Binance menyediakan testnet untuk Spot API: dananya virtual, rate limit dan filternya pada umumnya sama dengan live, tetapi hanya endpoint /api yang tersedia dan datanya dikosongkan kira-kira sebulan sekali.
1. Kenapa Skrip Buatan AI Jangan Langsung Pakai Uang Sungguhan #
Minta ChatGPT, Claude, atau DeepSeek menulis skrip "pasang order beli kalau harga turun ke level tertentu", dan dalam waktu singkat skrip itu sudah bisa jalan. Masalahnya, sulit memastikan setiap bagiannya benar hanya dengan membaca kode: arah beli/jual, satuan jumlah, presisi harga, kondisi keluar dari loop — satu saja terbalik, di akun sungguhan hasilnya transaksi sungguhan. Makin lengkap kelihatannya kode dari AI, makin gampang orang melewatkan langkah verifikasi.
Binance menyiapkan lingkungan uji khusus untuk Spot API: pengguna yang mendaftar di testnet spot otomatis mendapat saldo berbagai aset, tetapi itu bukan aset sungguhan dan hanya bisa dipakai di dalam testnet; semua dana di testnet bersifat virtual, tidak bisa ditransfer masuk maupun keluar. Kalau skrip Anda salah memasang seratus order di sini, kerugiannya tetap nol.
2. Menyambung ke Testnet: Buat Key Testnet Dulu, Lalu Ganti Alamatnya #
Langkah dari dokumentasi hanya dua: pertama, login ke situs testnet dan buat API Key; kedua, tulis kode seperti biasa mengikuti dokumentasi Spot API, hanya saja alamat endpoint-nya diganti ke alamat testnet.
| Jenis | Alamat live | Alamat testnet |
|---|---|---|
| REST API | https://api.binance.com/api | https://testnet.binance.vision/api |
| WebSocket API | wss://ws-api.binance.com/ws-api/v3 | wss://ws-api.testnet.binance.vision/ws-api/v3 |
| Stream gabungan data pasar WebSocket | wss://stream.binance.com/stream | wss://stream.testnet.binance.vision/stream |
Tabel ini hanya memuat tiga baris. Tabel asli di dokumentasi juga mencantumkan alamat testnet untuk domain cadangan REST, stream tunggal, stream data pasar SBE, dan antarmuka FIX; cek halaman aslinya kalau Anda membutuhkannya.
Saat meminta AI mengubah kode, jadikan ini satu permintaan yang tegas: semua alamat dikumpulkan di satu variabel konfigurasi, dengan default mengarah ke testnet. Kalau di skrip ada beberapa api.binance.com yang di-hardcode di tempat berbeda, satu saja terlewat saat berganti lingkungan, jadinya "separuh request ke testnet, separuh ke live". Sesuai langkah pertama di dokumentasi, API Key testnet dibuat terpisah; jangan pakai Key akun utama untuk testnet, begitu juga sebaliknya.
testnet.binance.vision mengembalikan pesan: Service unavailable from a restricted location according to 'b. Eligibility' in https://www.binance.com/en/terms. Pesan itu merujuk ke ketentuan kelayakan (Eligibility) dalam Ketentuan Layanan Binance. Kalau pesan ini muncul, artinya lokasi jaringan Anda memang tidak bisa memakainya — jangan mencari cara untuk mengakalinya.
3. Endpoint yang Diawali /sapi Tidak Ada di Testnet #
Jawaban dokumentasi: testnet hanya menyediakan endpoint yang diawali /api; yang diawali /sapi tidak bisa dipakai. Yang tersedia adalah kategori berikut:
- Data pasar: endpoint REST, request WebSocket API, stream data pasar WebSocket
- Trading: endpoint REST, request WebSocket API
- Akun: endpoint REST, request WebSocket API
- User Data Streams
Bagi skrip buatan AI, akibatnya langsung terasa: kalau kode memanggil endpoint yang diawali /sapi, bagian itu sama sekali tidak pernah berjalan di testnet, jadi lolos di testnet bukan berarti bagian itu bebas masalah. Sebelum pindah ke live, daftar semua path endpoint di skrip, tandai terpisah setiap yang diawali /sapi, dan pastikan Anda sadar "bagian-bagian ini belum pernah diuji".
4. Dananya Virtual, Batasannya Nyata #
Dana virtual bukan berarti aturannya dilonggarkan. Menurut dokumentasi, batas IP, batas frekuensi order, filter bursa, dan filter pasangan trading di testnet secara umum sama dengan Spot API; dokumentasi juga menyarankan pengguna rutin mengambil data batas dan filter terbaru lewat endpoint, misalnya /api/v3/exchangeInfo.
Di kode buatan AI, yang paling perlu diperiksa adalah angka yang di-hardcode: jumlah order minimum, presisi harga, jumlah request per detik. Kalau angka-angka ini ditulis sebagai konstanta di kode, bisa jadi berlaku untuk satu pasangan trading tetapi belum tentu untuk pasangan lain. Suruh skrip membaca exchangeInfo dulu setiap kali dijalankan, lalu menyesuaikan jumlah dan harga berdasarkan filter yang dikembalikan; memakai logika yang sama untuk testnet dan live lebih aman daripada menyimpan konstanta terpisah untuk masing-masing. Bagaimana skrip mundur (backoff) saat request ditolak karena rate limit, dan apakah ia mencoba ulang secara membabi buta, juga bisa sekalian ketahuan di testnet.
5. Data Bisa Tiba-tiba Kosong: Kira-kira Sebulan Sekali, Tanpa Pemberitahuan #
Setelah memakai testnet beberapa waktu, suatu hari Anda akan mendapati semua riwayat order hilang. Di dokumentasi, pertanyaan ini bahkan diberi judul "All my data has disappeared! What happened?", dan jawabannya:
- Testnet direset secara berkala ke kondisi kosong; order yang masih terbuka maupun yang sudah tereksekusi ikut terhapus;
- Saat reset, semua pengguna otomatis mendapat lagi saldo berbagai aset;
- Reset terjadi kira-kira sebulan sekali, tanpa pemberitahuan sebelumnya;
- Sejak Agustus 2020, API Key tetap tersimpan saat reset, jadi tidak perlu dibuat ulang.
Kalau skrip berasumsi "order yang saya pasang terakhir kali masih ada" atau "posisi saya pasti sama dengan yang saya tinggalkan", skrip itu akan error pada hari reset. Saat meminta AI menulis skrip, tambahkan satu syarat: setiap kali dijalankan, cek dulu order terbuka dan saldo saat ini, baru putuskan langkah berikutnya, bukan membaca status yang di-cache secara lokal. Catatan pengujian Anda juga jangan hanya disimpan di testnet; hasil eksekusi yang perlu disimpan, tulis ke log lokal selagi skrip berjalan.
Satu detail kecil lagi: dokumentasi menyebutkan bahwa di testnet request klines dan uiKlines selalu mengembalikan data yang sama. Kalau logika buatan AI bergantung pada perbedaan keduanya, hal itu tidak bisa diverifikasi di testnet.
6. Metode Tanda Tangan: Siapa yang Membuat Kunci HMAC, RSA, dan Ed25519 #
Dokumentasi testnet sekalian menjelaskan perbedaan tiga jenis API Key, dan pilihan Anda memengaruhi cara menyimpan kuncinya:
| Jenis | Siapa yang membuat kunci untuk tanda tangan | Poin penting di dokumentasi |
|---|---|---|
| HMAC-SHA-256 | Binance membuatkan secret untuk Anda | Saat memperkenalkan RSA, dokumentasi menyebut RSA sebagai alternatifnya |
| RSA | Anda sendiri membuat pasangan kunci publik dan privat, hanya kunci publik yang diserahkan ke Binance, tanda tangan memakai kunci privat | Mendukung 2048 hingga 4096 bit, disarankan 2048; tanda tangan memakai PKCS#1 v1.5, PSS tidak didukung |
| Ed25519 | Sama: Anda sendiri membuat pasangan kunci dan hanya menyerahkan kunci publik | Skema asimetris lain selain RSA |
Untuk RSA dan Ed25519, kunci privat Anda buat sendiri dan Binance hanya menerima kunci publik. Di langkah pembuatan kunci privat, dokumentasi menulis: jangan berikan file ini kepada siapa pun. "Siapa pun" termasuk jendela chat AI: saat meminta AI membantu menulis kode tanda tangan, boleh saja menunjukkan format kunci publik atau pesan error, tetapi jangan tempelkan satu karakter pun dari kunci privat maupun secret. Untuk menentukan sampai tingkat mana izin API Key live dibuka, ikuti konfigurasi izin minimum API Binance untuk AI (artikel berbahasa Inggris).
7. Sebelum Pindah ke Akun Live, Cocokkan Dulu dengan Daftar Ini #
- Alamat: apakah semua alamat endpoint hanya dibaca dari satu variabel konfigurasi, sehingga saat pindah ke live yang diubah hanya satu tempat itu, tanpa alamat hardcode yang terlewat.
- Bagian yang belum teruji: endpoint apa saja di skrip yang diawali /sapi, dan apakah Anda sadar bagian itu belum pernah berjalan di testnet.
- Filter: apakah jumlah dan presisi harga disesuaikan secara real-time berdasarkan
exchangeInfo, bukan memakai konstanta dari AI. - Status: apakah skrip mengecek order terbuka dan saldo dulu saat dijalankan, dan apakah ia bisa menangani situasi "semuanya kosong" seperti saat testnet direset.
- Kunci: API Key live dibuat baru secara terpisah, izinnya hanya sampai tingkat yang benar-benar dibutuhkan skrip ini, dan kunci privat serta secret tidak pernah masuk ke percakapan AI mana pun.
Empat hal ini — alamat, filter, status, kunci — sebaiknya sudah Anda sampaikan saat meminta AI menulis kode, bukan diperbaiki setelah kodenya jadi. Anda bisa menempelkan teks berikut di depan permintaan Anda:
Saat menulis skrip yang memanggil Spot API Binance ini, wajib memenuhi empat syarat berikut:
1. Semua alamat endpoint (REST, WebSocket) dikumpulkan di satu variabel konfigurasi, dengan default mengarah ke testnet spot https://testnet.binance.vision/api; saat pindah ke live hanya bagian ini yang diubah, dan di bagian kode lain tidak boleh ada alamat yang di-hardcode.
2. Saat dijalankan, request /api/v3/exchangeInfo dulu, lalu sesuaikan jumlah order dan presisi harga berdasarkan filter yang dikembalikan; jangan menulis jumlah order minimum, presisi harga, atau frekuensi request sebagai konstanta.
3. Saat dijalankan, cek dulu order terbuka dan saldo akun saat ini, lalu tentukan langkah berikutnya berdasarkan hasilnya; jangan berasumsi order atau posisi dari run sebelumnya masih ada.
4. API Key, secret, dan kunci privat dibaca dari environment variable, jangan ditulis di kode; jangan juga meminta saya menempelkannya kepada Anda, semua contoh memakai placeholder.
Setelah AI menyerahkan kodenya, cari satu per satu di baris mana keempat syarat itu diterapkan; jangan langsung meloloskannya hanya karena AI bilang "sudah diterapkan sesuai permintaan". Prinsipnya sama seperti yang dibahas di artikel cara mengenali saat AI salah menilai.
Lihat konfigurasi izin minimum API (bahasa Inggris) →
— PromptDeck, 18 September 2026