Tutorial cơ bản: phát triển và sử dụng Value-at-Risk

By , May 9, 2014 2:46 pm

 

Viết theo yêu cầu sếp ACB và Techcombank

1. Nhu cầu sử dụng

Tình hình là Tổng công ty Đầu tư và kinh doanh vốn nhà nước SCIC có dùng, vài ngân hàng thương mại dùng.

Cần tính VaR cho:

* Danh mục cổ phiếu (equity portfolio)

* Danh mục công cụ nợ (fixed-income portfolio) phụ thuộc lãi suất (interest rate risk)

* Fixed-income portfolio phụ thuộc rủi ro tín dụng (credit risk)

* Ngoại hối Fx

* Các sản phẩm money markets

* Hàng hoá commodities

* Vàng (đủ quan trọng để tách khỏi hàng hoá), vì tính pháp lý của vàng vật chất ở VN nên lấy tạm hợp đồng vàng giao sau (gold futures) để xét

* Các công cụ phái sinh (derivatives)

2. Sự cân bằng khi phát triển mô hình VaR

Tính toán VaR liên quan mật thiết đến 2 thứ quan trọng là chôn vốn (capital lockup) vào quỹ (reserve / provisions), và information signal.

Thế nên phát triển mô hình tính VaR phải cân bằng được độ an toàn cho phép nhưng không ước lượng quá mức (overestimate).

3. Cách tác giả tiếp cận tính VaR

Có 4 cách tính VaR chính cho equity (1) tuyến tính linear (2) complementary error function erfc (3) sử dụng dữ liệu hiệp phương sai quá khứ historical variance-covariance (4) giả lập tương lai dùng Monte Carlo engine.

Trước khi làm bất cứ gì thì viết một hàm dùng web spider để crawl và SQL để lấy dữ liệu giá mỗi ngày đưa vào array p[n].

Sau đó tính array r[n-1].

a. Cách tuyến tính linear

Cái này cơ bản nhất, chạy regression để có volatility, lấy critical value từ lognormal distribution (hoặc normal distribution) rồi tính VaR.

Pseudo-code như sau:

for (i = 0 ; i < n-1 ; i++)

{

                r[i] = p[i+1] / p[i] – 1;

                sumr += r[i];

}

muyr = sumr / n;

for (i = 0 ; i < n-1 ; i++)

{

                varianceNum += (r[i] – muyr) ^ 2;

}

vol = sqrt(varianceNum / (n-2));

/* */

VaR = getCriticalValue(confidence) * sqrt(multiplyMatrix(multiplyMatrix(w[n]*vol[n], varCov[n][n]),transposeMatrix(w[n]*vol[n]))) * sqrt(BaselForecast / tradingDays);

b. Complementary error function

Đầu tiên viết hàm tính tích phân để ra giá trị erfc

Sau đấy đổ dữ liệu thị trường vào

Đặt a = số ngày giao dịch trong năm

VaR được tính từ:

Pseudo-code cho cách này

for (i = 0 ; i < a ; i++)

{

                while(probability[i][0] < p)

                {

                                probability[i][0] = 1/2 * erf((rmean[i][0] + ln(value) – ln(value – var[i][0])) / (volatility[i][0] * sqrt(2 * 1)));

                                var[i][0] += 1;

                }

                var[i][0] = var[i][0] * (goBackDays – 1);

}

c. Normality using historical variance-covariance

Đầu tiên viết các hàm sau:

Nhân ma trận

Chuyển vị (transpose) ma trận

Cách này tính variance-covariance matrix, rồi dùng quan hệ đó để tính VaR như sau:

Đoạn pseudo-code để thực thi

for (i = 0 ; i < numberOfAssets1 ; i++)

{

weight[i][0] = securityValue1 / (pdt[startPeriod1][i]);

}

file = fopen(fileName,"a");

for (i = 0 ; i < a ; i++)

{

                pdtdfu = pdtdf[(startBack1+i):(startPeriod1+i)][];             // price change

                pdtdfuv = variance(pdtdfu);       // variance of price change, sigma hat

                pdtdfuvf = weight’ * pdtdfuv * weight; // xT * sigma * x

                meanp = meanc(pdtdfu);

                var[0][0] = (-1 * horizon) * weight’ * (meanp’) – (zValueOnePercent * sqrt(horizon*pdtdfuvf));

                realv[0][0] = ( (pdt[startPeriod1+i][]) * weight) – ( (pdt[startPeriod1+i+horizon][]) * weight );     // value at T – value at T+n

                efficiency[0][0] = -realv[0][0] / var[0][0];

                fprint(file, var[0][0],"\t",realv[0][0],"\t",efficiency[0][0],"\n");

}

fclose(file);

d. Giả lập Monte Carlo simulation

Cách này giả lập một số lượng lớn kịch bản sẽ xảy ra trong tương lai. Vì dùng lập trình nên có thể ra hàng tỷ tình huống cũng được. Đặt số tình huống là S.

Một tỷ tình huống sẽ cho ra một tỷ giá trị danh mục giả định trong tương lai. Sau đó sắp xếp một tỷ giá trị này thành histogram.

Khi này, VaR sẽ tìm được bằng cách lấy quantile α. Critical value fα* sẽ nằm giữa giá trị thứ αS và αS+1.

Pseudo-code cho cách này

for (i = 0 ; i < numberOfAssets1 ; i++)

{

                weight[i][0] = securityValue1 / (pdt[startPeriod1][i]);     // value holding for each security

}

file = fopen(fileName,"a");

for (i = 0 ; i < numberOfTradingDays ; i++)             // one year

{

                for (b = 0 ; b < repeatB ; b++)

{

                                portrl = pdt[startPeriod1+i][] + pdtdf[startBack1+i+(ranu(1,1)*scaleMultiplier)][];

                                for (j = 0 ; j < repeatDeltaP ; j++)

                                {

                                                portrl += pdtdf[startBack1+i+(ranu(1,1)*scaleMultiplier)][];        // add simulated price (delta). P*(1,T+n)

                                }

                                portrlv[b][0] = weight’ * (portrl)’;             // realised loss value = realised loss * weight

                }              // after b loop, b values stored to portrlv

                portq = quantilec(portrlv, mq);  // use quantilec command to calculate quantile

                var[0][0] = ((pdt[startPeriod1+i][]) * weight) – portq[0][0];          // weight * price – quantile

                realv[0][0] = ((pdt[startPeriod1+i][]) * weight) – ((pdt[startPeriod1+i+horizon][]) * weight);        // weight & price T – weight * price T+10 (next 10 days)

                efficiency[0][0] = -realv[0][0] / var[0][0];

                fprint(file, var[0][0],"\t",realv[0][0],"\t",efficiency[0][0],"\n");

                }

fclose(file);

}

e. Fixed-income VaR on interest rate

Đối với fixed-income thì quan hệ chính là từ yield curve. Trong đó quan tâm short term, medium term và long term rates.

Fixed-income cũng dùng Monte Carlo được.

f. Derivatives VaR

Cách ít tốn kém để dùng VaR cho derivatives là dùng Greeks, cụ thể là Δ và Γ

Quan hệ giữa thay đổi trong giá trị của underlying asset δS và giá của derivatives contract δV là

Ví dụ đối với Call Option và Put Option lần lượt như sau:

Biến thiên của portfolio:

Biến thiên của giá Option:

Lấy đạo hàm

VaR lấy lower quantile mà ra.

4. Đánh giá mô hình

Linear và erfc có vấn đề là thiếu dynamic.

Không cần chạy test, chỉ cần nhìn tên mô hình Historical data là biết mô hình này sẽ trục trặc ngay chính lúc cần nó để quản trị rủi ro nhất là khi đứng trước biến động lớn.

Simulation quá nhạy với biến động, tuy nhiên vì vậy mà khá hiệu quả với thị trường. Simulation còn không giả định quan hệ quá khứ, cũng không giả định phân phối distribution.

a. Back testing

Cách ít động não nhất để back testing là download dữ liệu xưa nhất có thể, ví dụ từ khi IPO của các stock, hoặc 50 năm lịch sử lãi suất. Để mô hình của mình chạy trên dữ liệu, nếu số violation vượt quá quy định của Basel (1%) thì chém ngay.

Sau đó làm gì thì là một sự tinh tế. Có thể đổi mô hình, có thể cải tiến mô hình manually (nhưng hay hơn là build in một Artificial Intelligence engine để nó tự sửa chính nó), hoặc đổi GIẢ ĐỊNH!

b. Stress testing

Nếu mô hình vẫn phụ thuộc vào quan hệ quá khứ hoặc phụ thuộc giả định distribution thì buộc phải tự chọn dữ liệu từ các đợt sập sàn (market crashes), khủng hoảng, sốc kinh tế (economic shock).

Đối với stress testing thì tác giả thích dùng simulation hơn vì có thể tăng ga cho engine đến kịch kim và test được rất nhiều tình huống. Khi này, stress testing sẽ làm một multivariate model, thảy vài quả bomb vào các driving factor xem có thoả được Basel không. Nếu muốn vẽ chart đẹp thì làm multi-dimensional sensitivity analysis luôn.

Nguyên tắc là vậy thôi. Vấn đề thật sự là interpret kết quả thế nào, và làm gì với nó mà không bị rời mắt khỏi mục tiêu là giảm capital lockup.

5. Vấn đề cần quan tâm khi sử dụng VaR

* Quan hệ giữa các VaR cho các portfolio khác nhau, vì chúng không hoàn toàn độc lập (autocorrelated).

* Thừa kế mô hình và không hoàn toàn làm chủ nó.

* Thay đổi pháp lý.

* Tính VaR chỉ là vấn đề kỹ thuật, Quant nào cũng làm được. Vấn đề thuyết phục tổ chức sử dụng VaR, và các phức tạp phát sinh sau đó.

* Nhân lực quản trị VaR và các công cụ tương tự: tối thiểu Master in Financial Engineering, hoặc combo Master in Finance + Bachelor in Engineering. Số người làm được thì không ít, nhưng không đủ cung ứng cho các ngân hàng, tổ chức tín dụng, công ty đầu tư ở VN.

Tutorial cơ bản: Smart Beta là gì

By , April 27, 2014 5:58 pm

Disclaimer: Tác giả vừa làm giảng viên ĐH vừa làm quản lý đầu tư nên bài này không hoàn toàn academic mà có nhiều yếu tố từ thị trường chưa qua academic peer review.

Viết theo yêu cầu sếp Goldman Sachs.

1. Ứng dụng của β trong hoạt động quản lý đầu tư tổ chức (institutional investment management)

β được dùng rộng rãi trong các công ty đầu tư cho 2 mục đích lớn: tính rủi ro, và dùng để thiết lập chiến lược đi theo thị trường.

Ứng dụng của chiến lược dùng β là phân bổ trọng số (weight) vào các danh mục (portfolio) tuân thủ 2 hướng đi chính:

i. Tập trung vào các mã β ổn định. Không nhất thiết phải chọn β gần 1.

ii. Phân bổ weight của portfolio mình gần với weight của các mã trong index lớn mà mình muốn theo. Điều này đảm bảo portfolio của mình sẽ dịch chuyển gần với dịch chuyển của index.

Một cách làm là: dự báo vĩ mô => dự báo toàn thị trường, mà các indices là proxies của thị trường => dự báo xu hướng các portfolio và các mã trong portfolio.

β là theo hướng passive management, cho rằng thị trường hiệu quả (efficient market) và chọn cách đi theo thị trường.

2. Những vấn đề nảy sinh khi dùng β theo cách này

i. Cách tính β. Có vài cách tính β ra kết quả hơi khác nhau. Ngoài ra, chọn thời gian cắt dữ liệu khác nhau sẽ ra β khác nhau.

ii. β để sót mất các thông tin gì? Có một nghiên cứu kết luận rằng β dự đoán được khoảng 80% trong điều kiện thị trường bình thường. Fama French là công trình nổi tiếng nhất cải thiện vấn đề này, đem lại Nobel 2013.

iii. Phân bổ weight của portfolio mình gần với weight của index có hiệu quả không? Đặt ra vấn đề này chính là thấy khói mới đi tìm lửa.

Đánh giá lại cách phân bổ này thì thấy một vấn đề fundamental là time drag. Beta stock không chỉ đi theo thị trường, mà còn tương hỗ đẩy thị trường vì stock chính là một phần trong cách tính index. Khi tìm được các stock đang dẫn dắt thị trường để đổ weight vào nó thì chính ra stock đó đã đang tăng đến độ overpriced rồi. Ngược lại, ít chú ý đến các stock đang nằm yên chưa động tĩnh gì trong khi chính nó sẽ dẫn dắt thị trường trong tương lai gần.

3. Một lựa chọn khác với β: alpha α

Mô hình đơn giản nhất đụng đến α là Single Index Model.

α đi theo hướng active management, cho rằng thị trường không hiệu quả (inefficient market) và chủ động quản lý portfolio để tìm ra các lỗi định giá (mispricing) của thị trường mà đánh.

Vì α chủ động nên phí quản lý tài sản cao. Vấn đề nặng hơn phí quản lý tài sản là rất khó để một người quản lý đầu tư có α dương trong thời gian dài vì thị trường thay đổi liên tục, không chiến lược nào dùng được quá lâu.

4. Smart β

Smart β là sản phẩm của các công ty quản lý đầu tư hướng đến giải quyết các vấn đề ở 2iii và 3. Giải quyết (3) bằng cách không chơi active, và giải quyết 2iii bằng cách cố gắng cải tiến weight.

Smart β thay đổi cách phân bổ weight vào portfolio, không chỉ đi theo giá trị vốn hoá (market capitalization) nữa. Về mặt nguyên tắc, bất kỳ cách phân bổ weight có tính toán nào cũng có thể gọi là smart β, còn khả năng của từng mô hình thì phải đánh mới biết được.

Vài yếu tố các mô hình smart β tính đến:

  • Phân bổ đều equal weight
  • Phân bổ theo các chỉ số fundamental (giá trị sổ sách book value, cổ tức dividends, doanh số revenue, dòng tiền cash flow). Theo fundamental kiểu này có không dưới 30 chỉ số có thể tính đến, dùng chung với các bộ chỉ số asset pricing được.
  • Phân bổ theo nhóm rủi ro risk profile cluster
  • Phân bổ theo phương sai nhỏ nhất (minimum variance) dựa trên tính toán variance-covariance matrix of returns
  • Phân bổ theo subadditive, dùng diversification
  • Phân bổ theo các alternative indices, tức là giả định smart indices rồi cứ bám theo

5. Các vấn đề cần xem xét về smart β

Phân bổ kiểu nào lợi nhất? Muốn biết thì phải test, mà test xong là cơ hội qua mất rồi và tương lai sẽ không giống quá khứ.

Tìm được smart β phù hợp rồi thì chắc gì nó sẽ dùng được hoài.

Tái cơ cấu danh mục (rebalancing) để đi theo weight mục tiêu phát sinh chi phí giao dịch (transaction cost), bao gồm: phí môi giới (brokerage fee) khi phải rebalancing portfolio liên tục, thuế thu nhập, phí cho sở giao dịch chứng khoán (exchange fee) thường được tính vào phí môi giới, chi phí cơ hội (opportunity cost), và chi phí khi chính các trade của mình đẩy thị trường theo hướng bất lợi cho mình.

Acquire công ty smart β thì chắc là lấy 3 thứ: mô hình, khách hàng, và momentum.

Panorama Theme by Themocracy