******************************************************************
clear
version 13.0
set more off

use C:\Users\Toby\Desktop\JOHN_PUB\basis\BS_noupper.dta, clear // set strategy output dataset 
*use C:\Users\Toby\Desktop\JOHN_PUB\basis\BS_nolower.dta, clear // set strategy output dataset 
*use C:\Users\Toby\Desktop\JOHN_PUB\basis\basis_mom.dta, clear // set strategy output dataset 

tsset date

*drop if date <tm(1960m8)
*drop if date >tm(1979m12)

*drop if date <tm(1980m1)
*drop if date >tm(1999m12)

drop if date <tm(2000m1)
drop if date >tm(2017m12)

loc var BS_Mom

***MaxDD & DDLength****
gen cumret`var'= exp(sum(ln(`var'+1)))
gen maxcumret`var'= max(cumret`var', cumret`var'[_n-1])
replace maxcumret`var'=max(maxcumret`var', maxcumret`var'[_n-1])
gen drawdown`var' = cumret`var' / maxcumret`var' -1

gen ddlength`var' = drawdown`var'
replace ddlength`var' = ddlength`var'[_n-1] + 1 if drawdown`var' !=0
						
sum drawdown`var'
loc MaxDD`var' = r(min)

gen dd`var' = r(min) // this is making sure that the restriction used in ddlength1 has a value
sum dd`var'

gen ddlength1`var' = ddlength`var' if drawdown`var' == r(mean)
sum ddlength1`var'
loc DDlength`var' = r(mean)


***MaxRU & Rulength***
gen runup`var' = `var'
replace runup`var'=0 if drawdown`var'<0

gen rulength`var' = runup`var'
replace rulength`var' = rulength`var'[_n-1] + 1 if runup`var' !=0

replace runup`var'= runup`var'+ runup`var'[_n-1] if rulength`var'[_n-1] !=0
replace runup`var'=0 if runup`var'[_n-1]==runup`var'

sum runup`var'
loc MaxRU`var' = r(max)

gen ru`var'=r(max)	
sum ru`var'

gen rulength1`var' = rulength`var' if runup`var' == r(mean)
sum rulength1`var'
loc RUlength`var'= r(mean)

***VaR***
centile `var', centile(5 1)  meansd
loc VaR95`var'= r(c_1) * -1
loc VaR99`var'= r(c_2) * -1


***VaR(Cornish-Fisher)
sum `var', d
loc tot`var' = r(N)
loc ret`var'= r(mean)
loc sd`var' = r(sd)
loc skew`var'= r(skewness)
loc kurt`var'= r(kurtosis)
loc max`var'= r(max)
loc min`var'= r(min)

loc quant99`var'=invnormal(0.01)
loc quant95`var'=invnormal(0.05)

loc zcf99`var'= `quant99`var'' + (`quant99`var''^2-1)* `skew`var''/6 + (`quant99`var''^(3)-3*`quant99`var'')*`kurt`var''/24 -(2*`quant99`var''^(3)-5*`quant99`var'')*`skew`var''^(2)/36
loc zcf95`var'= `quant95`var'' + (`quant95`var''^2-1)* `skew`var''/6 + (`quant95`var''^(3)-3*`quant95`var'')*`kurt`var''/24 -(2*`quant95`var''^(3)-5*`quant95`var'')*`skew`var''^(2)/36

loc mVaR99`var'= `ret`var'' + `sd`var''*`zcf99`var'' * -1
loc mVaR95`var'= `ret`var'' + `sd`var''*`zcf95`var'' * -1


***mean return***
gen gm`var'= `var' + 1
ameans gm`var'
loc agmean`var' = (r(mean_g)-1)* 12
loc aamean`var' = (r(mean)-1)* 12

***SD of return***
sum `var'
loc asd`var'=r(sd) * sqrt(12)


***t-stats***
reg `var'
mat a1=r(table)
loc tstat`var'=a1[3,1]


***Sharpe% & Modified Sharpe%***
gen exret`var' = `var'          // *"-rf" deleted for sotino ratio
gen negexret`var' = exret`var'
replace negexret`var' =. if exret`var' > 0
sum exret`var'
loc exret`var' = (1+r(mean))^12 -1 //annulized excess return

loc rewrisk`var' = `aamean`var''/`asd`var''
//loc sharpe`var'  = `exret`var''/ `asd`var'' (Removed)
loc msharpe`var' = `exret`var''/ (`mVaR99`var'' * sqrt(12)) //**mVar99CF only**


***Sortino%***
sum negexret`var'
loc dsrisk`var'= r(sd)
loc sortino`var' = `exret`var''/ (`dsrisk`var''* sqrt(12))

loc adssd`var'= `dsrisk`var'' * sqrt(12)

***M^2***
// gen M^2 `var' = RFR + (`var'sharpe) * sdev(GSCI benchmark)
// loc M^2 ... 

***Omega***

***%postive month***
count if `var' >0
loc pmon`var'= r(N) / `tot`var''


//***rolling mean***
//mvsumm `var', stat(mean) win(12) gen(roll12`var') end
//sum roll12`var'
//loc maxroll`var'= r(max)* 12
//loc minroll`var'= r(min)* 12

***********************************************************************************************
mat input indstat`var' = (`aamean`var'' `tstat`var'' `agmean`var'' `asd`var'' `adssd`var'' ///
					   `rewrisk`var'' `sortino`var'' `skew`var'' ///
					   `kurt`var'' `max`var'' `min`var''	 `VaR95`var'' `mVaR95`var'' ///
					   `VaR99`var'' `mVaR99`var'' `pmon`var'' `MaxDD`var'' `DDlength`var'' `MaxRU`var'' ///
					   `RUlength`var'')	

mat rownames indstat`var' = `var'
mat colnames indstat`var' = "Annualized arithmetic mean" "t-statistics" "Annualized geometric mean" "Annualized volatility" ///
						 "Annualized downside volatility" "Reward/Risk Ratio" "Sortino Ratio" ///
						 "Skewness" "Kurtosis" "Max monthly gain" "Max monthly loss" "95%VaR" "95%VaR(Cornish-Fisher)" "99%VaR" "99%VaR(Cornish-Fisher)" ///
						 "% of positive months" "Maximum Drawdown" "Drawdown Length (months)" "Max Run-up (consecutive)" "Runup Length (months)" ///
						 
						 mat `var'_indstat`var'= indstat`var''

***********************************************************************************************
matrix `var'= `var'_indstat`var'

//matrix `var' = `var', `var'_indstat`var'

//ssc install estout	// (Package install)

estout matrix(`var', fmt("4 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 4 0")) using iStat_`var'.csv, replace

********************************************************

