## Introductory Financial Econometrics Programs

For posting your own programs to share with others

Moderators: EViews Gareth, EViews Moderator

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

### Introductory Financial Econometrics Programs

Dear all,

I'm writing some very basic programs for an introductory financial econometrics class and thought I'd make the programs available in case any one found them useful, interesting, or wanted to give comments. I'll post them all in this thread. No claims are made to the theroetical/empirical validity as to the approaches taken, as the examples are designed to give an exposition of how to do various tasks which may be useful. The first is a simple program to get some monthly stock price data using getstocks and then identify an AR(p) model using an information criteria and then forecast it H=1,...,.12 steps ahead:

Code: Select all

`getstocks(a,freq=3,i=2, start=2000/01/01, end=2014/12/01) gs jpmgraph serieslevels.line gs_adjclose jpm_adjclosegraph seriesdlog.line dlog(gs_adjclose) dlog(jpm_adjclose)!sig=1!maxp=20for %series gs_adjclose jpm_adjclose   smpl @first 2014m12   freeze(temptb) log({%series}).uroot(kpss)   !lm = @val(temptb(7,5))   !crit = @val(temptb(8+!sig,5))   delete temptb   if !lm>!crit then      !diff=1   else      !diff=0   endif   !aic=999999999999999999999999999999999   vector(!maxp) {%series}_storeaic   for !p = 1 to !maxp      equation eq{!p}.ls dlog({%series},!diff) c ar(1 to !p)      {%series}_storeaic(!p)=eq{!p}.@aic      if eq{!p}.@aic<!aic then         !aic =eq{!p}.@aic         !bestp=!p      endif      delete eq{!p}   next   equation besteq_{%series}.ls dlog({%series},!diff) c ar(1 to !bestp)   pagestruct(freq=m,start=2000m1,end=2015m12)   smpl 2015m1 2015m12   besteq_{%series}.forecast(f=na) {%series}_fnext`

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

### Re: Introductory Financial Econometrics Programs

The second program (simpler) gets a couple of series from FRED (the US GDP deflater and the number of new car registrations in New Zealand), plots them, and uses nested for loops to freeze a series of different unit root tests and correlograms, and then gives a potential example of a spurious regression (high R^2 with non stationary series, low DW, etc):

Code: Select all

`wfcreate m 2000m1 2014m9copy fred::gdpdef untitled::gdpdefcopy fred::nzlsacrmismei untitled::nzcarreggraph linegraph1.line log(gdpdef) log(nzcarreg)linegraph1.setelem(2) axis(right)graph linegraph2.line dlog(gdpdef) dlog(nzcarreg)linegraph2.setelem(2) axis(right)for %series gdpdef nzcarreg   for %test adf kpss      for %det const trend         freeze({%series}_{%det}_{%test}_d0)   {%series}.uroot({%test},{%det},dif=0)         freeze({%series}_{%det}_{%test}_d1)   {%series}.uroot({%test},{%det},dif=1)         freeze({%series}_{%det}_{%test}_d2)   {%series}.uroot({%test},{%det},dif=2)      next   next   freeze({%series}_d0) {%series}.correl   freeze({%series}_d1) d({%series},1).correl   freeze({%series}_d2) d({%series},2).correlnextequation eq1.ls log(gdpdef) c @trend log(nzcarreg)equation eq2.ls dlog(gdpdef) c @trend dlog(nzcarreg)`

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

### Re: Introductory Financial Econometrics Programs

A third program to solidify what we did in the previous two programs (determine stationarity and identify a suitable VAR(p) model), using Lutkepols wgmacro file http://www.eviews.com/EViews8/data/wgmacro.wf1, then do a couple of basic commands on the var object before turning it into a system to show the equivalence of wald tests against the .testexog command:

Code: Select all

`import c:\wgmacro!maxvarlags=4matrix(3,!maxvarlags) ic_matgraph tsplot1.line consumption income investmentgraph tsplot2.line lconsumption lincome linvestmentgraph tsplot3.line dlconsumption dlincome dlinvestmentrename dlconsumption dlconsrename dlincome dlincrename dlinvestment dlinv 'rename due to EViews 24 character limitfor %series lcons linc linv      for %test adf kpss      for %det const trend         freeze({%series}_{%det}_{%test}_d0)   {%series}.uroot({%test},{%det},dif=0)         freeze({%series}_{%det}_{%test}_d1)   {%series}.uroot({%test},{%det},dif=1)         freeze({%series}_{%det}_{%test}_d2)   {%series}.uroot({%test},{%det},dif=2)      next   next   freeze({%series}_d0) {%series}.correl   freeze({%series}_d1) d({%series},1).correl   freeze({%series}_d2) d({%series},2).correlnext!aic = 999999999999999999999!schwarz=99999999999999999!hq=9999999999999999999999for !p = 1 to !maxvarlags      var var{!p}.ls 1 !p dlcons dlinc dlinv   !iccounter=1   for %IC aic schwarz hq      ic_mat(!iccounter,!p)=var1.@{%IC}      if var{!p}.@{%IC}<!{%IC} then         !bestlag{%IC}=!p         !{%IC}=var{!p}.@{%IC}      endif   !iccounter=+!iccounter+1   next   nextvar varaic.ls 1 !bestlagaic dlcons dlinc dlinvvar varschwarz.ls 1 !bestlagschwarz dlcons dlinc dlinvvar varhq.ls 1 !bestlaghq dlcons dlinc dlinvvaraic.laglen(8)varaic.testexogvaraic.makesystem(n=varsystem)varsystem.lsvarsystem.wald c(3)=c(4)=0   'granger causality testvarsystem.wald c(3)=c(4)=c(5)=c(6)=0 'block exogeneity testvaraic.impulse(10,m,a,se=a) dlcons dlinc dlinv @ dlcons dlinc dlinv`
Last edited by CharlieEVIEWS on Sun Dec 14, 2014 1:40 pm, edited 1 time in total.

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

### Re: Introductory Financial Econometrics Programs

And a program to again consolidate earlier programs and then use rolling windows to estimate the cointegrating rank (and plot the rank across time) then impose a restriction on the VECM:

Code: Select all

`wfcreate m 1959m1 2014m09fetch fred::indprofetch fred::m2realfetch fred::pcegenr lindpro=log(indpro)genr lpce=log(pce)genr lm2real=log(m2real)graph loggedseries.line lindpro lpce lm2realloggedseries.setelem(1) axis(right)for %series lindpro lpce lm2real   for %det const trend      freeze({%series}_{%det}_d0) {%series}.uroot(adf,{%det},dif=0)      freeze({%series}_{%det}_d1) {%series}.uroot(adf,{%det},dif=1)      freeze({%series}_{%det}_d2) {%series}.uroot(adf,{%det},dif=2)   next   freeze({%series}_d0) {%series}.correl   freeze({%series}_d1) d({%series},1).correl   freeze({%series}_d2) d({%series},2).correlnextgroup threeserieslogged lindpro lpce lm2realvector(240) ranksfor !j = 1 to 240   smpl @first+!j @last-240+!j   var varfirstdifferences.ls 1 4 d(lpce) d(lm2real) d(lindpro)   varfirstdifferences.laglen(12,mname=matrixlags{!j})   !lags=matrixlags{!j}(14,5)   freeze(vecmtable!j) threeserieslogged.coint(s,!lags)   ranks(!j)=vecmtable!j(13,4)nextfreeze(cointegratingranks) ranks.linesmpl @allvar firstvecmfirstvecm.append(coint) b(1,3)=0firstvecm.ec(c,1,restrict) 1 1 lpce lindpro lm2real`

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

### Re: Introductory Financial Econometrics Programs

Finally, a short program to do some GARCH(1,1) stuff, such as testing for ARCH effects, making and plotting conditional variances and then forecasting etc on five GBP/FX rates (from http://www.oanda.com/currency/historical-rates/):

Code: Select all

`wfopen C:\<insertfilepath>\fxdata.csvfor %series belize kazahk kenya mexico usd   genr pc_{%series}=@pc({%series})   graph {%series}_g.line pc_{%series}nextgraph all_g.merge belize_g kazahk_g kenya_g mexico_g usd_gfor %series belize kazahk kenya mexico usd   !schwarz=999999999999999999999999   for !p = 1 to 10      equation {%series}_eq{!p}.ls pc_{%series} c ar(1 to !p)      if {%series}_eq{!p}.@schwarz<!schwarz then         !schwarz={%series}_eq{!p}.@schwarz         !bestlag=!p      endif   next   equation {%series}_eq_bestlag.ls pc_{%series} c ar(1 to !bestlag)   freeze(archtest_{%series}) {%series}_eq_bestlag.archtest(4)   equation garch_{%series}.arch pc_{%series} c ar(1 to !bestlag)   freeze(garch_{%series}_cond_std_g) garch_{%series}.garch   freeze(garch_{%series}_cond_var_g) garch_{%series}.garch(v)   garch_{%series}.makegarch garch_{%series}_cond_v   graph garch_{%series}_cond_var_g1.line garch_{%series}_cond_v   freeze(garch_{%series}_hist) garch_{%series}.hist   freeze(garch_{%series}_archtest) garch_{%series}.archtest(4)   garch_{%series}.forecast garch_{%series}_fm garch_{%series}_fse garch_{%series}_fgarch   equation   {%series}_eq_egarch.arch(1,1,egarch) pc_{%series} c ar(1 to !bestlag)next`