Code: Select all
'News Impact Curve Example for EGARCH(1,1) Model
'Obtaining a feasible curve depends on the significance of parameter values,
'which you may fail to obtain in each run.
'*************************************************************************************
'THIS SECTION SIMULATES AND ESTIMATES AN EGARCH(1,1) MODEL
'*************************************************************************************
'Decide a range and create a workfile
!range = 200
wfcreate u !range
'Assign initial values to series
smpl @first @first
series res = 1
series gar =1
series y = 1
'Simulate an EGARCH(1,1) model
coef(5) theta
theta(1) = 2
theta(2) = .1
theta(3) = .5
theta(4) = .3
theta(5) = .6
for !i=1 to !range-1
smpl !i+1 !i+1
gar = exp(theta(2) + theta(3)*@abs(res(-1)/gar(-1)) + theta(4)*(res(-1)/gar(-1)) + theta(5)*log(gar(-1)))
res = @sqrt(gar)*nrnd
y = theta(1)+res
next
smpl @all
delete gar res
'Estimate the EGARCH(1,1) model with the above generated series
equation eq01.arch(1,1,egarch) y c
'Retrieve residuals, conditional variance and standardized errors
eq01.makeresids res_eq
eq01.makegarch gar_eq
series z = res_eq/@sqrt(gar_eq)
'Replace the estimated coefficent values with the old ones.
for !i=1 to eq01.@ncoef
theta(!i) = eq01.@coef(!i)
next
'*************************************************************************************
'THIS IS THE ACTUAL PART THAT GENERATES THE NEWS IMPACT CURVE
'*************************************************************************************
!uvar = @mean(gar_eq) 'An estimate of unconditional variance
!np = 100 'Number of points
!lb =-2*@round(@max(@abs(z))) 'Lower bound
!ub =2*@round(@max(@abs(z))) 'Upper bound
!s = (!ub-!lb)/(!np-1) 'Step size
matrix(!np,2) nic 'Generate a matrix to store the components
'First observations of standardized error and conditional variance
nic(1,1)=!lb
nic(1,2)=exp(theta(2) + theta(3)*@abs(!lb-!s) + theta(4)*(!lb-!s) + theta(5)*log(!uvar))
'Generate the components, columns being the standardized error and conditional variance, respectively.
for !i=2 to !np
nic(!i,1) = !lb+(!i-1)*!s
nic(!i,2) = exp(theta(2) + theta(3)*@abs(nic(!i-1,1)) + theta(4)*(nic(!i-1,1)) + theta(5)*log(!uvar))
next
'Plot the News Impact Curve (NIC)
nic.xypair
delete gar_eq res_eq z