* POWER Utility with rolling window cond variance estimator
* Stationary Bootstrap of Calhoun (2011), White-style stat i.e. no standard errors
* R+P=1024

all 2100

source H:\m1mwm01\Research\Valente\code\fcasterr2.src

*
** set simulation constants
*
com NOBS = 512
* com R = 256
* com P = NOBS-R+1
com burn = 500
com endsmpl = burn + nobs
com simreps = 2000

*
** set bootstrap constants
*
com bsreps = 499
* com blength = 80

*
** set DGP constants
*
com RRA = 5.0
com rho = 0.5
com volT = 60
com alpha = 0.0
decl symmetric Sigma(2,2)
	com Sigma(1,1) = 0.00171610471
	com Sigma(2,1) = -0.00003830269
	com Sigma(2,2) = 0.000063*(1.0-rho**2.0)
	com eye = %decomp(Sigma)


**********
********** Start do-loop for alphas
**********

do count=1,3
  com R = 128*count
  com P = NOBS-R+1
  com blength = 160-(count*40)
  seed 41467

*
** bookkeeping for simulation
*
set PHIhat  1 simreps = 0.0
set PHIcntr 1 simreps = 0.0
com count90 = 0.0
com count95 = 0.0
com count99 = 0.0


******
****** START SIMULATION: j = 1 to simreps
******

infobox(action=define,progress,lower=1,upper=simreps) 'This is taking forever'

do j=1,simreps
 infobox(current=j)

*
** simulate model with 2 predictors
*
clear er dy rf fcer0 fcer1 volER GR0 GR1 GR0cntr GR1cntr bser bsdy bsrf bsfcer0 bsfcer1 bsvolER bsGR0 bsGR1 w0 w1

set er 1 endsmpl = 0.0
set dy 1 endsmpl = 0.03
set rf 1 endsmpl = 0.0036

com dd = 2.5
com aa = -0.03*dd + (1.0-0.0591*dd^2.0)^0.5

dec ser[vec] errdraw
gset errdraw 2 endsmpl = %ranmvnormal(eye)
set dy 2 endsmpl  =   0.032*(1.0-rho) +  rho*dy{1} + errdraw(t)(2)
set er 2 endsmpl  =   (0.00252 - alpha*0.032) +  alpha*dy{1} + errdraw(t)(1)*abs(aa + dd*dy{1})

*
** carry out out-of-sample forecasting on simulated data
*
equation 1 er
# constant
equation 2 er
# constant dy{1}

com temp0 = fcasterr2(er,1,1,burn,burn+R+1,endsmpl,0)
com temp1 = fcasterr2(er,2,1,burn,burn+R+1,endsmpl,0)

*
** Compute portfolio weights
*
set fcer0   burn+R+1 endsmpl = 0.0
set fcer1   burn+R+1 endsmpl = 0.0
set volER   burn+R+1 endsmpl = 0.00172 + 0.000063*(alpha**2.0)

do jj=burn+R+1,endsmpl
  com fcer0(jj) = temp0(jj,1)
  com fcer1(jj) = temp1(jj,1)
end do jj

*
** Compute performance fees
*
set w0  burn+R+1 endsmpl = -(fcer0-er)/(RRA*volER) + (1.0/(2.0*rra))
set w1  burn+R+1 endsmpl = -(fcer1-er)/(RRA*volER) + (1.0/(2.0*rra))

set GR0 burn+R+1 endsmpl = 1.0 + rf + er*(%if(w0<-1.0,-1.0,0.0) + %if(w0>2.0,2.0,0.0) + %if(w0>-1.0.and.w0<2.0,w0,0.0))
set GR1 burn+R+1 endsmpl = 1.0 + rf + er*(%if(w1<-1.0,-1.0,0.0) + %if(w1>2.0,2.0,0.0) + %if(w1>-1.0.and.w1<2.0,w1,0.0))

nonlin B1
com b1 = 0.0
declare real value

find(noprint,method=simplex) root value
set phidiff burn+R+1 endsmpl = (GR1 - b1)**(1.0-rra) - (GR0)**(1.0-rra)
sstats(mean) burn+R+1 endsmpl phidiff>>value
end find

com PHIhat(j) = %beta(1)

*
** Compute Calhoun (2011) recentering constant
*
 ** no predictability equation

 linreg(noprint) er burn endsmpl-1
 # constant
 set w0cntr  burn+R+1 endsmpl = %beta(1)/(RRA*volER) + (1.0/(2.0*rra))
 set GR0cntr burn+R+1 endsmpl = 1.0 + rf + er*(%if(w0cntr<-1.0,-1.0,0.0) + %if(w0cntr>2.0,2.0,0.0) + %if(w0cntr>-1.0.and.w0cntr<2.0,w0cntr,0.0))

 ** predictability equation

 linreg(noprint) er burn endsmpl-1
 # constant dy{1}
 set w1cntr  burn+R+1 endsmpl = (%beta(1) + %beta(2)*dy{1})/(RRA*volER) + (1.0/(2.0*rra))
 set GR1cntr burn+R+1 endsmpl = 1.0 + rf + er*(%if(w1cntr<-1.0,-1.0,0.0) + %if(w1cntr>2.0,2.0,0.0) + %if(w1cntr>-1.0.and.w1cntr<2.0,w1cntr,0.0))

nonlin B1
com b1 = 0.0
declare real value

find(noprint,method=simplex) root value
set phidiff burn+R+1 endsmpl = (GR1cntr - b1)**(1.0-rra) - (GR0cntr)**(1.0-rra)
sstats(mean) burn+R+1 endsmpl phidiff>>value
end find

com PHIcntr(j) = %beta(1)


***
**** START Bootstrap simulation: bb = 1 to bsreps
***

set bsPHIhat 1 bsreps = 0.0

do bb=1,bsreps

 boot(method=stationary,block=blength) entries burn endsmpl
  set bser burn endsmpl = er(entries(t))
  set bsdy burn endsmpl = dy(entries(t))
  set bsvolER   burn+R+1 endsmpl = 0.00172 + 0.000063*(alpha**2.0)

*
** carry out out-of-sample forecasting on BOOTSTRAPPED data
*
equation 3 bser
# constant
equation 4 bser
# constant bsdy{1}

com bstemp0 = fcasterr2(bser,3,1,burn,burn+R+1,endsmpl,0)
com bstemp1 = fcasterr2(bser,4,1,burn,burn+R+1,endsmpl,0)

*
** Compute portfolio weights
*
set bsfcer0   burn+R+1 endsmpl = 0.0
set bsfcer1   burn+R+1 endsmpl = 0.0

do jj=burn+R+1,endsmpl
  com bsfcer0(jj) = bstemp0(jj,1)
  com bsfcer1(jj) = bstemp1(jj,1)
end do jj

*
** Compute performance fees
*
set bsw0  burn+R+1 endsmpl = -(bsfcer0-bser)/(RRA*bsvolER) + (1.0/(2.0*rra))
set bsw1  burn+R+1 endsmpl = -(bsfcer1-bser)/(RRA*bsvolER) + (1.0/(2.0*rra))

set bsGR0 burn+R+1 endsmpl = 1.0 + rf + bser*(%if(bsw0<-1.0,-1.0,0.0) + %if(bsw0>2.0,2.0,0.0) + %if(bsw0>-1.0.and.bsw0<2.0,bsw0,0.0))
set bsGR1 burn+R+1 endsmpl = 1.0 + rf + bser*(%if(bsw1<-1.0,-1.0,0.0) + %if(bsw1>2.0,2.0,0.0) + %if(bsw1>-1.0.and.bsw1<2.0,bsw1,0.0))

nonlin B1
com b1 = 0.0
declare real value

find(noprint,method=simplex) root value
set phidiff burn+R+1 endsmpl = (bsGR1 - b1)**(1.0-rra) - (bsGR0)**(1.0-rra)
sstats(mean) burn+R+1 endsmpl phidiff>>value
end find

com bsPHIhat(j) = %beta(1)

*
*** End of bootstrap do loop
*
end do bb

*
*** Bookkeeping: Is TRUE (simulated) PHIhat greater than the delta-percentile of (centered)-BS distribution?
*
set bsPHIhat_cntr 1 bsreps = bsPHIhat - PHIcntr(j)

statistics(noprint,fractiles) bsPHIhat_cntr 1 bsreps
com CV90 = %fract90
com CV95 = %fract95
com CV99 = %fract99

com count90 = count90 + %if(PHIhat(j)>CV90,1.0,0.0)
com count95 = count95 + %if(PHIhat(j)>CV95,1.0,0.0)
com count99 = count99 + %if(PHIhat(j)>CV99,1.0,0.0)

*
*** End of simulation do loop
*
end do j
infobox(action=remove)


*
**** Bookkeeping: Report % of Simreps that PHIhat greater than (centered)BS delta-percentile
*
com size10 = count90/simreps
com size5 =  count95/simreps
com size1 =  count99/simreps


statistics(noprint,fractiles) PHIhat
com mu_PHIhat = %mean
com md_Phihat = %median

disp 'blength =' blength 'size1 =' size1 'size5 =' size5 'size10 =' size10 'mu_PHIhat =' mu_PHIhat 'md_PHIhat =' md_PHIhat

***
***** end of alpha do-loop
***
end do count



/*
table
*/






















