Dalam dunia forex trading, pengurusan risiko adalah kunci untuk kekal konsisten. Salah satu kaedah analisis yang digunakan oleh trader profesional adalah Monte Carlo simulation. Secara ringkas, model Monte Carlo ialah teknik statistik yang digunakan untuk meramal kemungkinan pelbagai hasil dalam situasi yang melibatkan ketidakpastian. Ia bukanlah strategi entry atau exit, tetapi lebih kepada alat pengurusan risiko dan penilaian kebarangkalian kerugian serta keuntungan.
Apa Itu Monte Carlo Simulation?
Monte Carlo simulation berfungsi dengan menghasilkan ribuan hingga jutaan simulasi rawak berdasarkan data sejarah atau model harga yang kita gunakan. Dalam konteks forex, model ini mengambil kira pergerakan harga pasangan mata wang (contohnya EUR/USD atau USD/JPY) dan menjalankan analisis terhadap senario “what if”. Dengan cara ini, kita boleh melihat julat kemungkinan drawdown, profit factor, dan expectancy yang mungkin berlaku.
Bayangkan anda mempunyai strategi trading dengan rekod backtest selama 2 tahun. Data sejarah ini hanya menunjukkan satu jalur (path) hasil strategi. Tetapi bagaimana jika urutan kemenangan (win) dan kerugian (loss) berubah? Di sinilah Monte Carlo masuk – ia menyusun semula urutan trade tersebut dengan pelbagai kombinasi untuk melihat sejauh mana strategi anda boleh bertahan dalam situasi pasaran berbeza.
Komponen Penting
- Random Sampling – Model ini menggunakan random number generator untuk mencipta ribuan simulasi.
- Equity Curve Analysis – Trader melihat hasil simulasi untuk mengetahui potensi equity curve, max drawdown, dan risk of ruin.
- Volatility Factor – Dalam forex, volatility adalah faktor besar. Monte Carlo membantu mengira impak volatiliti ekstrem pada akaun anda.
- Risk Parameters – Anda boleh menguji bagaimana perubahan lot size, leverage, atau stop loss mempengaruhi performance metrics.
Kegunaan dalam Forex
- Stress Testing – Monte Carlo boleh menunjukkan apa yang berlaku jika pasaran menghadapi kejutan besar (contohnya berita ekonomi atau black swan event).
- Position Sizing – Dengan melihat risk of ruin, trader boleh menyesuaikan saiz posisi supaya akaun lebih tahan lama.
- Kebarangkalian Konsistensi – Ia membantu mengenal pasti sama ada keuntungan strategi adalah statistically significant atau hanya kebetulan.
Contoh
Katakan strategi anda mempunyai win rate 50% dan reward-to-risk ratio 1:2. Melalui Monte Carlo, anda boleh mensimulasikan 10,000 kemungkinan urutan trade dengan parameter ini. Hasilnya, anda dapat melihat kemungkinan maksimum drawdown dan expected value (EV) bagi akaun anda. Jika simulasi menunjukkan risiko kehilangan 50% modal dalam 1 tahun terlalu tinggi, anda boleh tweak risk per trade (contohnya 0.5% daripada ekuiti) untuk mengurangkan risiko.
Contoh kod:
import numpy as np def max_drawdown(equity_curve): peak = equity_curve[0] dd = 0.0 max_dd = 0.0 for eq in equity_curve: if eq > peak: peak = eq dd = (peak - eq) / peak if dd > max_dd: max_dd = dd return max_dd def simulate_equity(win_rate=0.5, rr=2.0, risk_per_trade=0.01, n_trades=200, start_equity=10_000): equity = start_equity curve = [equity] rng = np.random.default_rng() for _ in range(n_trades): risk_amount = equity * risk_per_trade # position sizing berasaskan % ekuiti semasa win = rng.random() < win_rate if win: pnl = risk_amount * rr else: pnl = -risk_amount equity += pnl curve.append(equity) curve = np.array(curve) return curve, max_drawdown(curve) def monte_carlo( n_sims=10_000, win_rate=0.5, rr=2.0, risk_per_trade=0.01, n_trades=200, start_equity=10_000, ruin_frac=0.5 # “bankrap” bila jatuh ke 50% modal awal ): endings = [] drawdowns = [] ruined = 0 for _ in range(n_sims): curve, mdd = simulate_equity(win_rate, rr, risk_per_trade, n_trades, start_equity) endings.append(curve[-1]) drawdowns.append(mdd) if curve[-1] <= start_equity * ruin_frac: ruined += 1 endings = np.array(endings) drawdowns = np.array(drawdowns) results = { "modal_awal": start_equity, "median_baki_akhir": float(np.median(endings)), "min_baki_akhir": float(np.min(endings)), "max_baki_akhir": float(np.max(endings)), "purata_max_drawdown": float(np.mean(drawdowns)), "p95_max_drawdown": float(np.quantile(drawdowns, 0.95)), "risk_of_ruin_%": ruined / n_sims * 100.0 } return results if __name__ == "__main__": params = dict( n_sims=5000, win_rate=0.45, # contoh: 45% win rate rr=2.0, # reward:risk 2:1 risk_per_trade=0.01, # 1% risiko per trade n_trades=300, # 300 trade start_equity=10_000, ruin_frac=0.5 ) res = monte_carlo(**params) for k, v in res.items(): if "drawdown" in k: print(f"{k}: {v:.2%}") elif "ruin" in k: print(f"{k}: {v:.2f}%") else: print(f"{k}: {v:,.2f}")
Cara Guna / Tweak
-
win_rate – anggaran kadar menang strategi anda (cth: 0.45 = 45%).
-
rr – reward-to-risk ratio (cth: 2.0 bermaksud anda target 2 kali ganda risiko).
-
risk_per_trade – % risiko setiap trade dari ekuiti semasa (cth: 0.01 = 1%).
-
n_trades – berapa banyak trade yang anda jangka dalam tempoh ujian (cth: 300).
-
ruin_frac – tahap yang anda anggap “hancur/ruin” (cth: 0.5 = jatuh ke 50% modal asal).
Output penting:
-
median_baki_akhir: gambaran “typical” hasil selepas semua simulasi.
-
purata_max_drawdown & p95_max_drawdown: seberapa dalam ekuiti boleh jatuh (purata dan senario buruk 95th percentile).
-
risk_of_ruin_%: kebarangkalian anda tembus paras ruin_frac.
Kesimpulan
Bagi pemula, Monte Carlo mungkin kedengaran teknikal, tetapi konsep asasnya mudah: ia membantu anda memahami risiko sebenar di sebalik strategi trading. Jangan lihat hanya pada backtest curve yang cantik, gunakan Monte Carlo untuk melihat sama ada strategi anda boleh bertahan dalam keadaan pasaran yang tidak menentu. Ini memberikan perspektif yang lebih realistik dan membantu anda membuat keputusan lebih bijak dalam pengurusan modal serta risk exposure.

Mommy Trader. Aset pilihan utama ialah Metal. Ada sistem sendiri; ringkas tapi disiplin. Saya percaya rezeki datang bersama usaha yang jujur Jom kerja keras!