Bikin strategi trading sendiri itu ibarat jembatan antara sekadar judi sama bisnis yang sistematis. Pakai data historis (backtesting) bikin kita bisa ngabisin jatah salah "di atas kertas" dulu, sebelum beneran naruh modal gede ke algoritma.
Di artikel ini, kita bakal bedah prosesnya dari nyari ide sampai ngetes ketahanan strategi itu pakai teknologi paling update.
1. Fondasi: Dari Ide ke Algoritma
Semua strategi pasti dimulai dari hipotesis. Ini adalah pernyataan jelas soal perilaku pasar. Contohnya: "Kalau harga aset turun 5% dalam sejam pas volumenya lagi anomali, ada kemungkinan gede bakal terjadi pantulan jangka pendek (rebound)."
Tipe-tipe strategi buat pemula:
- Mean Reversion (Kembali ke Rata-rata): Nyari momen pas harga udah melenceng kejauhan dari nilai rata-ratanya.
- Trend Following (Ikut Tren): Masuk pas arah pergerakan harga udah konfirm (pakai moving averages atau tembus level breakout).
- Arbitrase: Manfaatin selisih harga aset yang sama di bursa (exchange) yang beda.
- Arbitrase Statistik: Nyari korelasi antara aset-aset yang berbeda.
2. Ngumpulin Data Historis
Kualitas tes kamu tergantung banget sama kualitas datanya.
"Garbage in, garbage out" (Kalau inputnya sampah, outputnya ya sampah).
Ngambil datanya di mana?
- API Exchange: Binance, Coinbase, atau Bybit nyediain akses ke data candlestick (OHLCV) historis.
- Layanan Spesialis: Yahoo Finance (saham), CoinMetrics (kripto), atau Glassnode (data on-chain).
- Dataset Jadi: Kaggle atau repo khusus di GitHub.
Tabel: Tipe Data dan Kegunaannya
| Tipe Data | Deskripsi | Cocok Buat Apa |
|---|---|---|
| OHLCV | Open, High, Low, Close, Volume | Analisis teknikal klasik, strategi swing/menengah. |
| Orderbook (L2) | Antrean order, limit order | Scalping, HFT, analisis likuiditas. |
| Tick Data | Setiap satu transaksi terjadi | Backtest super presisi, arbitrase. |
| Alternative Data | Medsos, berita, laporan keuangan | Analisis sentimen, pendekatan fundamental. |
3. Tools Buat Ngetes
Buat yang baru mulai bisa pakai platform visual, kalau yang udah pro biasanya langsung coding.
- TradingView (Pine Script): Cara paling cepet buat visualisasiin ide. Strategy tester bawaannya langsung munculin performa di atas grafik.
- Python (Library):
- Pandas: Buat utak-atik data.
- Backtrader atau VectorBT: Engine gahar buat backtesting.
- ccxt: Buat koneksi ke ratusan exchange kripto.
Contoh Code Simpel pakai Python (VectorBT)
Code ini ngetes persilangan dua moving average (Golden Cross):
import vectorbt as vbt
import pandas as pd
# Download data
data = vbt.YFData.download('BTC-USD', start='2023-01-01')
close = data.get('Close')
# Definisi strategi: Fast MA (10) potong Slow MA (50) ke atas
fast_ma = vbt.MA.run(close, 10)
slow_ma = vbt.MA.run(close, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
# Jalanin backtest
pf = vbt.Portfolio.from_signals(close, entries, exits, init_cash=1000)
print(pf.total_return())4. Metrik Efektivitas
Jangan cuma silau sama "Total Profit". Profit gede bisa aja dibarengi risiko akun ludes (MC).
- Drawdown (Penurunan Saldo): Penurunan terdalam dari titik saldo tertinggi ke titik terendah. Kalau drawdown 50%, kamu butuh profit 100% cuma buat balik modal.
- Sharpe Ratio: Ngasih tau apakah profit kamu sebanding sama risiko yang diambil. Angka di atas 1.0 biasanya udah dianggap oke.
- Win Rate: Persentase trade yang profit. Catatan: Strategi dengan Win Rate 30% bisa tetep cuan luber kalau Risk/Reward-nya cakep.
- Profit Factor: Perbandingan antara total profit sama total rugi.
5. Jebakan Betmen (Detail yang Sering Terlewat)
Di sinilah biasanya trader pemula "tumbang" pas pakai akun riil meski hasil tesnya kelihatan bagus.
Look-ahead Bias (Ngintip Masa Depan)
Algoritma kamu tanpa sengaja pakai data yang belum terjadi. Contoh: ngitung harga rata-rata harian, terus mutusin beli di pagi hari berdasarkan data itu. Padahal di dunia nyata, pagi-pagi kamu belum tahu harga sore bakal gimana.
Survivorship Bias (Eror "Penyintas")
Ngetes strategi cuma di koin atau saham yang sekarang lagi top. Kamu lupa sama ratusan proyek yang udah bangkrut atau delisting. Harusnya ngetes ke semua aset yang eksis di periode waktu tersebut.
Slippage dan Komisi (Selisih Harga)
Secara teori kamu beli di harga $100. Tapi di market riil, order kamu baru dapet di $100.5 gara-gara kurang likuid, plus dipotong fee exchange 0.1%. Kalau udah jalan 1000 kali trade, selisih receh ini bisa bikin strategi yang harusnya cuan malah jadi boncos.
6. Metode Pengujian Tingkat Lanjut: Uji Nyali Strategi
Setelah backtest awal menunjukkan grafik profit yang "cakep", sekarang saatnya kita hajar dengan stress-test. Cuma ngetes pakai data historis biasa itu nggak cukup, soalnya pasar itu kayak bunglon—berubah-ubah terus.
Walk-Forward Analysis (WFA)
Ini adalah metode pengujian "berjalan". Kamu bagi datanya jadi beberapa blok:
- In-Sample (Training): Kamu optimasi parameter strategi (misalnya, nyari panjang MA yang paling pas).
- Out-of-Sample (Test): Kamu uji parameter tadi di potongan data berikutnya yang belum pernah "dilihat" sama algoritma.
Terus, kamu geser jendelanya ke depan. Kalau strategi tetep konsisten di semua area yang "nggak terlihat" tadi, berarti strategi kamu emang tahan banting.
Simulasi Monte Carlo
Di sini kamu ngacak urutan transaksi kamu ribuan kali secara random.
- Tujuannya: Buat nyari tahu seberapa besar peluang rentetan loss (Drawdown) bakal bikin akun kamu amsyong alias bangkrut.
Kalau dari 10.000 simulasi ada 500 kejadian yang bikin modal ludes, berarti strateginya terlalu berisiko, biarpun rata-rata profitnya kelihatan tinggi.
7. Optimasi dan "Overfitting" (Kebablasan Setting)
Jebakan paling maut buat researcher itu adalah Overfitting. Ini kondisi di mana kamu setting parameter saking sempurnanya sampai algoritma kamu cuma "menghafal" masa lalu, tapi langsung mati kutu pas ketemu data baru.
Cara biar nggak kena jebakan overfitting:
- Parameter dikit aja: Semakin banyak indikator dan syarat "if-then" di kode kamu, makin gede peluang kamu cuma trading di atas noise pasar.
- Stabilitas parameter: Kalau strategi jalan pas periode indikator 20, tapi langsung boncos pas diganti ke 19 atau 21, itu tandanya nggak kokoh. Hasilnya harusnya berubah pelan-pelan pas settingan digeser dikit.
- Alasan logis: Tiap parameter harus ada alasan ekonominya. Alasan "karena di masa lalu dapet duit paling banyak" itu alasan yang buruk.
8. Konsep Jarang Orang Tahu: MEV dan JIT Liquidity di Backtesting
Kalau kamu main di ranah DeFi (Uniswap v3/v4), metode backtest standar bisa bohong gara-gara spesifikasi blockchain yang unik.
- LVR (Loss Versus Rebalancing): Metrik modern buat penyedia likuiditas. Ini ngebandingin cuan dari fee sama kerugian gara-gara tukang arbitrase ngambil likuiditas di harga yang nguntungin mereka (tapi ngerugiin kamu).
- JIT (Just-In-Time) Liquidity: Strategi di mana likuiditas dimasukin ke pool tepat sedetik sebelum ada trade gede, terus langsung ditarik lagi. Di backtest biasa pakai candle (OHLCV), ini nggak bakal kelihatan—kamu butuh data berbasis event (Event-driven data).
9. Checklist Praktis: Jalan dari Kode ke Bursa
| Tahapan | Tindakan | Alat bantu |
|---|---|---|
| 1. Hipotesis | Bikin deskripsi syarat entry/exit dan stop loss. | Notepad / Obsidian |
| 2. Ambil Data | Dapetin data candle historis atau data tick. | API (Binance/CCXT), Python |
| 3. Backtest | Running pertama strategi di data masa lalu. | Backtrader, Pine Script |
| 4. Optimasi | Masukin hitungan fee (0.1%+) dan slippage. | Parameter di kode |
| 5. Validasi | Walk-Forward dan Monte Carlo. | Python (scipy, numpy) |
| 6. Paper Trading | Trading pakai akun virtual secara real-time. | TradingView / Akun Demo |
| 7. Scaling | Mulai trading pakai modal riil yang kecil dulu. | API Key (Read/Write) |
10. Contoh Kode: Ngitung Komisi dan Slippage
Di testing yang pro, strategi kamu wajib "dihukum" pakai biaya. Kira-kira begini skemanya:
# Pseudocode logika biaya transaksi
commission = 0.001 # 0.1% per trade
slippage = 0.0005 # 0.05% selisih harga
def execute_trade(price, size, side):
if side == 'buy':
effective_price = price * (1 + slippage)
cost = size * effective_price * (1 + commission)
elif side == 'sell':
effective_price = price * (1 - slippage)
revenue = size * effective_price * (1 - commission)
return effective_price, cost_or_revenue
Aturan Emas: Kalau setelah ditambahin fee dan slippage yang realistis strategi kamu yang tadinya cuan berubah jadi boncos—jangan dipaksa buat di-tweak lagi. Cari ide lain. Pasar nggak punya ampun buat yang ngabain biaya transaksi.