Đo lường rủi ro

Quản trị Rủi ro Định lượng với Python

Jamsheed Shorish

CEO, Shorish Research

Phân phối lỗ

  • Ví dụ Forex:
    • Giá trị danh mục bằng USD là USD 100
    • Nhân tố rủi ro = tỷ giá EUR / USD
    • Giá trị danh mục bằng EUR nếu 1 EUR = 1 USD: USD 100 x EUR 1 / USD 1 = EUR 100.
    • Giá trị danh mục bằng EUR nếu r EUR = 1 USD: = USD 100 x EUR r / 1 USD = EUR 100 x r
    • Lỗ = EUR 100 - EUR 100 x r = EUR 100 x (1 - r)
  • Phân phối lỗ: Các giá trị ngẫu nhiên của r => phân phối lỗ danh mục trong tương lai

Biểu đồ tần suất lỗ forex

Quản trị Rủi ro Định lượng với Python

Lỗ tối đa

  • Mức lỗ tối đa của danh mục là gì?
  • Không thể chặn lỗ với độ chắc chắn 100%
  • Mức tin cậy: thay thế 100% chắc chắn bằng xác suất của cận trên
  • Có thể hỏi: "Mức lỗ tối đa xảy ra 95% thời gian là bao nhiêu?"
    • Ở đây mức tin cậy là 95%.
Quản trị Rủi ro Định lượng với Python

Giá trị rủi ro (VaR)

  • VaR: thống kê đo lường lỗ tối đa của danh mục tại một mức tin cậy nhất định
  • Mức tin cậy phổ biến: 95%, 99%, 99,5% (thường viết dạng thập phân)
  • Ví dụ Forex: Nếu 95% thời gian tỷ giá EUR/USD ít nhất là 0,40, thì:
    • giá trị danh mục ít nhất là USD 100 x 0,40 EUR/USD = EUR 40,
    • lỗ danh mục nhiều nhất là EUR 40 - EUR 100 = EUR 60,
    • nên VaR 95% là EUR 60.

Chuỗi thời gian EUR/USD với ngưỡng 0,40

Quản trị Rủi ro Định lượng với Python

Giá trị rủi ro có điều kiện (CVaR)

  • CVaR: đo kỳ vọng lỗ khi lỗ tối thiểu bằng VaR
  • Bằng kỳ vọng của phần đuôi phân phối lỗ:
    • $$\textnormal{CVaR}(\alpha) := \frac{1}{1-\alpha}\mathbb{E} \int_{\textnormal{VaR}(\alpha)}^{\bar{x}} x f(x) dx,$$
    • $f(\cdot)$ = mật độ xác suất của phân phối lỗ
    • $\bar{x}$ = cận trên của lỗ (có thể vô cùng)
    • $\textnormal{VaR}(\alpha)$ = VaR tại mức tin cậy $\alpha$
  • Ví dụ Forex:
    • CVaR 95% = kỳ vọng lỗ cho 5% trường hợp khi giá trị danh mục nhỏ hơn EUR 40

Đồ thị phân phối lỗ, thể hiện phụ thuộc đuôi VaR và CVaR

Quản trị Rủi ro Định lượng với Python

Suy ra VaR

  1. Chọn mức tin cậy, ví dụ 95% (0.95)
  2. Tạo Series các quan sát loss
  3. Tính loss.quantile() tại mức tin cậy đã chọn
  4. VaR = giá trị .quantile() tại mức tin cậy mong muốn

  5. Phân phối lỗ scipy.stats: có thể dùng hàm phần trăm .ppf()

loss = pd.Series(observations)

VaR_95 = loss.quantile(0.95) print("VaR_95 = ", VaR_95)
Var_95 = 1.6192834157254088
Quản trị Rủi ro Định lượng với Python

Suy ra CVaR

  1. Chọn mức tin cậy, ví dụ 95% (0.95)
  2. Tạo hoặc dùng mẫu từ phân phối lỗ
  3. Tính VaR tại mức tin cậy đã chọn, ví dụ 0.95
  4. Tính CVaR là kỳ vọng lỗ (Phân phối chuẩn: dùng scipy.stats.norm.expect())
losses = pd.Series(scipy.stats.norm.rvs(size=1000))

VaR_95 = scipy.stats.norm.ppf(0.95)
CVaR_95 = (1/(1 - 0.95))*scipy.stats.norm.expect(lambda x: x, lb = VaR_95)
print("CVaR_95 = ", CVaR_95)
CVaR_95 = 2.153595332530393
Quản trị Rủi ro Định lượng với Python

Trực quan hóa VaR

  • Biểu đồ tần suất phân phối lỗ cho 1000 mẫu từ N(1,3)

Biểu đồ tần suất lỗ phân phối chuẩn

Quản trị Rủi ro Định lượng với Python

Trực quan hóa VaR

  • Biểu đồ tần suất phân phối lỗ cho 1000 mẫu từ N(1,3)
    • VaR$_{95}$ = 5.72, tức VaR tại mức tin cậy 95%

Biểu đồ lỗ với VaR 95%

Quản trị Rủi ro Định lượng với Python

Trực quan hóa VaR

  • Biểu đồ tần suất phân phối lỗ cho 1000 mẫu từ N(1,3)
    • VaR$_{95}$ = 5.72, tức VaR tại mức tin cậy 95%
    • VaR$_{99}$ = 7.81, tức VaR tại mức tin cậy 99%

Biểu đồ lỗ với VaR 95% và 99%

Quản trị Rủi ro Định lượng với Python

Trực quan hóa VaR

  • Biểu đồ tần suất phân phối lỗ cho 1000 mẫu từ N(1,3)
    • VaR$_{95}$ = 5.72, tức VaR tại mức tin cậy 95%
    • VaR$_{99}$ = 7.81, tức VaR tại mức tin cậy 99%
    • VaR$_{99.5}$ = 8.78, tức VaR tại mức tin cậy 99.5%
  • Chỉ số VaR tăng khi mức tin cậy cao hơn

Biểu đồ lỗ với VaR 95%, 99% và 99,5%

Quản trị Rủi ro Định lượng với Python

Ayo berlatih!

Quản trị Rủi ro Định lượng với Python

Preparing Video For Download...