Pendahuluan: Pemikiran Harness Engineer
Akhir-akhir ini, di komunitas rekayasa AI/ML, ada sebuah cara berpikir yang semakin banyak dibahas—Harness Engineer.
Ide intinya sangat sederhana:
Alih-alih memberikan jawaban berdasarkan tebakan sendiri, lebih baik membangun kerangka kerja, biarkan data dan eksperimen menemukan jawabannya sendiri.
Cara insinyur tradisional: Saya pikir parameter A bagus, saya akan menulis kode untuk mengimplementasikan A. Cara Harness Engineer: Saya tidak tahu mana yang lebih baik antara A, B, atau C, saya akan membangun kerangka kerja, biarkan A, B, dan C berjalan bersamaan, data akan memberi tahu saya jawabannya.
Insinyur bertanggung jawab untuk mendefinisikan ruang pencarian dan standar evaluasi, sistem bertanggung jawab untuk optimasi otomatis di dalam ruang tersebut. Pemikiran ini dalam ML berpadanan dengan walk-forward optimization, AutoML; dalam kuantitatif, sebenarnya juga ada skenario penerapan yang alami.
Koin Anomali: Medan Pertempuran dengan Tren Paling Jelas
Di pasar kontrak kripto, ada satu jenis koin yang perlu mendapat perhatian khusus—"koin anomali" dengan volume perdagangan yang sangat besar.
Jenis koin ini memiliki beberapa karakteristik umum:
- Dana sangat terkonsentrasi, perilaku pemain utama jelas
- Keberlanjutan tren relatif kuat, setelah dimulai seringkali berlangsung cukup lama
- Volatilitas tinggi, beberapa koin dengan volume tinggi menunjukkan tren yang relatif kuat pada periode tertentu, dan strategi moving average secara historis menunjukkan kinerja yang relatif baik pada aset semacam ini
Karena alasan ini, menggunakan strategi persilangan rata-rata bergerak ganda klasik pada koin semacam ini adalah titik awal yang sederhana dan masuk akal. Garis cepat menembus garis lambat, tren dimulai, ikuti; garis cepat menembus garis lambat ke bawah, tren berbalik, keluar. Logikanya sederhana, tetapi pada aset dengan tren yang jelas, kinerja historisnya seringkali tidak buruk.
Hanya ada satu masalah: Koin mana yang merupakan koin anomali? Kelompok parameter MA mana yang digunakan?
Dua masalah ini, jika dinilai secara manual, terlalu subjektif, dan orang yang berbeda mungkin mendapatkan jawaban yang sama sekali berbeda. Selain itu, pasar bersifat dinamis, koin anomali hari ini belum tentu menjadi koin anomali besok, dan kombinasi parameter yang efektif hari ini mungkin tidak efektif lagi besok.
Di sinilah pemikiran Harness Engineer berperan.
Alih-alih memilih koin dan menyesuaikan parameter secara manual, lebih baik serahkan kedua masalah ini kepada kerangka kerja untuk diselesaikan—tentukan standar evaluasi, biarkan data historis berjalan sendiri di ruang kandidat untuk menemukan jawabannya. Manusia hanya perlu memutuskan standar apa yang digunakan untuk mengukur baik buruk, sisanya serahkan pada sistem.
Berdasarkan pemikiran ini, seluruh strategi dirancang sebagai kerangka kerja penyaringan bergulir, yang beroperasi dalam tiga lapisan.
Arsitektur Strategi: Mekanisme Dua Tingkat Pacuan Kuda
Lapisan Pertama: Konstruksi Kumpulan Aset Dasar
Dari semua jenis kontrak di seluruh pasar, ambil 150 koin teratas berdasarkan volume perdagangan dolar AS secara menurun sebagai kumpulan kandidat.
Mengapa volume perdagangan? Karena di tempat dengan volume perdagangan besar, dana paling terkonsentrasi, tren paling mudah terbentuk, dan koin anomali juga paling padat. Langkah ini tidak membuat penilaian subjektif, murni membiarkan dana pasar memberikan suara, siapa pun yang volume perdagangannya besar akan masuk ke dalam kumpulan.
javascript
const filtered = tickers
.filter(t => t.Symbol.endsWith('USDT.swap'))
.map(t => ({ symbol: t.Symbol, quoteVolume: t.Last * t.Volume }))
.sort((a, b) => b.quoteVolume - a.quoteVolume)
.slice(0, topN)
.map(t => t.symbol);
Logikanya sangat langsung: filter kontrak USDT, hitung volume dolar AS, urutkan menurun, ambil N teratas. Tidak ada penilaian subjektif, dana pasar memberikan suara sendiri.
Lapisan Kedua: Seleksi Unggulan Dua Tingkat
Ini adalah bagian paling inti dari seluruh strategi, dan juga tempat di mana pemikiran Harness paling jelas terlihat.
Urutan eksekusi yang benar adalah seperti ini:
⚠️ Catatan: Menggunakan skor dari parameter optimal untuk mewakili kemampuan koin, pada dasarnya mengandung risiko overfitting tertentu—parameter yang berkinerja terbaik di masa lalu belum tentu akan sama efektifnya di masa depan. Keterbatasan ini akan dibahas lebih lanjut di bagian akhir artikel.
Proses Backtest
Untuk setiap koin dalam kumpulan kandidat, jalankan beberapa kelompok kombinasi parameter MA secara bersamaan, setiap kelompok parameter berjalan secara independen pada lilin K historis, mensimulasikan logika buka/tutup posisi persilangan yang sebenarnya:
javascript
// Iterasi setiap koin × setiap kelompok parameter
for (const params of maParamsList) {
const bt = backtest_MA(records, params.fast, params.slow);
// Setiap backtest secara independen menghasilkan: win rate, profit factor, max drawdown, jumlah sinyal
}
Logika inti dari setiap backtest adalah persilangan rata-rata bergerak ganda standar:
javascript
const crossUp = fastMA[i-1] <= slowMA[i-1] && fastMA[i] > slowMA[i];
const crossDown = fastMA[i-1] >= slowMA[i-1] && fastMA[i] < slowMA[i];
if (crossUp) position = { side: 'long', entryPrice: records[i].Close };
if (crossDown) position = { side: 'short', entryPrice: records[i].Close };
Skor Komposit
Setelah backtest selesai, lakukan penilaian komposit pada hasil backtest dari setiap kelompok parameter. Skor terdiri dari dua bagian:
Skor Bobot Ternormalisasi (koefisien total 0.80):
javascript
const score =
Math.min(bt.winRate * 100, 100) * 0.30 // Win rate, batas atas 100
+ Math.min(bt.profitFactor * 20, 60) * 0.30 // Profit factor, batas atas 60
+ Math.max(0, 1 - bt.maxDrawdown / maxMDD) * 100 * 0.20 // Kontrol Max Drawdown
+ volPct * volPctBonus // Item bonus persentil volatilitas
Item Bonus Persentil Volatilitas: Item terakhir volPct × volPctBonus (koefisien default 10) adalah item bonus yang independen dari sistem bobot, digunakan untuk, dalam kondisi skor yang sama, memilih koin yang volatilitas saat ini berada pada persentil historis yang lebih tinggi—karena jenis koin ini cenderung memiliki tren yang lebih aktif.
Perlu dijelaskan bahwa bobot dan koefisien bonus ini adalah pengaturan berdasarkan pengalaman, bukan diperoleh melalui optimasi, dan dalam penggunaan sebenarnya dapat disesuaikan lebih lanjut sesuai dengan kondisi pasar.
Kompetisi Lapisan Pertama: Kompetisi Parameter
Beberapa kelompok parameter dari koin yang sama masing-masing mendapatkan skor, ambil skor tertinggi sebagai skor perwakilan koin tersebut dan parameter optimal:
javascript
if (score > bestScore) {
bestScore = score;
bestResult = bt;
bestParams = params; // Catat kombinasi parameter dengan kinerja historis terbaik saat ini
}
Kompetisi Lapisan Kedua: Kompetisi Koin
Semua koin mengeluarkan skor terbaiknya masing-masing, urutkan lalu ambil N teratas untuk masuk ke dalam daftar putih:
javascript
results.sort((a, b) => b.score - a.score);
const whitelist = results.slice(0, topCoins).map(r => r.coin);
Keluaran akhirnya adalah parameter rata-rata bergerak optimal eksklusif yang sesuai untuk setiap koin dalam daftar putih, bukan satu set parameter untuk semua koin.
Lapisan Ketiga: Eksekusi Real-time dan Manajemen Risiko
Gunakan konfigurasi yang telah disaring untuk melakukan trading real-time, sambil menambahkan beberapa lapisan mekanisme manajemen risiko:
Pemicu Sinyal: Deteksi real-time status persilangan rata-rata bergerak dari koin dalam daftar putih, Golden Cross untuk Long, Death Cross untuk Short:
javascript
const crossUp = fastPrev <= slowPrev && fastCur > slowCur;
const crossDown = fastPrev >= slowPrev && fastCur < slowCur;
if (crossUp) longList.push(sym);
if (crossDown && allowShort) shortList.push(sym);
Trailing Stop Dinamis: Diaktifkan setelah floating profit mencapai ambang batas, dan ambang batas penarikan kembali dikencangkan secara dinamis seiring dengan meningkatnya floating profit. Tiga tingkat ambang batas adalah pengaturan berdasarkan pengalaman, logika intinya adalah semakin tinggi floating profit, semakin kecil toleransi terhadap penarikan kembali, untuk mengamankan keuntungan yang telah diperoleh:
javascript
function getDynamicTrailDrawdown(maxPnl) {
if (maxPnl >= 7) return 3; // Floating profit tinggi, toleransi penarikan kembali diperketat
if (maxPnl >= 4) return 2;
return 1.5; // Floating profit rendah, beri ruang lebih untuk pergerakan harga
}
Persepsi Kondisi Pasar: Deteksi persentil volatilitas BTC, lingkungan volatilitas tinggi secara otomatis mengurangi koefisien posisi, dalam kondisi pasar ekstrem langsung melarang short:
javascript
if (marketState === 'volatile') positionScaleDown = 0.5;
else if (marketState === 'high_vol') positionScaleDown = 0.8;
else if (marketState === 'low_vol') positionScaleDown = 0.7;
Seluruh proses penyaringan diulang secara bergulir dan periodik, tidak terpaku pada satu set konfigurasi, dan memperbarui daftar putih serta parameter secara dinamis seiring dengan perubahan pasar.
Asumsi Dasar: Keberlanjutan Tren
Kerangka kerja ini dapat bekerja dengan baik, bergantung pada satu asumsi inti:
Koin dan parameter yang berkinerja baik dalam sejarah terkini, masih memiliki keberlanjutan tertentu dalam jangka pendek ke depan.
Ini bukanlah takhayul, ada logika pasar yang mendukungnya — inersia modal, kelanjutan sentimen pasar, konsistensi perilaku pemain utama, semuanya akan membuat tren tetap efektif dalam jendela waktu tertentu.
Tetapi harus jujur dikatakan: asumsi ini belum melalui verifikasi statistik yang ketat, ini lebih merupakan penilaian berdasarkan pengalaman. Apakah kerangka kerja ini dapat terus efektif dalam perdagangan nyata, pada akhirnya harus diuji dengan data perdagangan riil.
Apa perbedaan dengan Harness Engineer yang sebenarnya
Harus ditegaskan di sini.
Strategi ini memiliki bentuk Harness, tetapi jika dibandingkan dengan sistem Harness Engineer yang sebenarnya, masih terdapat kesenjangan yang jelas:
| Dimensi | Harness yang sebenarnya | Strategi ini |
|---|---|---|
| Pembagian sampel | Set pelatihan + set validasi + set uji holdout | Backtest data historis penuh, tanpa validasi out-of-sample |
| Perlindungan overfitting | Ada pemeriksaan generalisasi yang jelas | Bergantung pada diversifikasi parameter untuk lindung nilai sebagian, tidak lengkap |
| Isolasi eksperimen | Setiap varian berjalan independen tanpa saling mempengaruhi | Berbagi candlestick yang sama, ada kopling implisit |
| Ambang batas peluncuran | Harus melewati validasi untuk dapat diterapkan | Skor tertinggi langsung diluncurkan, tanpa lapisan verifikasi kedua |
| Akumulasi kesalahan | Evaluasi setiap lapisan independen | Kedua lapisan balap kuda didasarkan pada yang terbaik historis, kesalahan terakumulasi |
Perbedaan intinya adalah: Harness yang sebenarnya akan bertanya 'apakah hasil ini masih berlaku di luar sampel', sedangkan 'optimal' yang dipilih oleh dua lapisan balap kuda dari strategi ini pada dasarnya adalah optimal historis — overfitting pada level parameter, ditambah overfitting pada level koin, apakah dapat berlanjut ke masa depan, adalah pertanyaan yang selalu terbuka.
Penutup: Mencari pedang di perahu, atau layak dicoba?
Di dunia kuantitatif, memprediksi selalu menjadi hal yang sangat sulit.
Banyak orang akan berkata, menggunakan data historis untuk memilih parameter lalu berdagang secara nyata, pada dasarnya adalah mencari pedang di perahu — pedang sudah jatuh ke air, goresan yang kamu buat di perahu tidak akan membantumu menemukannya. Pasar akan berubah, parameter yang efektif akan menjadi tidak efektif, koin ajaib hari ini mungkin akan biasa saja besok, moving average optimal kemarin mungkin hanya noise hari ini.
Kritik ini bukannya tanpa alasan.
Tetapi bagaimanapun, percobaan yang seharusnya dilakukan, tetap harus dilakukan.
Hakikat kuantitatif bukanlah menemukan jawaban yang selalu benar, melainkan secara sistematis meningkatkan tingkat kemenangan dalam ketidakpastian. Bahkan jika itu mencari pedang di perahu, kamu harus memiliki perahu terlebih dahulu, membuat goresan itu — menempatkan strategi (perahu), itu sendiri adalah awal dari kuantitatif.
Tentu saja, kerangka kerja itu sendiri tidak menjamin keuntungan. Memiliki kerangka kerja hanyalah titik awal, nilai sebenarnya terletak pada eksekusi dan iterasi yang berkelanjutan: daftar putih dapat disesuaikan, bobot skor dapat diubah, ruang parameter dapat diperluas, take profit dan stop loss dapat dioptimalkan. Setiap penyesuaian adalah eksperimen baru, yang membuat kerangka kerja ini semakin mendekati Harness yang sebenarnya.
Jalan ditempuh, bukan dipikirkan.
Kode sumber strategi: Strategi Kuantitatif Penyaringan Moving Average Harness Engineer
- 1



