Thực hành

Monte Carlo: kiểm đường vốn, ngưỡng dừng và phân vị

Phân biệt xáo thứ tự với bootstrap; giữ vốn đầu khi đo drawdown. Ví dụ Excel, Python, nhị thức và ngưỡng VND vượt sau một bước.

Hai hoán vị cùng ba kết quả nhưng dừng ở vốn khác nhau theo ngưỡng 850 USD
Mô hình USD hư cấu; hai đường không là xác suất hoặc dữ liệu giao dịch thật.

Giao dịch ngoại hối có đòn bẩy và CFD có thể gây thua lỗ nhanh chóng. Nội dung phục vụ học tập, không phải tư vấn đầu tư cá nhân.

Trong bài viết này

Sau khi đọc bài này…

  • Tách danh sách được lấy mẫu khỏi kết quả được thực hiện trước khi dừng.
  • Tính drawdown từ cả vốn đầu và phân biệt phân vị vốn cuối với đuôi drawdown.
  • Kiểm mô hình Excel/Python bằng đường xác định trước khi lấy nhiều mẫu.

Tra cứu thuật ngữ ngay trong bài

Backtesting (kiểm thử dữ liệu lịch sử) Drawdown (sụt giảm từ đỉnh) Kế hoạch giao dịch Kỳ vọng kết quả (expectancy) Quy mô vị thế

Một lần kiểm thử lịch sử cho một đường vốn đã xảy ra. Mô phỏng tạo các đường theo giả định được nêu rõ; thứ tự kết quả và cách cập nhật khối lượng có thể đổi sụt giảm vốn. Không thể suy xác suất cháy tài khoản thật nếu chưa định nghĩa mô hình, chi phí, ngưỡng thất bại và quy tắc dừng.

Mô phỏng Monte Carlo chiến lược thực sự là gì?

Monte Carlo lặp việc lấy mẫu ngẫu nhiên từ mô hình xác định. Xáo trộn danh sách kết quả tiền cố định đổi đường đi nhưng giữ tổng; lấy mẫu có hoàn lại có thể đổi cả tổng. Mô hình tham số, chẳng hạn các lệnh độc lập với xác suất thắng và số tiền lãi/lỗ giả định, tạo phân phối khác. Luôn nói rõ thủ tục và cách khối lượng cập nhật theo vốn.

Kiểm tay trước: vốn 1000 đơn vị tiền, kết quả +200, −100, −100 tạo đường 1000 → 1200 → 1100 → 1000; sụt giảm tối đa là 200/1200 = 16,67%. Đảo thành −100, −100, +200 cho 1000 → 900 → 800 → 1000, sụt giảm 20%. Cùng vốn cuối nhưng khác drawdown. Phải đưa vốn ban đầu vào tập đỉnh; bỏ nó sẽ đánh giá thấp đường bắt đầu bằng lỗ.

Ngưỡng dừng có thể đổi vốn cuối

Không dừng thì +300 −150 −150 cộng thành 0. Thêm quy tắc: kiểm vốn sau mỗi kết quả, dừng nếu vốn không quá 850 USD. Thứ tự lúc này đổi cả những bước được thực hiện.

Cuộn ngang để xem toàn sơ đồ

Cuộn ngang để xem hết sơ đồ.

Hoán vị với ngưỡng dừng vốnKhởi đầu 1000 USD; dừng sau bước làm vốn không quá 850. A thực hiện +300, −150, −150 và kết thúc 1000. B thực hiện −150 đầu tiên, chạm 850, bỏ qua hai bước còn lại.CÙNG DANH SÁCH, KHÁC VỐN CUỐIA: +300, −150, −150B: −150, −150, +3001 0001 3001 1501 0001 000850Ngưỡng 850Bỏ các bước còn lạiA chạy 3 bước, kết thúc 1000.B chạy 1 bước, kết thúc 850.

Ba kết quả ròng USD hư cấu, không tái đầu tư hoặc dòng tiền. Kiểm ngưỡng sau toàn bộ bước. Ngưỡng 850 chỉ là quy tắc bài tập, không khuyến nghị tài chính. Hai đường không mô tả xác suất. Python — random.shuffle mô tả xáo trộn chuỗi; điều kiện dừng là quy tắc riêng của ví dụ.

Các chấm là bước đã thực hiện. Đường xám của B đánh dấu lượt đã kết thúc, không là hai giao dịch có kết quả 0.

Danh sách được rút ra khác danh sách thực sự chạy. Mô hình có ngưỡng dừng, hạn chế vốn hoặc đổi khối lượng không được tái tạo bằng cách cộng hết mọi kết quả đã xáo.

Monte Carlo trả lời câu hỏi nào?

Mô hình xác định có thể ước tính sụt giảm tối đa, số lượt chạm ngưỡng và vốn cuối. Trước hết tính sụt giảm tối đa riêng từng đường, rồi lấy phân vị của các giá trị đó. Dải phân vị vốn tại từng thời điểm không phải một đường được thực hiện. Nêu quy ước phân vị: nội suy và phân phối rời rạc có thể làm tỷ lệ mẫu nằm dưới mốc khác mức phần trăm ghi trên nhãn. Không mốc nào là giới hạn lỗ tương lai được bảo đảm.

Ví dụ tham số hư cấu: 200 lệnh độc lập, xác suất thắng 0,55, lãi ròng cố định 100 EUR, lỗ ròng 80 EUR. Kỳ vọng mỗi lệnh là 0,55×100 − 0,45×80 = 19 EUR; cả 200 lệnh là 3800 EUR. Gọi K là số lệnh thắng, lợi nhuận cuối bằng 180K − 16000 EUR. Với phân phối nhị thức chính xác và quy ước chọn K nhỏ nhất có xác suất tích lũy ít nhất bằng mức đích: phân vị 1% là 920 EUR, 5% là 1640, 50% là 3800, 95% là 5960. Đây là giá trị tính từ phân phối đã định nghĩa, không thống kê một cuộc chạy được quan sát. Mô phỏng hữu hạn dao động quanh mô hình này; 200 lệnh không tự có nghĩa một năm.

Thực hiện trong Excel

Dùng cú pháp Excel tiếng Anh cho bài tập: A1 = 0.55, A2 = 100, A3 = −80, A4 = 10000. Đây là xác suất giả định, hai kết quả tiền ròng và vốn đầu. C1 ghi =$A$4, D1 ghi =C1, E1 ghi 0; hàng 1 là trạng thái trước lệnh đầu.

B2 =IF(RAND()<$A$1,$A$2,$A$3)
C2 =C1+B2
D2 =MAX(D1,C2)
E2 =(D2-C2)/D2

Sao chép B2:E2 đến hàng 201 cho đúng 200 lệnh; tham chiếu tuyệt đối giữ nguyên tham số. C201 là vốn cuối, =MAX(E1:E201) là sụt giảm tối đa của đường. Mô hình tiền cố định này còn cần quy tắc dừng giao dịch, ký quỹ và mất khả năng thanh toán trước khi dùng thực tế.

Muốn đường khác, sao chép cả khối B:E kèm hàng khởi đầu, vẫn giữ tham chiếu $A$. Qua số đường đã chọn, tách phân vị vốn cuối khỏi phân vị sụt giảm tối đa từng đường. =PERCENTILE.INC(range,0.95) lấy đuôi cao khi drawdown được ghi dương; đuôi thấp của vốn cuối dùng 0.05 hoặc 0.01. Hàm có thể nội suy. RAND đổi khi bảng tính lại, nên lưu các giá trị đã lấy mẫu và giả định để tái kiểm đúng thí nghiệm. Thiết lập ngôn ngữ của Excel có thể đổi dấu phân cách hoặc tên hàm; ví dụ không phải tệp sẵn chạy mọi cấu hình Việt Nam.

Python và bootstrap

Python thuận tiện để lấy mẫu nhiều lần; Excel cũng có thể lấy mẫu giá trị lịch sử nếu dùng công thức thích hợp. Bootstrap lấy từ các kết quả đã ghi thay vì chỉ hai mức lãi/lỗ giả định. Công cụ nào cũng phải nêu dữ liệu, chi phí, phụ thuộc thời gian và quy tắc khối lượng.

Với history là danh sách không rỗng gồm kết quả tiền ròng, dùng Generator đã khởi tạo và lấy new_sequence = rng.choice(history,size=200,replace=True). Đưa vốn đầu vào: equity = np.concatenate(([initial_capital], initial_capital + np.cumsum(new_sequence))). Tính đỉnh chạy và drawdown từng đường rồi mới tóm tắt các cực đại. Lưu dữ liệu, seed, phiên bản thư viện, số lệnh, phí và quy tắc dừng. Tăng số đường giảm nhiễu tính toán, không tạo thêm quan sát về thị trường.

Để so hai giả định có kiểm soát, có thể dùng cùng biến đều U: kết quả +1 nếu U dưới ngưỡng, ngược lại −1. Ngưỡng A = 0,55 và B = 0,60 là hư cấu. Kỳ vọng tương ứng 0,10 và 0,20, chênh B−A là 0,10. Dùng chung U, chênh bằng +2 chỉ trong 0,55 ≤ U < 0,60, còn lại 0; phương sai chênh là 4×0,05 − 0,10² = 0,19. Nếu rút độc lập, cộng phương sai 0,99 + 0,96 = 1,95. Cách ghép giảm nhiễu phép so này, không chứng minh xác suất thị trường hoặc luôn có lợi với mọi chiến lược.

Lấy từng lệnh lịch sử có hoàn lại giữ những giá trị quan sát nhưng phá thứ tự gốc; không giữ cụm thua hoặc sinh ra cú sốc chưa có trong mẫu. Nếu phụ thuộc quan trọng, cân nhắc lấy mẫu theo khối và kịch bản stress riêng, vẫn thừa nhận lịch sử ngắn có thể thiếu chế độ thị trường mới. Kết quả tiền cố định và rủi ro tính lại trên equity biến động là hai thí nghiệm khác nhau.

Ngưỡng VND: điều kiện kiểm trước hay sau bước?

Ca VND riêng, hoàn toàn hư cấu: vốn đầu 25000000 VND, ngưỡng dừng 21000000; danh sách ròng −3000000, −3000000, +6000000. Quy tắc là kiểm sau từng bước, không có nạp/rút hoặc chi phí ngoài kết quả ròng. Bước đầu còn 22000000, chưa dừng. Bước hai còn 19000000, dừng; bỏ kết quả +6000000. Vốn không dừng chính xác ở 21000000: bước rời rạc đã vượt ngưỡng 2000000.

Vượt ngưỡng trong một bước vẫn phải ghi vốn thậtCa VND hư cấu, kiểm sau từng bước ròng, không nạp/rút. Ngưỡng 21 triệu không bảo đảm vốn dừng đúng đó.PHÉP TÍNH GIẢ ĐỊNHĐầu lượt → bước 125 → 22 triệu VNDBước 222 → 19 triệu VNDKết quả +6 triệu còn trong danhsáchKhông được thực hiện
Vượt ngưỡng trong một bước vẫn phải ghi vốn thật. Ca VND hư cấu, kiểm sau từng bước ròng, không nạp/rút. Ngưỡng 21 triệu không bảo đảm vốn dừng đúng đó.

Ghi quy tắc kiểm trước/sau và vốn sau bước. Đổi thứ tự +6,−3,−3 triệu cho 25→31→28→25, không chạm ngưỡng; không được ép vốn 19 thành 21.

Trên màn hình nhỏ, bạn có thể cuộn ngang hoặc phóng to sơ đồ. Các giá trị và kết luận cũng có ở phần văn bản bên dưới.

Đầu lượt → bước 1
25 → 22 triệu VND – Còn trên 21 triệu, tiếp tục
Bước 2
22 → 19 triệu VND – Dừng, vượt ngưỡng 2 triệu
Kết quả +6 triệu còn trong danh sách
Không được thực hiện – Không phục hồi lượt đã kết thúc

Nếu đổi thứ tự thành +6000000, −3000000, −3000000, đường là 25 → 31 → 28 → 25 triệu; không chạm ngưỡng và hoàn tất. Không được gắn 6 triệu cuối vào lượt đã dừng, hoặc ép vốn 19 triệu thành 21 triệu như có cơ chế bảo đảm. Cần ghi riêng mức kiểm, thời điểm kiểm và vốn thực sau bước. Đây không mô hình stop-out của một broker, không tỷ giá đổi từ ví dụ USD và không xác suất cháy tài khoản.

Giới hạn trung thực của mô phỏng

Ví dụ xác suất cố định giả định phân phối ổn định và lệnh độc lập. Bản thân Monte Carlo không bắt buộc hai giả định ấy; có thể mô hình hóa phụ thuộc và đổi chế độ, nhưng phải xây và kiểm mô hình đó. So hành vi mô hình với dữ liệu ghi lại và stress các điều kiện hợp lý ngoài mẫu.

Lấy lại từ lịch sử không phát hiện sự kiện vắng mặt. Xem xét phụ thuộc, phơi nhiễm chồng nhau, phạm vi thị trường và các kịch bản stress riêng. Phân tích walk-forward tổ chức các giai đoạn phát triển/đánh giá nối tiếp; không tự phát hiện lợi thế suy giảm hoặc biến dữ liệu đã xem thành mẫu mới chưa biết.

Phân vị mô phỏng không là sàn hay trần xác suất đã chứng minh cho drawdown thật. Chọn ngưỡng thất bại trước nghiên cứu, kiểm riêng chi phí, thiếu khớp, gap và quy tắc dừng. Mô hình lý tưởng mỗi lỗ đúng 5% vốn hiện tại có vốn sau n lỗ = vốn đầu × 0,95n, vẫn dương với n hữu hạn. Ngưỡng vận hành, ký quỹ tối thiểu hoặc lỗ lớn hơn làm mô hình khác đi. Đọc cách đo sụt giảm trước diễn giải giới hạn. Bài tập mô phỏng không xác nhận quyền dùng sản phẩm hoặc pháp nhân môi giới tại Việt Nam.

Bước tiếp để thực sự áp dụng

  1. Chốt lịch sử: số lệnh, chi phí, mức rủi ro và thị trường đã quan sát. Mẫu nhỏ làm ước tính đuôi bất định, nhưng không có mốc phổ quát 100 lệnh đủ đúng. Thu thập tiếp bằng demo/nghiên cứu lịch sử, không giao dịch thêm chỉ để đủ số.
  2. Kiểm hai đường ba lệnh bằng tay trước. Lưu một mẫu ngẫu nhiên cụ thể rồi mới chạy thêm. Một giờ làm hoặc 1000 lượt không chứng minh mô hình phù hợp.
  3. Xem đuôi bất lợi: nếu drawdown là độ lớn dương, dùng phân vị 95%, không 5%; nếu dùng số âm phải nêu quy ước. Tính từ vốn đầu, ghi quy tắc khối lượng. Giảm rủi ro có thể giảm drawdown mô hình nhưng phải chạy lại, không hứa tỷ lệ luôn tương ứng.
  4. So các lịch sử sửa đổi cùng cơ sở: đơn vị, phạm vi dữ liệu, chi phí và quy tắc rủi ro. Median giảm một mình không xác định nguyên nhân lợi thế thật suy giảm.

Kiểm tra mức độ hiểu bài

Bài tập: khoảng 2 phút.

Vốn đầu 1000 USD; kiểm sau mỗi bước và dừng nếu vốn ≤ 850 USD. Danh sách −150, −150, +300: kết quả lượt thực hiện?

Xem đáp án và giải thích

1000 − 150 = 850, thỏa điều kiện dừng ngay sau bước đầu.

Câu hỏi khác

Monte Carlo chiến lược là gì?
Lặp việc lấy mẫu từ mô hình xác định. Xáo danh sách tiền giữ tổng nếu chạy hết; lấy có hoàn lại có thể đổi tổng. Mô hình 200 lệnh độc lập, p=0,55, +100/−80 EUR có kỳ vọng 19 EUR/lệnh và phân vị 5% chính xác 1640 EUR theo quy ước tích lũy đã nêu, không kết quả thị trường quan sát.
Excel cần giữ hàng khởi đầu để làm gì?
Hàng 1 lưu vốn ban đầu và đỉnh ban đầu. Sau đó hàng 2–201 mới là 200 lệnh. Nếu bỏ vốn đầu, một đường bắt đầu bằng lỗ có thể bị đánh giá thấp drawdown. Giữ tham chiếu $A$ và lưu mẫu trước khi RAND tính lại.
Python bootstrap có giữ cụm lỗ không?
Lấy từng lệnh có hoàn lại giữ các giá trị quan sát nhưng phá thứ tự và có thể phá cụm. Không sinh cú sốc chưa có trong mẫu. Chọn phụ thuộc, khối lượng, chi phí và quy tắc dừng rõ ràng; lưu seed/phiên bản và thêm vốn đầu vào đường.
Phân vị 95% là trần lỗ thật?
Không. Nó chỉ tóm tắt phân phối theo mô hình và quy ước phân vị. Drawdown dương dùng đuôi cao 95%; vốn cuối bất lợi thường dùng đuôi thấp. Không gọi phân vị là giới hạn được bảo đảm hoặc sàn rủi ro thực.
Vì sao ngưỡng 21 triệu nhưng còn 19 triệu?
Bài VND kiểm sau từng bước. 25−3=22 triệu còn tiếp tục; 22−3=19 triệu mới dừng. Ngưỡng không cắt kết quả một bước rời rạc. Quy tắc khác hoặc giao dịch thật cần mô hình khác.

Nguồn và kiểm chứng

  1. docs.python.org

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  2. numpy.org

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  3. support.microsoft.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

  4. support.microsoft.com

    Nguồn tham khảo cho nội dung; xem phạm vi và giả định được nêu trong bài.

Các phép tính dùng giả định được nêu rõ. Chúng không thay thế dữ liệu thị trường hiện tại hoặc điều khoản của nhà cung cấp.

Về tác giả

Jarosław Wasiński là biên tập viên và nhà phân tích thị trường tại Ba Lan. Ông sáng lập MyBank.pl năm 2004 và theo dõi thị trường ngoại hối từ năm 2007.