波動率

GARCH 模型的無條件變異數是多少?

  • June 24, 2019

我想使用 Matlab 腳本來計算 Heston Nandi GARCH 價格。我在網上找到了一個合適的腳本,它要求輸入“無條件變異數”。如何計算適當的無條件波動率?我在網上找到了這個公式:

$$ \sigma^2 = s^2 = \frac{1}{n-1} * \sum_{t=1}^n [r^2_t] $$ 這是合適的使用嗎?我是否根據這個公式對所有資產回報率取變異數,直到我試圖估值的期權的時間點?

腳本

完整腳本:`function OptionPrice=HestonNandi(S_0,X,Sig_,T,r)

%%%%%%%%%%%%% % 該函式根據 Heston 和 Nandi(2000) 的 GARCH % 期權定價公式計算看漲期權的價格。% 函式的輸入是:標的資產的目前價格、執行價格、標的資產的無條件變異數百分比、到期時間(以天為單位)、百分比和每日無風險利率。%%%%%%%%%%%

% 作者:Ali Boloorforoosh % 電子郵件:a_bol@jmsb.concordia.ca % 日期:2008 年 11 月 1 日

           %%%%% sample inputs %%%%%
% S_0=100;                    stock price at time t
% X=100;                      strike prices
% Sig_=.04/252;               unconditional variances per day
% T=30;                       option maturity
% r=.05/365;                  daily risk free rate

OptionPrice=.5S_0+(exp(-rT)/pi) quad(@Integrand1,eps,100)-X exp(-r T) (.5+(1/pi)*quad(@Integrand2,eps ,100));

% function Integrand1 and Integrand2 return the values inside the 
% first and the second integrals

function f1=Integrand1(phi)
   f1=real((X.^(-i*phi).*charac_fun(i*phi+1))./(i*phi));
end

function f2=Integrand2(phi)
   f2=real((X.^(-i*phi).*charac_fun(i*phi))./(i*phi));
end

% function that returns the value for the characteristic function
function f=charac_fun(phi)

   phi=phi';    % the input has to be a row vector

   % GARCH parameters
   lam=2;
   lam_=-.5;                   % risk neutral version of lambda
   a=.000005;
   b=.85;
   g=150;                      % gamma coefficient
   g_=g+lam+.5;                % risk neutral version of gamma
   w=Sig_*(1-b-a*g^2)-a;       % GARCH intercept

   % recursion for calculating A(t,T,Phi)=A_ and B(t,T,Phi)=B_
   A(:,T-1)=phi.*r;
   B(:,T-1)=lam_.*phi+.5*phi.^2;

   for i=2:T-1
       A(:,T-i)=A(:,T-i+1)+phi.*r+B(:,T-i+1).*w-.5*log(1-2*a.*B(:,T-i+1));
       B(:,T-i)=phi.*(lam_+g_)-.5*g_^2+b.*B(:,T-i+1)+.5.*(phi-g_).^2./(1-2.*a.*B(:,T-i+1));
   end

   A_=A(:,1)+phi.*r+B(:,1).*w-.5*log(1-2.*a.*B(:,1));                    % A(t;T,phi)
   B_=phi.*(lam_+g_)-.5*g_^2+b.*B(:,1)+.5*(phi-g_).^2./(1-2.*a.*B(:,1)); % B(t;T,phi)

   f=S_0.^phi.*exp(A_+B_.*Sig_);
   f=f'; % the output is a row vector

end

結尾

`

我不確定您是否仍然需要答案,但是,如果您查看 Heston&Nandi (2000) 的原始論文,您會發現程式碼中定義的“Sig_”類似於它們的年化長期波動率(P.579),除了這裡它不是年化的。

$ \Omega=\frac{\left(\omega+\alpha\right)}{1-\beta-\alpha\gamma^{2}} $

解決這個問題 $ \omega $ 導致您的程式碼稱為“GARCH 攔截”。

此外,在您的實施中

f=S_0.^phi.*exp(A_+B_.*Sig_)

這是

$ CF=S_{t}^{\phi}\exp\left(A\left(t,T,\phi\right)+B\left(t,T,\phi\right)h_{t+1}^{*}\right) $

如您所見,“Sig_”應該是下一個時間步長的條件變異數(在單滯後情況下)。

因此,據我了解,這裡的“Sig_”只是 h(0) 的任意起始值,即條件變異數。

要回答您的問題,是的,可以將其設置為等於樣本變異數,但也可以設置為任何其他合理的值。它對結果幾乎沒有任何影響,並且由於條件變異數的強均值回歸特性,對於較長的返回樣本(幾百個觀察值)無關緊要。

您還應該記住,您必須為正在使用的數據估計自己的參數。

引用自:https://quant.stackexchange.com/questions/27658