1. Giới thiệu về Mô phỏng Monte Carlo
Mô phỏng Monte Carlo (MC) là kỹ thuật dùng để kiểm tra tính ổn định và khả năng sinh lời thực tế của một hệ thống giao dịch bằng cách tạo ra nhiều chuỗi giao dịch ngẫu nhiên dựa trên kết quả kiểm tra ngược (backtest) ban đầu. Điều này cho phép người dùng đánh giá các rủi ro như xác suất thua lỗ, khả năng phá sản, mức drawdown tối đa trong kịch bản xấu nhất, và phân phối lợi nhuận có thể có.
2. Phương pháp Bootstrap trong MC
AmiBroker sử dụng phương pháp “bootstrap” – một kỹ thuật chọn mẫu ngẫu nhiên với thay thế từ danh sách các giao dịch gốc để tạo các kịch bản giả lập (gọi là “runs”). Ví dụ: nếu hệ thống của bạn có 100 giao dịch trong backtest, thì một lần chạy mô phỏng có thể là danh sách 100 giao dịch ngẫu nhiên từ tập đó, trong đó một giao dịch có thể xuất hiện nhiều lần hoặc không xuất hiện.
3. Các bước thực hiện mô phỏng MC trong AmiBroker
- Tạo đầu vào: Chạy kiểm tra ngược để thu được danh sách các giao dịch gốc.
- Thực hiện mô phỏng (ví dụ 1000 lần):
- Với mỗi lần chạy:
- Chọn ngẫu nhiên N giao dịch từ danh sách gốc (có thể lặp lại).
- Tính vốn chủ sở hữu hệ thống theo trình tự.
- Lưu kết quả vốn chủ sở hữu.
- Hậu xử lý:
- Tổng hợp các vốn chủ sở hữu từ các lần chạy thành biểu đồ phân phối, thống kê CDF, biểu đồ straw broom (đám mây vốn chủ sở hữu), drawdown v.v.
4. Các chế độ mô phỏng trong AmiBroker
Có 2 chế độ mô phỏng chính:
- a) Mô phỏng theo thay đổi vốn chủ sở hữu:
- Lấy thay đổi % vốn chủ sở hữu theo từng thanh làm đơn vị mẫu.
- Phù hợp khi có nhiều giao dịch chồng chéo.
- b) Mô phỏng theo danh sách giao dịch:
- Lấy các giao dịch riêng lẻ làm đơn vị mẫu.
- Phù hợp khi các giao dịch không chồng chéo.
5. Các cài đặt chi tiết trong AmiBroker

Bật mô phỏng Monte Carlo:
- Tùy chọn cho phép bật/tắt mô phỏng MC sau mỗi lần backtest.
Số lần chạy (MC Runs):
- Tối thiểu nên để từ 1000 lần trở lên để có kết quả ổn định.
Quy mô vị thế (Position Size):
- Không thay đổi: Giữ nguyên quy mô giao dịch như khi backtest.
- Giá trị hằng số: Luôn dùng 1 giá trị $ cố định cho mỗi giao dịch.
- Kích thước cố định: Giao dịch số cổ phiếu/hợp đồng cố định.
- Phần trăm vốn chủ sở hữu: Tính toán giao dịch theo % vốn hiện tại.
Các biểu đồ và lựa chọn hiển thị:

- Biểu đồ vốn chủ sở hữu (min/max/avg).
- CDF của Final Equity, CAR, Drawdown, Lowest Equity.
- Chế độ thang tuyến tính/logarit.
- Chọn hiển thị drawdown dưới dạng số âm hay dương.

6. Cách dùng từ cấp mã AFL
Bạn có thể bật/tắt và cấu hình mô phỏng MC từ mã AFL bằng SetOption():
SetOption(“MCEnable”, 1);
SetOption(“MCRuns”, 1000);
SetOption(“MCUseEquityChanges”, 0); // 1: theo % vốn, 0: danh sách giao dịch
SetOption(“MCPosSizeMethod”, 2); // 0: giữ nguyên, 1: giá trị cố định, 2: cổ phiếu cố định, 3: % vốn
SetOption(“MCPosSizeShares”, 100); // nếu là method 2
SetOption(“MCChartEquityCurves”, True);
7. Trích xuất số liệu tùy chỉnh từ MC vào báo cáo backtest
Bạn có thể thêm các số liệu MC vào báo cáo như sau:
SetCustomBacktestProc(“”);
if( Status(“action”) == actionPortfolio )
{
bo = GetBacktesterObject();
bo.Backtest();
mc = bo.GetMonteCarloSim();
if (mc)
{
bo.AddCustomMetric(“FinalEq30”, mc.GetValue(“FinalEquity”, 30));
bo.AddCustomMetric(“CAR30”, mc.GetValue(“CAR”, 30));
}
}
8. Diễn giải kết quả mô phỏng MC
Trong báo cáo MC, bạn sẽ thấy bảng thống kê với các mức phần trăm (1%, 5%, …, 99%). Ví dụ:
- Tại 10%, CAR = -0.41% nghĩa là có 10% khả năng bạn lỗ hoặc hòa vốn.
- Drawdown % tại 90% = 38.48% nghĩa là trong 90% trường hợp, drawdown thấp hơn 38.48%.
Khi bật “Sử dụng số âm cho drawdown”, các giá trị bị đảo ngược (và là số âm), giúp dễ dàng xác định các kịch bản tệ nhất ở đầu bảng.
9. Biểu đồ phân phối
Các biểu đồ CDF cho biết xác suất đạt các mức lợi nhuận, drawdown, vốn chủ sở hữu thấp nhất.
- Càng về bên trái, biểu đồ càng thể hiện rủi ro (vốn thấp, lỗ nhiều).
- Càng về bên phải, thể hiện kết quả tốt (lợi nhuận cao, drawdown thấp).
10. Mô phỏng MC ngẫu nhiên bằng PositionScore
Một dạng thử nghiệm Monte Carlo khác là thay thế PositionScore bằng giá trị ngẫu nhiên để kiểm tra tính ổn định hệ thống:
PositionScore = mtRandom();
Dùng khi hệ thống giao dịch tạo nhiều tín hiệu hơn khả năng thực hiện.
Lưu ý: Không nên sử dụng MC trong tối ưu hóa trừ khi bạn thực sự tối ưu theo số liệu MC. Việc này tiêu tốn tài nguyên và thời gian đáng kể.