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

Postby CharlieEVIEWS » Mon Dec 08, 2014 12:48 pm

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 jpm graph serieslevels.line gs_adjclose jpm_adjclose graph seriesdlog.line dlog(gs_adjclose) dlog(jpm_adjclose) !sig=1 !maxp=20 for %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}_f next

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

Re: Introductory Financial Econometrics Programs

Postby CharlieEVIEWS » Mon Dec 08, 2014 12:57 pm

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 2014m9 copy fred::gdpdef untitled::gdpdef copy fred::nzlsacrmismei untitled::nzcarreg graph 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).correl next equation 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

Postby CharlieEVIEWS » Wed Dec 10, 2014 9:13 am

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=4 matrix(3,!maxvarlags) ic_mat graph tsplot1.line consumption income investment graph tsplot2.line lconsumption lincome linvestment graph tsplot3.line dlconsumption dlincome dlinvestment rename dlconsumption dlcons rename dlincome dlinc rename dlinvestment dlinv 'rename due to EViews 24 character limit for %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).correl next !aic = 999999999999999999999 !schwarz=99999999999999999 !hq=9999999999999999999999 for !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 next var varaic.ls 1 !bestlagaic dlcons dlinc dlinv var varschwarz.ls 1 !bestlagschwarz dlcons dlinc dlinv var varhq.ls 1 !bestlaghq dlcons dlinc dlinv varaic.laglen(8) varaic.testexog varaic.makesystem(n=varsystem) varsystem.ls varsystem.wald c(3)=c(4)=0 'granger causality test varsystem.wald c(3)=c(4)=c(5)=c(6)=0 'block exogeneity test varaic.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

Postby CharlieEVIEWS » Sun Dec 14, 2014 1:20 pm

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 2014m09 fetch fred::indpro fetch fred::m2real fetch fred::pce genr lindpro=log(indpro) genr lpce=log(pce) genr lm2real=log(m2real) graph loggedseries.line lindpro lpce lm2real loggedseries.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).correl next group threeserieslogged lindpro lpce lm2real vector(240) ranks for !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) next freeze(cointegratingranks) ranks.line smpl @all var firstvecm firstvecm.append(coint) b(1,3)=0 firstvecm.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

Postby CharlieEVIEWS » Mon Dec 15, 2014 9:38 am

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.csv for %series belize kazahk kenya mexico usd genr pc_{%series}=@pc({%series}) graph {%series}_g.line pc_{%series} next graph all_g.merge belize_g kazahk_g kenya_g mexico_g usd_g for %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


Return to “Program Repository”

Who is online

Users browsing this forum: No registered users and 1 guest