Pemikiran Vibe Trading: kapan harus menggunakan AI, dan kapan tidak.
Belakangan ini ada konsep yang disebut Vibe Trading—mendeskripsikan niat trading dengan bahasa alami, dan membiarkan AI mengeksekusinya. Ucapkan "strategi konservatif, prioritaskan aset dengan volatilitas rendah", dan AI akan mengonfigurasinya secara otomatis. Kedengarannya indah.
Tapi sebelum membahas Vibe Trading, saya ingin menceritakan sebuah kejadian baru-baru ini yang lebih jelas daripada teori apa pun tentang "di mana AI harus digunakan."
Pada 31 Maret, Claude Code dari Anthropic secara tidak sengaja mengekspos kode sumbernya dalam pembaruan npm—sekitar 512.000 baris TypeScript (catatan: ini adalah total kode setelah dibundel, termasuk dependensi dan kode yang dihasilkan). Analisis balik dari komunitas segera menyebar, dan pengembang di seluruh dunia membuka kode untuk mencari fitur baru.
Tapi penemuan yang paling mengejutkan saya, tidak ada hubungannya dengan AI. Penemuan itu sendiri juga tidak ada hubungannya dengan trading, tetapi filosofi teknik di baliknya seharusnya bisa dipahami oleh para pelaku kuantitatif.
Di dalam sebuah modul yang dianotasi oleh analis sebagai userPromptKeywords, ada sebuah regex yang digunakan untuk mencocokkan kata-kata kasar seperti shit, wtf, fucking broken—untuk dengan cepat menilai apakah pengguna sedang mengumpat.
Perusahaan model bahasa besar paling canggih di dunia menggunakan ekspresi reguler untuk mendeteksi emosi.
Bukan memanggil Claude untuk melakukan analisis sentimen. Bukan melatih pengklasifikasi. Ini adalah pencocokan string yang berjalan dalam hitungan mikrodetik.
Mengapa?
1. Mengapa Anthropic Tidak Menggunakan AI-nya Sendiri
Ini bukan karena malas. Ini adalah keputusan rekayasa yang dipertimbangkan dengan matang.
Claude Code memproses ratusan ribu interaksi pengguna setiap hari. Setiap interaksi perlu menilai "apakah pengguna menunjukkan frustrasi," agar dapat menyesuaikan strategi respons. Jika setiap kali LLM dipanggil untuk menilai:
- Latensi: Inferensi LLM membutuhkan setidaknya beberapa ratus milidetik; pencocokan regex hanya beberapa mikrodetik.
- Biaya: Panggilan LLM dihitung per token; pencocokan regex hampir gratis.
- Determinisme: Regex cocok atau tidak cocok; hasilnya 100% pasti; output LLM tidak deterministik, input yang sama dapat menghasilkan penilaian yang berbeda.
Jadi pilihan Anthropic adalah: menggunakan regex untuk penyaringan cepat (ambang batas rendah, cepat, deterministik), dan mengalokasikan daya komputasi LLM hanya untuk keputusan yang benar-benar membutuhkan pemahaman semantik.
Ini bukan detail teknis. Ini adalah filosofi arsitektur: tidak semua masalah layak diselesaikan dengan AI.
Orang yang berkecimpung di kuantitatif seharusnya sangat merasakan hal ini.
2. Pilihan yang Sama dalam Trading Kuantitatif
Ada dua jenis keputusan dalam strategi Anda:
Keputusan Deterministik—gunakan "Aturan"
Siapa pun yang pernah menulis strategi di FMZ tahu bahwa logika trading inti seringkali hanya beberapa baris kode deterministik:
javascript
// Sinyal cross moving average — Contoh JavaScript FMZ
var records = exchange.GetRecords(PERIOD_D1)
var ma5 = TA.MA(records, 5)
var ma20 = TA.MA(records, 20)
var idx = records.length - 1
// Golden cross buka long
if (ma5[idx] > ma20[idx] && ma5[idx-1] <= ma20[idx-1]) {
exchange.SetDirection("buy")
exchange.Buy(records[idx].Close, 1)
Log("Golden cross MA, buka long")
}
Kondisi jelas, hasil pasti, tidak perlu "memahami" semantik. Tulis dengan if-else, keandalan 100%, eksekusi milidetik.
Ini mirip dengan pendekatan Anthropic menggunakan regex untuk mendeteksi emosi—masalah deterministik, gunakan alat deterministik. Tentu saja, regex adalah pencocokan string, moving average adalah perhitungan matematis, alatnya berbeda, tetapi peran mereka dalam sistem masing-masing serupa: sama-sama penilaian deterministik yang tidak memerlukan AI.
Untuk stop loss, keandalan if-else adalah 100%, sedangkan keandalan AI adalah "kemungkinan besar". Akun Anda tidak mampu menanggung probabilitas kecil itu.
Keputusan Evaluasi Kabur—gunakan AI
Tapi beberapa keputusan tidak bisa ditulis dengan if-else:
- Analisis sentimen berita: Pernyataan The Fed keluar, apakah hawkish atau dovish? "Mempertahankan suku bunga saat ini tidak berubah, tetapi komite akan memantau perubahan data dengan saksama"—apakah pernyataan ini positif atau negatif? Moving average tidak bisa memberi tahu Anda, regex juga tidak bisa.
- Deteksi anomali: Volume diskusi di media sosial untuk altcoin tertentu naik 800% dalam 3 jam, tetapi harga belum bergerak. Apakah ini "smart money sedang akumulasi" atau "seseorang membuat hype sebelum pump"? Perlu penilaian kabur berdasarkan informasi multidimensi.
- Generasi strategi: Anda memiliki intuisi—"seringkali setelah pola seperti ini terjadi lonjakan." Tapi Anda tidak bisa menjelaskan kondisi pastinya. Anda bisa mendeskripsikan intuisi ini ke LLM dan biarkan ia membantu Anda mengonversinya menjadi faktor kuantitatif yang bisa di-backtest.
Karakteristik umum dari skenario-skenario ini: input tidak terstruktur, standar penilaian kabur, perlu "pemahaman" bukan hanya "pencocokan".
3. Pendekatan Berlapis yang Bisa Ditiru
Kembali ke arsitektur Claude Code. Analisis komunitas mengungkapkan pelapisan yang jelas:
| Layer | Mekanisme di Claude Code | Padanan dalam Trading Kuantitatif |
|---|---|---|
| Layer Penyaringan Cepat | Regex, pencocokan kata kunci | Persilangan MA, stop loss threshold, batasan posisi |
| Layer Infrastruktur Teknik | Manajemen proses, pengiriman pesan, kontrol izin | API exchange, manajemen order, engine risk control |
| Layer Keputusan Semantik | Prompt LLM | Analisis sentimen berita, pengenalan pola abnormal, eksplorasi strategi |
Tentu saja, Claude Code dan trading kuantitatif adalah dua domain yang sangat berbeda, pemetaan di sini tidak sepenuhnya presisi. Tapi resonansi filosofi desainnya nyata—pilih alat yang paling cocok di setiap layer, jangan gunakan satu palu untuk semua paku.
Komunitas open source juga mempraktikkan pendekatan serupa. TradingAgents adalah kerangka kerja multi-Agent trading kuantitatif yang patut diperhatikan (dibangun di atas LangGraph, dengan makalah akademis pendamping). Ini mensimulasikan struktur tim perusahaan trading nyata: analis teknis bertanggung jawab untuk perhitungan candlestick dan indikator, analis sentimen untuk menginterpretasi berita dan opini publik, dan trader dengan gaya berbeda menggabungkan pendapat dari berbagai pihak untuk membuat keputusan akhir. Bukan satu AI serba bisa yang mengerjakan semuanya, melainkan peran berbeda yang menjalankan fungsinya masing-masing.
Perlu dicatat bahwa TradingAgents adalah kerangka kerja penelitian, yang menjawab pertanyaan "bagaimana AI membuat keputusan trading." Tapi dalam live trading, Anda masih membutuhkan separuh lainnya: koneksi ke exchange, manajemen order, eksekusi risk control, log audit—semua urusan infrastruktur teknik ini justru sudah disediakan oleh platform kuantitatif seperti FMZ.
4. Bagaimana Vibe Trading Diimplementasikan: Contoh Arsitektur Berlapis
Kembali ke Vibe Trading di awal. Arahnya benar, tapi prasyaratnya adalah pelapisan yang jelas.
Anggap saja hari ini terjadi golden cross MA pada BTC, tapi beritanya semua tentang tekanan regulasi. Apa yang Anda lakukan? Jika hanya melihat MA, seharusnya buka long; jika hanya mendengar berita, Anda tidak berani bergerak. Inilah skenario khas yang membutuhkan pelapisan.
Di FMZ, arsitektur berlapis yang disederhanakan bisa diimplementasikan seperti ini (catatan: ini adalah contoh sederhana, untuk live trading harap lengkapi pengaturan kontrak dan risk control sendiri):
javascript
/*
Parameter strategi (ditambahkan di kolom "Parameter" pada halaman edit strategi FMZ):
OPENROUTER_API_KEY : tipe string, isi dengan API Key OpenRouter Anda
AI_MODEL : tipe string, nilai default "google/gemini-2.5-flash", bisa diganti dengan model lain
*/
// Lapisan pengambilan keputusan semantik: Memanggil AI melalui OpenRouter untuk mendapatkan sentimen pasar
function getAISentiment() {
var prompt = "Analisis berita pasar cryptocurrency saat ini, berikan skor sentimen (-1 hingga 1, -1 sangat panik, 1 sangat serakah), hanya kembalikan satu angka"
var response = HttpQuery("https://openrouter.ai/api/v1/chat/completions", {
method: "POST",
body: JSON.stringify({
model: AI_MODEL,
messages: [{role: "user", content: prompt}],
temperature: 0
}),
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer " + OPENROUTER_API_KEY
},
timeout: 15000
})
var score = parseFloat(JSON.parse(response).choices[0].message.content)
// Saat AI mengembalikan format abnormal, fallback ke nilai netral – keandalan sistem tidak bergantung pada setiap output AI yang benar
if (isNaN(score) || score < -1 || score > 1) {
Log("Format kembalian AI tidak normal, menggunakan nilai default 0")
score = 0
}
Log("Skor sentimen AI:", score)
return score
}
function main() {
var lastSignalTime = 0 // Mencatat waktu K-line saat sinyal terakhir dipicu, untuk mencegah pemicuan berulang pada K-line yang sama
while (true) {
var records = exchange.GetRecords(PERIOD_D1)
if (!records || records.length < 20) { Sleep(1000); continue }
var ma5 = TA.MA(records, 5)
var ma20 = TA.MA(records, 20)
var idx = records.length - 1
var curTime = records[idx].Time
var isBullCross = ma5[idx] > ma20[idx] && ma5[idx-1] <= ma20[idx-1]
var isBearCross = ma5[idx] < ma20[idx] && ma5[idx-1] >= ma20[idx-1]
// Cek status posisi
var pos = exchange.GetPosition()
var hasPosition = pos && pos.length > 0
// Lapisan pertama: Sinyal deterministik sebagai "pintu gerbang", golden cross terpicu + tidak ada posisi + belum diproses di K-line ini, baru bertanya ke AI
if (isBullCross && !hasPosition && curTime !== lastSignalTime) {
lastSignalTime = curTime
var sentiment = getAISentiment()
// Lapisan kedua: Sentimen AI sebagai "referensi", mempengaruhi ukuran posisi tetapi tidak memicu trading secara independen
if (sentiment > 0.2) {
exchange.SetDirection("buy")
exchange.Buy(records[idx].Close, 1)
Log("Golden cross + AI bullish, buka posisi penuh")
} else if (sentiment > -0.3) {
exchange.SetDirection("buy")
exchange.Buy(records[idx].Close, 0.5)
Log("Golden cross + AI netral, buka setengah posisi")
} else {
Log("Golden cross tetapi AI bearish, lewati sinyal ini")
}
}
// Death cross tutup posisi: Aturan deterministik, tidak melalui AI
if (isBearCross && hasPosition) {
exchange.SetDirection("closebuy")
exchange.Sell(records[idx].Close, pos[0].Amount)
Log("Death cross rata-rata bergerak, tutup posisi")
}
// Lapisan ketiga: Stop loss adalah "aturan besi", tidak melalui AI
if (hasPosition) {
var curPrice = records[idx].Close
var entryPrice = pos[0].Price
if (curPrice < entryPrice * 0.97) { // Turun 3% dari harga buka
exchange.SetDirection("closebuy")
exchange.Sell(curPrice, pos[0].Amount)
Log("Stop loss terpicu, tutup posisi tanpa syarat, rugi", ((curPrice/entryPrice - 1)*100).toFixed(2), "%")
}
}
Sleep(60 * 1000)
}
}
Logika inti dari kode ini layak untuk dijelaskan lebih lanjut:
1. Golden cross MA adalah "pintu gerbang". Hanya ketika sinyal deterministik pertama kali terpicu, AI akan dipanggil. Tidak bertanya ke model besar setiap K-line – ini menghemat biaya (API model besar dihitung per token) dan juga menghindari noise. Ini sejalan dengan pemikiran Anthropic: regex difilter terlebih dahulu, baru ketika cocok, proses yang lebih berat dijalankan.
2. Sentimen AI adalah "referensi". Ini mempengaruhi ukuran posisi dan apakah akan melewati sinyal, tetapi tidak memicu trading secara independen. Perhatikan penanganan异常 pada nilai kembalian AI dalam kode – jika model besar mengembalikan konten yang tidak dapat diuraikan, langsung fallback ke nilai netral 0. Keandalan sistem tidak boleh bergantung pada setiap output AI yang benar.
3. Stop loss adalah "aturan besi". Turun 3% dari harga buka, tutup posisi tanpa syarat, tidak menanyakan pendapat AI. AI mungkin berkata "optimis jangka panjang", tetapi akun Anda mungkin tidak bisa menunggu hingga jangka panjang. Di sini menggunakan persentase harga sebagai hard stop loss, tanpa melalui penilaian yang ambigu.
Inilah cara yang benar untuk membuka Vibe Trading: Gunakan bahasa alami untuk membantu AI "merasakan" suasana pasar, gunakan kode deterministik untuk "mengeksekusi" aksi trading. Batas keduanya tidak boleh kabur.
Saran praktis: Di sistem backtest FMZ, jalankan dulu strategi MA murni sebagai garis dasar, kemudian tambahkan lapisan sentimen AI, bandingkan imbal hasil dan drawdown. Jika setelah menambahkan AI malah menjadi lebih buruk – berarti ada masalah dengan分层, mungkin AI ikut campur di tempat yang seharusnya tidak. Setiap hasil kembalian AI, catat dengan Log() untuk memudahkan evaluasi setiap keputusan nanti.
V、Satu Kalimat untuk Dibawa Pulang
Perusahaan AI paling canggih menggunakan ekspresi reguler untuk mendeteksi sentimen, bukan karena mereka tidak bisa membuat AI yang lebih baik.
Itu karena mereka tahu: Memilih alat yang tepat lebih penting daripada memilih alat yang kuat.
Strategi moving average tidak seksi, ekspresi reguler tidak canggih. Tapi di bidangnya masing-masing, mereka lebih andal daripada AI mana pun.
Sebaliknya, ketika Anda perlu mengekstrak dari laporan makro sepanjang 5000 kata sebuah penilaian "apakah ini bullish atau bearish untuk BTC" – moving average tidak bisa membantu Anda, regex juga tidak bisa membantu Anda. Di sinilah AI seharusnya turun tangan.
Ini bukan masalah "pakai AI atau tidak", tapi masalah "di lapisan mana menggunakannya".
File ekspresi reguler yang tidak mencolok dalam kode sumber Claude Code telah menjawab pertanyaan yang sering diabaikan. Dan FMZ memberi Anda infrastruktur分层 yang sudah jadi – antarmuka exchange, perhitungan indikator, manajemen trading langsung, audit log semuanya sudah disiapkan, Anda hanya perlu memikirkan: Keputusan mana yang diserahkan ke TA.MA(), keputusan mana yang diserahkan ke AI.
Sumber referensi:
- Alex Kim - Kebocoran Sumber Kode Claude — Analisis deteksi frustrasi ekspresi reguler
- FMZ - Membangun Sistem Perdagangan Otomatis Bertenaga AI — Arsitektur Otak AI + Tangan FMZ
- TradingAgents - Kerangka Perdagangan Finansial LLM Multi-Agen — Kerangka open source perdagangan kuantitatif multi-Agen
- Makalah TradingAgents — Penelitian akademis kerangka perdagangan finansial multi-Agen
- VentureBeat - Kebocoran Kode Sumber Claude Code
- 1


