Bài 10: Monte Carlo Simulation: Công cụ định giá sản phẩm phái sinh phức tạp

Từ câu hỏi phỏng vấn tính số Pi, khám phá lý thuyết Monte Carlo và tại sao đây là phương pháp số không thể thiếu khi định giá các sản phẩm phái sinh phức tạp.

Trong các bài viết trước, chúng ta đã đi sâu vào cây nhị phân , một công cụ đơn giản, nhưng hiệu quả và rất trực quan trong định giá quyền chọn. Nhưng thị trường tài chính không dừng lại ở những sản phẩm có thể tóm gọn trong một cái cây.

Hãy thử nghĩ về một quyền chọn mà payoff của nó phụ thuộc vào giá trung bình của cổ phiếu trong suốt kỳ hạn. Hay một quyền chọn chỉ có giá trị nếu giá cổ phiếu chưa từng chạm một ngưỡng nào đó trong toàn bộ thời gian của hợp đồng. Cây nhị phân, dù được cải tiến đến đâu, cũng có giới hạn trước những bài toán như vậy.

Đây là lúc phương pháp Monte Carlo xuất hiện. Cùng với cây nhị phân (Binomial Tree) và phương pháp sai phân hữu hạn (Finite Difference Method), Monte Carlo tạo nên bộ ba phương pháp số không thể thiếu của Quant Finance hiện đại.

Bài viết sẽ đi qua ba phần chính: bắt đầu bằng một câu hỏi phỏng vấn kinh điển để hiểu trực giác của Monte Carlo; sau đó tìm hiểu về nền tảng lý thuyết; và cuối cùng là cách áp dụng Monte Carlo trong định giá quyền chọn.

Trong bài viết này:

1. Bài toán tính Pi

Hãy để tôi bắt đầu bằng một câu hỏi trong buổi phỏng vấn Quant.

💬 Quant Interview Question 1: Hãy viết một thuật toán để ước lượng giá trị của số $\pi \approx 3.14159…$?

Đây là một trong những câu hỏi phỏng vấn kinh điển để kiểm tra tư duy Monte Carlo. Nó thực ra là câu hỏi về phương pháp số và có thể thực thi bằng code trong vài phút.

Hãy suy nghĩ 5 phút trước khi xem câu trả lời!

🗨️ Answer: Hãy tưởng tượng ta có một hình vuông cạnh $2r$, và bên trong đó có một đường tròn bán kính $r$ nội tiếp hình vuông.

Toàn bộ logic dựa trên một quan hệ tỉ lệ rất đơn giản. Nếu ta lấy ngẫu nhiên $n$ điểm trong hình vuông (*phân phối đều*), số điểm rơi vào trong hình tròn, ký hiệu $m$ điểm, sẽ tỷ lệ thuận với diện tích của nó: $$\frac{m}{n} \approx \frac{\text{Area of Circle}}{\text{Area of Square}} = \frac{\pi r^2}{4 r^2} = \frac{\pi}{4}$$ Theo Luật số lớn (Law of Large Numbers), tần suất quan sát được $m/n$ sẽ hội tụ về xác suất lý thuyết $\pi/4$ khi $n$ tiến tới vô cùng. Đảo chiều tỉ lệ, ta có thể ước lượng được $\pi$. $$\pi \approx \frac{4m}{n}$$ Điều kiện để một điểm rơi vào trong hình tròn (giả sử tâm tại gốc tọa độ) dựa trên phương trình đường tròn: $$x^2 + y^2 \leq r^2$$ Từ đây ta có thể dễ dàng viết được thuật toán tính $\pi$ như sau:

Thuật toán trong Python:
import numpy as np

n = 1000000  # Nb of simulations
x = np.random.uniform(-1, 1, N)
y = np.random.uniform(-1, 1, N)
m = np.sum(x**2 + y**2 <= 1)
pi_estimate = 4 * m / n
print(f"Pi ≈ {pi_estimate:.5f}")  

# Result: Pi ≈ 3.14159...

Bài toán tính $\pi$ này thể hiện triết lý của Monte Carlo: khi bài toán quá khó để dùng giải tích, hãy dùng sự ngẫu nhiên để xấp xỉ. Để tính $\pi$ ta bắt buộc phải tính diện tích hình tròn, nhưng thay vì tính bằng công thức $\pi r^2$, ta thống kê xem bao nhiêu phần trăm điểm ngẫu nhiên rơi vào đó.

Một điểm quan trọng cần lưu ý ở đây là: số điểm ngẫu nhiên càng nhiều, ước lượng càng chính xác. Ta cần biết công thức $\pi r^2$ để suy ngược ra $\pi$, và điều kiện để kiểm tra một điểm có trong hình tròn hay không ($x^2 + y^2 \leq r^2$).


Mô phỏng thuật toán tính Pi bằng Monte Carlo Mô phỏng thuật toán tính Pi bằng Monte Carlo
Hình 2: Mô phỏng thuật toán tính Pi bằng Monte Carlo.

Bây giờ hãy thay điểm chọn ngẫu nhiên bằng các đường đi ngẫu nhiên của giá tài sản, và thay vì đếm điểm rơi vào trong hình tròn bằng tính giá trị trung bình. Ta sẽ có phương pháp Monte Carlo simulation trong định giá quyền chọn.

2. Nền tảng lý thuyết của Monte Carlo

Monte Carlo simulation là một phương pháp lấy mẫu ngẫu nhiên lặp đi lặp lại để ước lượng kết quả của một hệ thống có nhiều yếu tố bất định. Nó rất hữu ích khi bài toán quá phức tạp để giải chính xác bằng công thức đóng, nhưng lại có thể mô phỏng bằng máy tính.

Mặc dù tên gọi được lấy cảm hứng từ sòng bạc nổi tiếng Monte Carlo tại Monaco, nhưng phương pháp này không liên quan gì tới những con bạc chuyên nghiệp. Nó được phát triển bởi các nhà vật lý hạt nhân trong dự án Manhattan vào những năm 1940 [1].

Trong lĩnh vực tài chính, phương pháp này chính thức được giới thiệu bởi Phelim P. Boyle vào năm 1977. Boyle đã chứng minh rằng cách tiếp cận số học này có thể sử dụng khi các công thức đóng như Black-Scholes không có sẵn hoặc quá phức tạp để thiết lập [2][3].

Để hiểu tại sao Monte Carlo hoạt động, chúng ta cần dừng lại ở một vài kết quả toán học nền tảng. Đây không phải những thứ xa lạ mà bạn đã gặp trong xác suất thống kê cơ bản, nhưng nhìn lại chúng dưới góc nhìn của Quant sẽ rất thú vị.

2.1. Law of Large Numbers: Tại sao lặp đi lặp lại lại cho kết quả đúng?

Nền tảng đầu tiên là Luật số lớn (Law of Large Numbers). Luật số lớn phát biểu rằng: Khi số lượng mẫu thử nghiệm của một biến ngẫu nhiên độc lập có cùng phân phối (independent and identically distributed, i.i.d.) tăng lên, thì giá trị trung bình mẫu sẽ hội tụ về giá trị kỳ vọng toán học thực sự của tổng thể đó [2].

Một ví dụ trực quan, nếu bạn lặp lại việc tung một con xúc xắc 6 mặt đủ nhiều, giá trị trung bình của các kết quả sẽ hội tụ về giá trị kỳ vọng thực sự là 3.5.

Cho $X_1, X_2, \ldots, X_n$ là các biến ngẫu nhiên độc lập có cùng phân phối với kỳ vọng $\mathbb{E}[X] = \mu$:

\[\overline{X}_n = \frac{1}{n} \sum_{i=1}^{n} X_i \xrightarrow{n \to \infty} \mu \tag{10.1}\]

Áp dụng vào bài toán tính $\pi$, mỗi điểm ngẫu nhiên là một $X_i$ nhận hai giá trị 1 (rơi vào hình tròn) hoặc 0 (không rơi vào). Kỳ vọng được ước tính bằng $\mathbb{E}[X_i] = \pi/4$. Luật số lớn đảm bảo rằng tỷ lệ $M/N$ sẽ hội tụ về $\pi/4$ khi $n$ tiến tới vô cùng.

Áp dụng vào định giá quyền chọn, mỗi kịch bản mô phỏng giá tài sản sẽ cho ra một payoff $f_i$. Luật số lớn đảm bảo rằng:

\[\frac{1}{n} \sum_{i=1}^{n} f_i \xrightarrow{n \to \infty} \mathbb{E}[f] \tag{10.2}\]

Và giá quyền chọn chính là kỳ vọng payoff đó được chiết khấu:

\[\hat{V}= e^{-rT} \frac{1}{n} \sum_{i=1}^{n} f_i \tag{10.3}\]

Hình 2 dưới đây miêu tả Luật số lớn một cách trực quan. Ở phía bên trái của biểu đồ, khi số lần thử nghiệm còn ít, các đường xanh dao động rất mạnh và tách xa nhau. Bởi lúc này tung được vài mặt 6 liên tiếp hoặc vài mặt 1 liên tiếp sẽ ảnh hưởng rất lớn đến giá trị trung bình. Ở phía bên phải, tất cả các đường, dù bắt đầu khác nhau, đều bắt đầu hội tụ và bám sát lấy đường đứt nét màu đỏ. Luật số lớn khẳng định rằng: nếu thực hiện thí nghiệm đủ nhiều lần, kết quả trung bình nhận được chắc chắn sẽ hội tụ về giá trị kỳ vọng.


Kiểm chứng thực nghiệm Luật số lớn với xúc xắc
Hình 2: Kiểm chứng thực nghiệm Luật số lớn với xúc xắc.

2.2. Central Limit Theorem: Sai số và tốc độ hội tụ của Monte Carlo

Luật số lớn cho biết Monte Carlo sẽ cho kết quả đúng khi $n$ tiến tới vô cùng, nhưng với $n$ hữu hạn, sai số là bao nhiêu? Câu trả lời đến từ Định lý giới hạn trung tâm (Central Limit Theorem).

Định lý giới hạn trung tâm phát biểu rằng: Cho $X_1, X_2, \ldots, X_n$ là các biến ngẫu nhiên độc lập có cùng phân phối (i.i.d.) với kỳ vọng hữu hạn $\mu$ và phương sai hữu hạn khác không $\sigma$. Cho $\overline{X}_n$ là giá trị trung bình của các biến ngẫu nhiên đó, \(\overline{X}_n = \frac{1}{n} \sum_{i=1}^{n} X_i\). Khi đó,

\[\frac{\overline{X}_n - \mu}{\sigma / \sqrt{n}} \xrightarrow{d} \mathcal{N}(0, 1) \tag{10.4}\]

Trong đó $\xrightarrow{d}$ ký hiệu cho sự hội tụ theo phân phối và $N(0,1)$ là phân phối chuẩn tắc với kỳ vọng bằng 0 và phương sai bằng 1 [2].

Hay nói cách khác, sai số chuẩn $SE$ (standard error) của ước lượng Monte Carlo là:

\[SE = \frac{\sigma}{\sqrt{n}} \tag{10.5}\]

Công thức (10.5) cho hai kết luận quan trọng sau:

  • Sai số giảm khi $n$ tăng, và ta biết chính xác sai số là bao nhiêu.
  • Để giảm sai số đi một nửa, cần tăng $n$ lên 4 lần (vì căn bậc hai). So sánh với cây nhị phân cần tăng $n$ gấp đôi để giảm sai số một nửa, Monte Carlo hội tụ chậm hơn đáng kể.

Điểm thú vị của định lý này là kết quả hội tụ về phân phối chuẩn xảy ra bất kể hình dạng của phân phối ban đầu là gì, miễn là nó có phương sai hữu hạn. Điều này giải thích tại sao phân phối chuẩn lại xuất hiện phổ biến như vậy trong các hiện tượng thống kê thực tế.

Điều kiện cần là các biến ngẫu nhiên phải độc lập có cùng phân phối, và cả kỳ vọng lẫn phương sai của chúng đều phải là các số hữu hạn. Nếu phương sai không hữu hạn, tổng của chúng có thể hội tụ về các phân phối khác gọi là phân phối Lévy [4].

Ta có thể kiểm chứng bằng một thí nghiệm đơn giản như sau: tung $n$ con xúc xắc và tính giá trị trung bình của chúng. Hình 3 khẳng định kết luận ở trên khi số lượng xúc xắc ($n$) tăng dần.


Kiểm chứng thực nghiệm Định lý giới hạn trung tâm với xúc xắc
Hình 3: Kiểm chứng thực nghiệm Định lý giới hạn trung tâm với xúc xắc.

Cột màu xanh là giá trị trung bình thực tế khi ta tung $n$ con xúc xắc nhiều lần, đường màu đỏ là mục tiêu lý thuyết mà Định lý giới hạn trung tâm dự đoán dữ liệu sẽ khớp vào. Ta thấy:

  • $n=1$: Phân phối gốc là phân phối đều (uniform distribution) vì xác suất mỗi mặt là như nhau. Đường màu đỏ lúc này sai lệch rất nhiều so với cột xanh.
  • $n=2 \rightarrow 16$: Các cột màu xanh bắt đầu cao lên ở giữa và thấp ở hai đầu, tạo ra hình dáng sơ khai của hình chuông.
  • $n=32$: Cột xanh khớp gần như tuyệt đối với đường đỏ. Điều này minh chứng cho việc dù bắt đầu từ phân phối đều, kết quả trung bình vẫn luôn về phân phối chuẩn.

Lưu ý cần phân biệt giữa Luật số lớn – nói về việc GIÁ TRỊ trung bình sẽ đi về đâu (hội tụ về giá trị kỳ vọng), và Định lý giới hạn trung tâm – nói về việc HÌNH DẠNG của sự phân bố các giá trị đó trông như thế nào (hội tụ về phân phối chuẩn).

3. Monte Carlo trong định giá quyền chọn

3.1. Nguyên lý trung hòa rủi ro

Trong Bài 6. Binomial Model, chúng ta đã làm quen với thế giới trung hòa rủi ro qua cây nhị phân, nơi giá quyền chọn là kỳ vọng của payoff, với trọng số xác suất trung hòa rủi ro $q$, và được chiết khấu về hiện tại. Trong bài này, ta cần áp dụng nguyên lý đó cho Monte Carlo, nơi giá tài sản vận động liên tục theo Geometric Brownian Motion (GBM).

Trong thế giới liên tục, giá quyền chọn có thể biểu diễn như sau:

\[V = e^{-rT} \mathbb{E}^{\mathbb{Q}}[f(S_T)] \tag{10.6}\]

Trong đó $\mathbb{E}^{\mathbb{Q}}$ là kỳ vọng dưới thước đo trung hòa rủi ro (risk-neutral measure) $\mathbb{Q}$ – phiên bản liên tục của xác suất $q$ trong cây nhị phân. Còn $f(S_T)$ là hàm payoff của quyền chọn.

3.2. Xấp xỉ kỳ vọng bằng Monte Carlo

Ở mức độ trừu tượng nhất có thể coi Monte Carlo là một phương pháp ước lượng kỳ vọng. Bất kỳ giá trị kỳ vọng nào cũng có thể viết dưới dạng tích phân:

\[\mathbb{E}[f(X)] = \int_{-\infty}^{+\infty} f(x) p(x)\, dx \tag{10.7}\]

Với $p(x)$ là hàm mật độ xác suất (probability density function, PDF) của $X$. Khi tích phân này không có nghiệm giải tích, Monte Carlo có thể xấp xỉ bằng:

\[\mathbb{E}[f(X)] \approx \frac{1}{n} \sum_{i=1}^{n} f(x_i), \quad x_i \sim p(x) \tag{10.8}\]

Hay nói cách khác, ta lấy mẫu ngẫu nhiên từ phân phối $p(x)$, tính $f$ tại mỗi mẫu, rồi lấy trung bình để tính ra kỳ vọng. Ý tưởng đơn giản đến mức ngạc nhiên, nhưng lại cực kỳ mạnh mẽ.

Quay lại bài toán tính $\pi$, nếu ta đặt vấn đề dưới góc nhìn toán học. Hàm chỉ số điểm rơi vào trong hình tròn có dạng $f(x, y) = \mathbf{1}_{x^2 + y^2 \leq 1}$, với $p(x,y)$ là hàm mật độ xác suất của phân phối đều trong khoảng $[-1,1]^2$. Kỳ vọng của $f(x,y)$ chính là $\pi/4$.

3.3. Từ thế giới thực ($\mathbb{P}$) sang thế giới trung hòa rủi ro ($\mathbb{Q}$)

Như trong Bài 4. Brownian Motion, giá tài sản được giả định tuân theo mô hình GBM, với phương trình vi phân ngẫu nhiên mô tả sự vận động như sau:

\[dS_t = \mu S_t \, dt + \sigma S_t \, dW_t \tag{10.9}\]

Trong đó $\mu$ là lợi tức kỳ vọng (expected return) của tài sản. Đây là phương trình mô tả giá tài sản dưới thước đo thực (real-world measure) $\mathbb{P}$.

Nếu dùng công thức này để định giá quyền chọn bằng Monte Carlo, ta sẽ gặp một vấn đề lớn vì mỗi người sẽ đưa ra một con số $\mu$ khác nhau. Người lạc quan cho rằng $\mu = 15\%$, người bi quan cho rằng $\mu = 5\%$. Kết quả là mỗi người sẽ tính ra một giá quyền chọn khác nhau phụ thuộc vào khẩu vị rủi ro cá nhân. Vậy giá nào mới hợp lý?

Lưu ý rằng, nguyên lý cốt lõi của định giá quyền chọn không phải là dự báo tương lai, mà là phòng vệ rủi ro. Như đã chứng minh qua danh mục mô phỏng trong Bài 6. Binomial Model, giá quyền chọn không phụ thuộc vào $\mu$ vì mọi rủi ro đã được triệt tiêu hoàn toàn bởi chiến lược phòng vệ. Hai nhà đầu tư dù bất đồng về $\mu$ vẫn có thể thống nhất một mức giá quyền chọn, miễn là họ đồng ý về $\sigma$. Điều này cho phép ta hoàn toàn bỏ $\mu$ đi và thay bằng $r$. Việc chuyển sang thế giới trung hòa rủi ro là một mẹo toán học giúp việc tính toán trở nên tiện lợi hơn [6].

3.4. Định lý Girsanov

Cơ sở toán học cho việc chuyển đổi này là Định lý Girsanov (Girsanov’s theorem) [6]. Định lý này phát biểu rằng tồn tại một thước đo xác suất $\mathbb{Q}$, gọi là thước đo trung hòa rủi ro, mà trong đó, đường đi của giá tài sản vẫn là GBM, ta chỉ cần đổi $\mu \to r$ và đổi $dW_t \to dW_t^{\mathbb{Q}}$:

\[\underbrace{dS_t = \color{red}{\mu} S_t \, dt + \sigma S_t \, \color{red}{dW_t}}_{\text{real-world measure } \mathbb{P}} \quad \xrightarrow{\text{Girsanov}} \quad \underbrace{dS_t = \color{red}{r} S_t \, dt + \sigma S_t \, \color{red}{dW_t^{\mathbb{Q}}}}_{\text{risk-neutral measure } \mathbb{Q}} \tag{10.10}\]

Có hai điểm cần lưu ý ở đây. Thứ nhất, $\sigma$ không đổi vì độ biến động là thuộc tính vật lý của tài sản, không phụ thuộc vào thước đo. Thứ hai, $dW_t^{\mathbb{Q}}$ vẫn là Wiener Process với phân phối xác suất $\mathcal{N}(0, dt)$, giống hệt $dW_t$ về mặt toán học, nhưng nó ở trong một thế giới giả định khác, nơi mọi tài sản đều tăng trưởng với tốc độ $r$ thay vì $\mu$.

3.5. Nghiệm của GBM trong thế giới trung hòa rủi ro

Do chưa học tới giải tích ngẫu nhiên (Stochastic Calculus), bạn đọc học tạm chấp nhận lời giải sau. Áp dụng Itô’s Lemma cho phương trình (10.9), nhưng thay $\mu$ bằng $r$, ta có:

\[S_T = S_0 \exp\!\left[\left(\color{red}{r} - \frac{\sigma^2}{2}\right)T + \sigma \color{red}{W_T^{\mathbb{Q}}} \right] \tag{10.11}\]

So sánh với công thức gốc ở bài trước $S_T = S_0 \exp\left[\left(\color{red}{\mu }- \frac{\sigma^2}{2}\right)T + \sigma \color{red}{W_T} \right]$, cấu trúc toán học hoàn toàn giống nhau, sự khác biệt duy nhất là $\mu \to r$ và $W_T \to W_T^{\mathbb{Q}}$.

Vì $W_T^{\mathbb{Q}} \sim \mathcal{N}(0, T)$ dưới thước đo $\mathbb{Q}$, ta viết $W_T^{\mathbb{Q}} = \sqrt{T}\, Z$ với $Z \sim \mathcal{N}(0,1)$. Như vậy, mô phỏng một kịch bản giá trong thế giới trung hòa rủi ro đơn giản là:

  • Lấy mẫu ngẫu nhiên $Z \sim \mathcal{N}(0,1)$
  • Tính $S_T^{(i)} = S_0 \exp\left[\left(r - \frac{\sigma^2}{2}\right)T + \sigma\sqrt{T}\, Z_i\right]$
  • Tính payoff $f_i = \max(S_T^{(i)} - K, 0)$ (với quyền chọn mua)

Lặp lại $n$ lần, lấy trung bình và chiết khấu về hiện tại:

\[\hat{V} = e^{-rT} \frac{1}{n} \sum_{i=1}^{n} f_i \tag{10.12}\]

Tại sao lại dùng $e^{-rT}$? Vì trong thế giới trung hòa rủi ro, mọi thứ đều sinh lời với tỷ suất $r$, nên để đưa giá trị tương lai về hiện tại, chúng ta chiết khấu đúng bằng lãi suất $r$.

Để mô phỏng đường đi đầy đủ (cần thiết cho Path-dependent Option), ta rời rạc hóa khoảng thời gian $[0, T]$ thành $m$ bước nhỏ với $\delta t = T/m$. Áp dụng (10.11) cho mỗi bước nhỏ, ta có:

\[S_{t + \delta t} = S_t \exp\!\left[\left(r - \frac{\sigma^2}{2}\right)\delta t + \sigma\sqrt{\delta t}\, Z_j\right], \quad Z_j \sim \mathcal{N}(0,1) \tag{10.13}\]

Đây chính là công thức được sử dụng trong Bài 5. GBM Application nhưng với hai điểm khác biệt quan trọng: $\mu$ đã được thay bằng $r$, và mô phỏng dưới thước đo $\mathbb{Q}$ chứ không phải $\mathbb{P}$. Mục đích cũng hoàn toàn khác nhau, ở Bài 5 ta mô phỏng để dự báo đường đi của giá trong tương lai để quản trị rủi ro, còn ở đây ta mô phỏng để định giá quyền chọn thông qua kỳ vọng của payoff.

4. Tại sao Monte Carlo lại quan trọng?

Trong các bài trước, chúng ta đã làm quen với việc định giá quyền chọn qua mô hình cây nhị phân, một phương pháp số đơn giản nhưng hiệu quả đáng kinh ngạc. Vậy tại sao cần Monte Carlo?

Câu trả lời là cây nhị phân không đủ. Ngoài các quyền chọn như European Optionpayoff chỉ phụ thuộc vào giá tài sản tại ngày đáo hạn, American/Bermudan Option – phức tạp hơn nhưng vẫn có thể xử lý bằng cây nhị phân, thị trường tài chính hiện đại còn vận hành với hàng loạt các quyền chọn phụ thuộc đường đi (Path-dependent Option) cũng như các quyền chọn ngoại lai (Exotic Option). Những sản phẩm này phức tạp hơn nhiều, có điều kiện đặc biệt, nhiều tài sản liên quan, hoặc cơ chế thanh toán phi tuyến tính.

4.1. Vấn đề bùng nổ tổ hợp của cây nhị phân

Hãy cùng suy nghĩ về một Lookback Option với payoff \(f = S_T - \min_{0 \le t \le T} S_t\), tức là hiệu số giữa giá cuối cùng và giá thấp nhất trong quá khứ. Để định giá loại quyền chọn này, ta không chỉ cần biết giá cổ phiếu tại thời điểm đó, $S_t$, mà còn cần biết giá thấp nhất đã từng đạt được dọc theo đường đi đến giá đó $\min_{0 \le t \le T} S_t$.

Trong cây nhị phân tái hợp (recombining tree), hai đường đi khác nhau có thể kết thúc tại cùng một nút. Tính chất này khiến cho các nhánh của cây nhập lại với nhau tại các nút giữa, giúp cho tổng số nút của cây chỉ tăng theo hàm bậc hai $\mathcal{O}(n^2)$ thay vì hàm mũ $\mathcal{O}(2^n)$. Tuy nhiên, việc các nút bị nhập lại khiến thông tin về lịch sử giá bị ghi đè lên nhau.

Để định giá Path-dependent Option, ta cần biết toàn bộ lịch sử của đường đi, không chỉ điểm cuối. Tại cùng một nút, các đường đi khác nhau cho giá thấp nhất khác nhau, dẫn đến payoff khác nhau. Do đó ta cần một cây không tái hợp hoặc lịch sử ở mỗi nút phải được lưu trữ. Điều này khiến việc xây dựng cây trở nên phức tạp, cũng như không khả thi về mặt hiệu năng.

4.2. Ưu điểm của Monte Carlo

Với bài toán định giá Lookback Option, Monte Carlo giải quyết một cách rất tự nhiên. Thay vì cố gắng xây dựng một mạng lưới các nút phức tạp, Monte Carlo tiếp cận theo hướng trực diện:

  • Mô phỏng từng đường đi của giá tài sản từ $t=0$ đến $T$.
  • Với mỗi đường đi, ta dễ dàng ghi lại giá thấp nhất ($\min_{0 \le t \le T} S_t$) đã đi qua.
  • Tính payoff cho từng đường đi đó và lấy trung bình.

Dù quyền chọn có phức tạp đến đâu, chúng ta chỉ cần định nghĩa quy tắc tính payoff, Monte Carlo sẽ làm nốt phần việc còn lại: mô phỏng hàng nghìn kịch bản đường đi có thể xảy ra, và lấy trung bình để cho ra mức giá công bằng nhất.

Để hiểu sâu hơn tại sao Monte Carlo được coi là công cụ ưu việt trong việc giải quyết các bài toán phức tạp, ta cần xem xét ba lợi thế sau đây so với các phương pháp truyền thống:

  • Tính đa chiều cao (High Dimensionality): Monte Carlo thường là phương pháp khả thi duy nhất cho các vấn đề đa chiều, nơi giá trị quyền chọn phụ thuộc vào ba hay nhiều biến ngẫu nhiên trở lên, ví dụ như quyền chọn trên một rổ tài sản (Basket Option). Trong khi chi phí tính toán của các phương pháp khác tăng theo cấp số nhân với số lượng biến, thì chi phí của Monte Carlo chỉ tăng tuyến tính [2].
  • Đơn giản hóa điều kiện phụ thuộc đường đi (Path Dependency): Monte Carlo đặc biệt phù hợp cho các quyền chọn phụ thuộc đường đi vì toàn bộ lịch sử giá tài sản được tạo ra một cách rõ ràng trong quá trình mô phỏng [2]. Với Monte Carlo, các điều kiện phức tạp của Path-dependent Option có thể được thực thi bằng các hàm logic if-else đơn giản.
  • Khả năng mở rộng cao (High Scalability): Monte Carlo cho phép tích hợp dễ dàng các quá trình ngẫu nhiên, bao gồm cả các quá trình nâng cao như jump-diffusion hay stochastic volatility.

Tóm lại, Monte Carlo biến một bài toán giải tích phức tạp thành một bài toán thống kê thực nghiệm đơn giản, cho phép định giá những sản phẩm tài chính phức tạp nhất với độ linh hoạt tuyệt đối.

5. Thực hành Python

5.1. Xây dựng mô phỏng đường đi của giá

Để định giá các quyền chọn phức tạp, bước đầu tiên và quan trọng nhất là mô phỏng các kịch bản biến động của giá tài sản. Mô hình được sử dụng rộng rãi là GBM, vì nó phản ánh hai đặc tính cốt lõi của thị trường: giá tài sản không bao giờ âm và lợi suất thường tuân theo phân phối chuẩn. Ta cần áp dụng GBM dưới thước đo trung hòa rủi ro và dưới dạng rời rạc như công thức (10.13).

Bạn có thể chạy thử thuật toán trên Google Colab.

Colab

import numpy as np

def simulate_paths(S, T, r, sigma,  n_step, n_sim , seed=42):
    np.random.seed(seed)
    dt = T / n_step
    
    # Generate a matrix of Z ~ N(0, 1) with dimensions (nb of scenarios, nb of steps)
    Z = np.random.standard_normal((n_sim, n_step))
    growth = np.exp((r - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * Z) # formula 10.12
    
    # Paths matrix dimension (nb of scenarios, nb of steps + 1)
    paths = np.ones((n_sim, n_step + 1)) * S
    paths[:, 1:] = S * np.cumprod(growth, axis=1)
    
    return paths

Hàm simulate_paths trả về ma trận kích thước (n_sim, n_step + 1), trong đó n_sim hàng, tương ứng số kịch bản mô phỏng, n_step + 1 cột, tương ứng số bước thời gian từ $t=0$ đến $t=T$. Ta không viết vòng lặp for t in range(n_step) để tính từng bước một, mà dùng np.cumprod(growth, axis=1) để tính tất cả cùng lúc. Đây là kỹ thuật vectorization cơ bản trong Python giúp code chạy nhanh hơn hàng chục đến hàng trăm lần so với vòng lặp.

Đường đi giá paths mà chúng ta vừa tạo ra chính là nguyên liệu thô. Từ ma trận này, ta có thể dễ dàng tính được payoffs của bất kỳ loại quyền chọn nào, từ đó tính ra giá quyền chọn.

Ta kiểm chứng mô phỏng GBM bằng thực nghiệm đơn giản dưới đây. Dù thay đổi lãi suất phi rủi ro, độ biến động đến mức cực đoan đến đâu, ta thấy rằng khi số lượng kịch bản càng lớn, giá trị trung bình từ mô phỏng Monte Carlo sẽ càng tiến gần với giá trị lý thuyết $S_0 e^{r T}$. Điều này chứng minh mô phỏng hoạt động khá tốt.


S(t+δt) = S(t) · exp[(r − σ²/2)·δt + σ·√Δt·Z],  Z ~ N(0,1)
E[ST] theoretical
S₀·erT
E[ST] Monte Carlo
sample mean
Std[ST] MC
sample std dev
P(ST > S₀)
fraction of paths
Hình 4: Kiểm chứng thực nghiệm mô phỏng GBM bằng Monte Carlo.

5.2. Định giá European Option với Monte Carlo

Để kiểm chứng tính đúng đắn của mô phỏng vừa xây dựng, chúng ta sẽ thử định giá quyền chọn European Call bằng phương pháp Monte Carlo, rồi so sánh với hai cách đã biết: cây nhị phân, và công thức Black-Scholes.

European Option chỉ có thể thực hiện vào đúng ngày đáo hạn $T$. Giá quyền chọn, vì vậy, chính là kỳ vọng dưới thước đo trung hòa rủi ro của payoff tại $T$, chiết khấu về hiện tại, ví dụ cho call:

\[C = e^{-rT}\, \mathbb{E}^{\mathbb{Q}}\!\left[\max(S_T - K,\, 0)\right] \tag{10.14}\]

Ý tưởng của Monte Carlo, dựa trên Luật số lớn, vô cùng trực quan: thay vì tính kỳ vọng bằng toán học, ta ước lượng nó bằng trung bình của rất nhiều kết quả ngẫu nhiên.

Với paths trong tay, định giá European Option chỉ còn là ba bước đơn giản:

  • Lấy giá cổ phiếu tại ngày đáo hạn: paths[:, -1]
  • Tính payoff cho từng kịch bản: payoff = np.maximum(sign * (paths[:, -1] - K), 0)
  • Chiết khấu trung bình payoff về hiện tại: price = np.exp(-r * T) * np.mean(payoff)
def monte_carlo(S, K, T, r, sigma, n_step, n_sim, option_type='call'):
    # Simulate
    paths = simulate_paths(S, T, r, sigma, n_step=252, n_sim=10000)
    
    # Compute payoffs
    sign = 1 if option_type == 'call' else -1
    payoff = np.maximum(sign * (paths[:, -1] - K), 0)

    # Option price
    price = np.exp(-r * T) * np.mean(payoff)
    
    # Standard Error: SE = std(payoffs) / sqrt(N)  [from CLT]
    se = np.exp(-r * T) * np.std(payoff, ddof=1) / np.sqrt(len(payoff))

    return price, se

Hàm monte_carlo trả về cả giá trị Standard Error (SE), được tính theo công thức (10.5). Ta có thể xây dựng khoảng tin cậy dựa trên giá trị này. Ví dụ khoảng tin cậy 95% tức $\hat{C} \pm 1.96 \times \text{SE}$, có nghĩa là nếu chạy lại thí nghiệm nhiều lần, 95% kết quả sẽ nằm trong khoảng đó.

Bây giờ hãy thử kiểm chứng cả ba phương pháp đã học với bộ tham số sau:

# Parameters
S, K, T, r, sigma = 100.0, 100.0, 1.0, 0.05, 0.20
n_step, n_sim = 252, 10000
# Pricing
bs_call = black_scholes(S0, K, T, r, sigma, 'call')
# 10.450583572185565
bm_call = binomial_crr(S0, K, T, r, sigma, n=1000, option_type='call')
# 10.448584103764572
mc_call, se_call = monte_carlo(S, K, T, r, sigma, n_step, n_sim, option_type='call')
# 10.221084439796249 ± 0.28344206862682536

Nhìn vào kết quả, ta thấy ngay sự khác biệt của ba phương pháp. Black-Scholes cho một con số chính xác tuyệt đối, không có sai số. Cây nhị phân với 1000 bước hội tụ rất sát, sai số chỉ ~0.002. Monte Carlo với 10000 mô phỏng vẫn cho sai số lớn hơn nhiều ~0.2 nhưng đổi lại có thêm khoảng tin cậy $\pm 0.28$ để nhà đầu tư biết độ không chắc chắn của ước lượng.

Ta có thể minh họa bằng đồ thị dưới đây. Đường payoff (màu mờ) là khoản lợi nhuận tại ngày đáo hạn, bằng 0 khi giá cổ phiếu $S$ thấp hơn giá thực hiện $K$, và tăng tuyến tính khi $S > K$. Đường BS price (màu đậm) là ước lượng Black-Scholes, luôn nằm cao hơn đường payoff vì còn bao gồm time value, phần khả năng giá sẽ tăng thêm trước khi đáo hạn. Điểm MC price (điểm tròn đậm) là ước lượng bằng phương pháp Monte Carlo, tiến sát đường BS price khi tăng số lần mô phỏng.


Payoff(ST) = max(ST − K, 0)    CBS = S₀·N(d₁) − K·e−rT·N(d₂)   
BS call price
Payoff at expiry max(Sᴛ − K, 0)
Strike K
MC call price
Spot S₀
current price
BS price
closed-form
MC price
± 95% CI
Time value
intrinsic value
Moneyness
S₀ / K
Hình 5: Kiểm chứng định giá European Call bằng Monte Carlo.

5.3. Tốc độ hội tụ của Monte Carlo

Không giống như Black-Scholes cho ra một con số duy nhất, mỗi lần chạy Monte Carlo sẽ cho một kết quả khác nhau. Vậy kết quả đó hội tụ về kết quả đúng nhanh như thế nào khi $n$ tăng?

Theo công thức (10.5), Monte Carlo hội tụ với tốc độ $\mathcal{O}(1/\sqrt{n})$, giảm sai số 2 lần khi tăng $n$ lên 4 lần. So sánh với cây nhị phân hội tụ với tốc độ $\mathcal{O}(1/n)$, Monte Carlo về mặt lý thuyết hội tụ chậm hơn đáng kể.

Ta tiếp tục thử nghiệm với bộ tham số trên, với giá Black-Scholes làm tham chiếu.

       N |   MC Price |   |Error| | Standard Error | 95% CI contains BS?
------------------------------------------------------------------------
     100 |    10.9774 |    0.5269 |         1.5310 |   [7.977, 13.978]
     300 |    10.0216 |    0.4290 |         0.7838 |   [8.485, 11.558]
    1000 |    10.3960 |    0.0546 |         0.4519 |   [9.510, 11.282]
    3000 |    10.6429 |    0.1924 |         0.2722 |   [10.109, 11.177]
   10000 |    10.5254 |    0.0748 |         0.1473 |   [10.237, 10.814]
   30000 |    10.4175 |    0.0331 |         0.0841 |   [10.253, 10.582]
  100000 |    10.4259 |    0.0247 |         0.0465 |   [10.335, 10.517]

Quan sát bảng kết quả này, ta có thể rút ra nhiều điểm thú vị:

  • Cột |Error| không giảm tuyến tính: Với 3000 mô phỏng, sai số là 0.1924, lớn hơn 1000 mô phỏng là 0.0546. Điều này có vẻ mâu thuẫn nhưng hoàn toàn bình thường. Sai số tuyệt đối của một lần chạy là ngẫu nhiên, chỉ có kỳ vọng của sai số mới giảm theo $\mathcal{O}(1/\sqrt{n})$.
  • Cột 95% CI contains BS? luôn đúng: Dù $n$ nhỏ đến đâu, khoảng tin cậy 95% luôn bao phủ giá Black-Scholes. Điều này xác nhận mô phỏng không bị thiên lệch, kết quả đúng theo lý thuyết.
  • Standard Error giảm chính xác theo $\mathcal{O}(1/\sqrt{n})$: Tăng $n$ từ 1000 đến 100000 (tăng 100 lần), Standard Error giảm từ 0.4519 xuống 0.0465 (giảm ~9.7 lần).

Ta có thể biểu diện một cách trực quan như hình dưới đây. Biểu đồ bên trái cho thấy ước lượng Monte Carlo (đường màu xanh) dao động rất mạnh khi $n$ nhỏ, rồi dần ổn định và tiến về giá Black-Scholes (đường màu đỏ). Khoảng tin cậy 95% thu hẹp liên tục khi $n$ tăng.

So sánh tốc độ hội tụ của Monte Carlocây nhị phân như biểu đồ bên phải, ta thấy ngay đường Binomial Tree luôn thấp hơn đường Monte Carlo. Điều đó có nghĩa để đạt cùng một mức sai số, Binomial Tree cần $n$ nhỏ hơn nhiều so với Monte Carlo. Cây nhị phân 100 bước cho sai số ~0.005, trong khi Monte Carlo cần 30000 kịch bản mới đạt được độ chính xác tương đương.


Phân tích tốc độ hội tụ: Monte-Carlo cho European Call
Hình 6: Phân tích tốc độ hội tụ: Monte-Carlo cho European Call.

Tuy nhiên, như đã phân tích ở trên, kết quả này chưa tính đến độ phức tạp của bài toán. Khi cần định giá quyền chọn high dimensionality hay path dependency, cây nhị phân phải tăng kích thước theo hàm mũ, khiến việc áp dựng trong thực tế trở nên bất khả thi. Đây mới là chỗ cho sức mạnh của Monte Carlo: không phải cho các bài toán đơn giản, mà cho các bài toán đa chiều, phức tạp.

6. Tóm tắt và thảo luận

Trong bài viết này, chúng ta đã đi từ một câu hỏi phỏng vấn tưởng chừng vô nghĩa (tính $\pi$) đến một trong những phương pháp số mạnh mẽ nhất trong Quant Finance.

  • Triết lý của Monte Carlo: Khi bài toán quá khó để giải bằng giải tích, hãy dùng sự ngẫu nhiên để xấp xỉ. Mô phỏng nhiều kịch bản, tính kết quả từng kịch bản, lấy trung bình. Luật số lớn đảm bảo kết quả hội tụ, Định lý giới hạn trung tâm cho biết sai số lớn cỡ nào.

  • Tốc độ hội tụ $\mathcal{O}(1/\sqrt{N})$: Chậm hơn cây nhị phân ($\mathcal{O}(1/n)$) nhưng không phụ thuộc vào số chiều. Đây là lợi thế quyết định khi định giá các sản phẩm nhiều chiều hay phụ thuộc đường đi.

  • Thực hành Python Colab

Monte Carlo là phương pháp linh hoạt nhất trong bộ ba phương pháp số, nhưng cũng là phương pháp đòi hỏi nhiều tài nguyên tính toán nhất. Trong thực tế, sự lựa chọn giữa cây nhị phân, Monte Carlophương pháp sai phân hữu hạn không phải là câu hỏi “cái nào tốt hơn?”, mà là câu hỏi “cái nào phù hợp với bài toán này?”. Một Quant giỏi cần biết ưu và nhược điểm và chọn công cụ đúng cho từng tình huống cụ thể.

Trong bài tiếp theo, chúng ta sẽ dùng Monte Carlo để định giá Path-dependent Option, những sản phẩm – như tên gọi – phụ thuộc vào đường đi của giá.

  1. Deutsch, H. P. (2004). Introduction to Quantitative Methods for Financial Markets. Wiley Finance.
  2. Joshi, M. S. (2003). The Concepts and Practice of Mathematical Finance. Cambridge University Press.
  3. Boyle, P. P. (1977). Options: A Monte Carlo Approach. Journal of Financial Economics, 4(3), 323–338.
  4. Ross, S. M. (1996). Stochastic Processes (2nd ed.). Wiley.
  5. Glasserman, P. (2004). Monte Carlo Methods in Financial Engineering. Springer.
  6. Hull, J. C. (2021). Options, Futures, and Other Derivatives (11th ed.). Pearson.
Hãy để lại câu hỏi tại phần bình luận hoặc trên GROUP để nhận được câu trả lời sớm nhất nhé. Bạn đọc có thể ủng hộ blog qua BUY ME A COFFEE ở góc trên bên phải. Cảm ơn bạn đã tiếp thêm năng lượng để tôi hoàn thiện những bài viết tâm huyết hơn mỗi ngày.

Cusdis

Đừng ngần ngại để lại bình luận nhé!
Bạn không cần tạo tài khoản, chỉ cần nhập tên và nội dung tin nhắn.