페이지

Post List

2017년 8월 3일 목요일

US Sector Rotation Using SPDR ETF (+ R Code)



미국에 상장된 SPDR의 섹터 ETF 9종을 이용한
섹터 로테이션 전략을 테스트합니다.


먼저, 사용된 9개 ETF는 다음과 같습니다.

XLY: Consumer Discretionary SPDR
XLP: Consumer Staples Select Sect. SPDR
XLF: Financial Select Sector SPDR
XLE: Energy Select Sector SPDR
XLV: Health Care SPDR
XLI: The Industrial Select Sector SPDR
XLB: Materials Select Sector SPDR
XLK: Technology Select Sector SPDR
XLU: Utilities SPDR 


Cash 대용 ETF는 다음과 같습니다.

SHY: iShares Barclays 1-3 Year Treasry Bnd


9개 섹터 ETF의 누적수익률은 다음과 같습니다.



다음은 섹터 모멘텀 전략의 백테스트 입니다.

먼저 9개 섹터 중 12개월 누적 수익률 상위 5개 섹터를 선택한 후,
이 중 누적 수익률이 (+)인 섹터만 선택합니다.

선택된 섹터에 각 20%씩 비중을 부여하며,
주식 비중이 남을 경우 단기채권 혹은 현금 ETF를 매입합니다.

매매에 따른 수수료는 매수/매도 시 30bp로 가정합니다.

아래는 해당 로직을 적용한 백테스트 포트폴리오와,
미국 S&P 500을 추종하는 SPY ETF 수익률의 비교입니다.




Portfolio
SPY
Ann Ret (Arith)
6.58%
6.75%
Ann Ret (CAGR)
5.77%
4.95%
Ann Std Dev
13.90%
19.56%
Ann Sharpe
0.4154
0.2532
Win Ratio
0.5346
0.5391
MDD
27.34%
55.19%


전체적으로 수익률은 비슷하지만
단순 지수의 Buy & Hold 대비

훨씬 낮은 변동성과 MDD를 보입니다.


다음은 매 월별 투자비중과 Cash의 투자비중입니다.

2002년과 2008년 Market Crash 시절,
대부분의 금액이 Cash에 투자되어 추가적인 하락을 방어합니다.




다음은 매 월별 턴오버 입니다.


위 테스트의 코드는 다음과 같습니다.




ipak = function(pkg){
  new.pkg = pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg)) 
    install.packages(new.pkg, dependencies = TRUE)
  sapply(pkg, require, character.only = TRUE)
}

stat_summary = function(x) {
  x = as.matrix(x)
  stat_table = round(rbind(Return.annualized(x, geometric = FALSE), table.AnnualizedReturns(x), UpsideFrequency(x), maxDrawdown(x)), 4)
  rownames(stat_table) = c("Ann Ret (Arith)", "Ann Ret (CAGR)", "Ann Std Dev", "Ann Sharpe", "Win Ratio", "MDD")
  return(stat_table)
}

packages = c("PerformanceAnalytics", "quantmod", "PortfolioAnalytics")
ipak(packages)

symbols = c("XLY", "XLP", "XLF", "XLE", "XLV", "XLI", "XLB", "XLK", "XLU", "SHY")
symbols_bm = c("SPY")

getSymbols(c(symbols,symbols_bm), src="yahoo", from = "1998-12-31")

##################################################
### XLY: Consumer Discretionary SPDR #############
### XLP: Consumer Staples Select Sect. SPDR ######
### XLF: Financial Select Sector SPDR ############
### XLE: Energy Select Sector SPDR ###############
### XLV: Health Care SPDR ########################
### XLI: The Industrial Select Sector SPDR #######
### XLB: Materials Select Sector SPDR ############
### XLK: Technology Select Sector SPDR ###########
### XLU: Utilities SPDR ##########################

### SHY: iShares Barclays 1-3 Year Treasry Bnd ###

prices = list()
for(i in 1:length(symbols)) {
  prices[[i]] = Ad(get(symbols[[i]]))
}
prices = do.call(cbind, prices)

bm = Ad(get(symbols_bm))

rets = na.omit(Return.calculate(prices[, -ncol(prices)]))
ret_cash =na.omit(Return.calculate(prices[, ncol(prices)]))
ret_bm = na.omit(Return.calculate(bm))

num = 5 
lookback = 12
fee = 0.0030

wts = list()
ep = endpoints(rets, on = "months") 

for(i in (lookback+1) : (length(ep)) ) {
  
  sub_cum = Return.cumulative( rets[c(ep[i-12] : ep[i]) , ])
  
  K = which(rank(- sub_cum) <= num & sub_cum >= 0)
  wt = rep(0, ncol(rets))
  wt[K] = 1 / num
  names(wt) = colnames(rets)
  wt = xts(t(wt), order.by = index(rets[ep[i]]))
  wts[[i]] = wt
}

wts = round(do.call(rbind, wts), 3)
wts$zeros = 1 - rowSums(wts)
rets$zeros = ret_cash

Sector = Return.portfolio(R = rets, weights = wts, verbose = TRUE)
Sector_ret = Sector$return
Sector_Turnover = xts(rowSums(abs(Sector$BOP.Weight - lag(Sector$EOP.Weight)), na.rm = TRUE),
                      order.by = index(Sector$BOP.Weight))
Sector_ret_net = round(Sector_ret - Sector_Turnover * fee, 4)

compare = na.omit(cbind(Sector_ret_net,ret_bm))
charts.PerformanceSummary(compare, main = "")
stat_summary(compare)
chart.StackedBar(wts, col = rainbow10equal)
apply.yearly(compare, Return.cumulative)

2017년 7월 29일 토요일

지극히 개인적으로 생각하는 운용업의 미래, 펀드 매니저에서 포트폴리오 매니저의 시대로





주변에 매니저들 만나서 술먹다 보면 한결같이 생각하는게, ‘무슨 주식 사야되냐?’ 보다는 ‘매니저 일 얼마나 더 할 수 있을까?’ 이다. 정확히 말하자면 ‘액티브 매니저’가 과거 영광의 재현 보다는 앞으로 망하지 않을까 하는 걱정이 크다. 미리 말하자면 나는 액티브 매니저들을 매우 존경하고, 최근 액티브의 추락은 매우 마음이 아프지만, 현실은 현실이니...

불과 십여년 전만 하여도 주식에 투자한다는 것은 선택받은 몇몇 전문가의 영역이라 여겨졌다. 대박을 꿈꾸며 일단 지르기식 투자를 했던 부모님 세대들은 어김없이 설거지를 담당하기 일수였고, 자신의 실수를 인식한 후 칼을 갈기 보다는, ‘역시 주식은 패가 망신의 지름길’ 이라는 그릇된 가르침만 얻은 채 소위 안전한 은행 예적금에 전재산을 묶어 두었다. 그래, 우리 부모님 얘기다.

다른 모습도 있다. ‘역시 투자는 전문가에게 맡겨야 한다’는 믿음에서 커진 시장이 바로 공모 펀드이다. 국내 환경이 미친듯한 고성장이었건, 과거 주식판이 노다지였건, 내부자 정보로 수익을 냈건 말건, 어찌됐건 본인들이 직접 투자해서 망하기만 하던 주식이 펀드에 투자하면 그래도 은행 이자보다 훨씬 높은 수익을 안겨다 주니 신통치 않은가! 이때부터 소위 ‘액티브 펀드’의 전성시대가 시작되었다.

이제는 시장이 효율적이어서 액티브가 패시브를 못이기니 마니 하는 아카데믹하고 고리타분한 얘기는 사실 별 관심이 없다. 말하고자 하는 바는, 결국 ‘Regime Change’의 핵심은 소비자들이 똑똑해졌다는 것이다. 증권사 리서치도 몇번만 구글링하면 쉽게 얻을 수 있는 시대이며, 기업들의 실적도 실시간으로 무료로 받아보는 시대이다. 애널리스트들이 팟캐스트로 무료 과외까지 친절하게 해준다. 전문가라 불리던 펀드매니저들의 무기를 소위 개미투자자들도 모두 가지고 있기에, 굳이 그들에게 돈을 맡길 필요가 없다. 오히려 ‘내부 가이드라인, 투자 가능 종목 제한, 각종 법규, 리스크 한도’ 등 여러 제약에 묶인 매니저들보다 훨씬 유연하게 투자를 할 수 있다. 실제로 공모 펀드 자금은 매해 줄어들고 있지 않은가?

또한 똑똑해진 투자자들은 ETF의 성장과 더불어 시장의 판을 바꾸고 있다. 일반 투자자가 굳이 국내 주식이 아닌 해외 지수, 환율, 원자재 등에 투자하려면 ETF를 통해 손쉽게 할 수 있다. 소위 ‘다이나믹 베타플레이’가 가능해진 것이다. 펀드매니저에게 찾아가 ‘제 돈을 모두 드릴 테니, 돈 좀 잘 굴려주십시오’ 가 아닌, ‘공부는 내가 알아서 하고 투자도 알아서 할 테니, 투자할 수 있는 좋은 수단이나 빨리빨리 내놓으시오’ 로 투자자들이 스마트해졌다. 매니저 혹은 운용사에게 자판기 마냥 패시브 상품(ETF)을 내놓기를 원한다.

그렇다면 액티브 매니저는 사라질까? 글쎄다. ‘이렇게 손쉬운 로직으로 돈을 쉽게 버는데 뭐하러 매니저들에게 돈을 맡깁니까!’ 라는 글을 보면, ‘랩만 해도 수백억은 금방 버는데 뭐하러 머리 아프게 주식따위를 합니까!’ 라고 도끼가 비웃겠지. 자기가 잘한다고 남들도 잘해야 한다는건 폭력이다. HTS나 MTS를 켤 시간도 없고 투자 공부따위 할 시간도 없이 바쁜 사람도 있다. 그들은 어찌됐건 투자의 아웃소싱이 필요하다.

그러나 공모 펀드 내에서 액티브 매니저의 자리는 확실히 줄어들 것이다. 시장에 있어보면 정말 귀신같이 주식을 잘하는 매니저들이 존재하고, 그런 분들은 점점 헤지펀드처럼 수익쉐어가 확실한 곳으로 점점 옮겨가겠지.

반면 나머지 시장은 소위 패시브, 퀀트 등의 역할이 확대 될 것이다. 내가 퀀트 매니저라서가 아니라 액티브 매니저들도 동의하는 내용이다. 알파고 이후 우후죽순처럼 등장한 로보어드바이저가 지금 시점에서는 분명 과도기이기도 하고, 대다수가 유행에 편승하는 마바라라고 생각은 들지만, 분명 대다수 시장을 장악할 요소라고는 느껴진다. 안정적으로 매해 6~8% 만 벌어줘도 누가 투자를 마다하겠는가?

또한 ETF의 성장, 그리고 저성장 환경에서 자산배분의 중요성이 커지는 만큼, 소위 ‘매크로 매니저’의 역할이 커질 것이다. (사실 따지고 보면 로보어드바이저도 이거지만…) 원래 ‘펀드 매니저’의 공식 명칭은 ‘포트폴리오 매니저’ 가 아니던가. 예전에는 한 펀드내에서 주식 혹은 채권만 죽어라 패면서 투자했다면, 앞으로는 더욱더 매크로한 관점에서 포트폴리오 투자를 하겠지. A라는 국가의 시장 내에서 무슨 주식이 좋을까 죽어라 고생하는거 보다, A’, B’ 중 어떤 자산이 더 좋을지 판단하는게 사실 더 쉽고 리스크도 낮으니까. 굳이 알주식, 알채권 보다 ETF만으로 펀드나 자금을 운용하는 EMP (ETF Managed Portfolio) 매니저의 역할도 더욱 커질거라 본다. 혹은 매니저들의 메사끼를 불신하는 투자자들을 위해 매우 합리적이고 투명한 투자 로직을 제공해주는 ‘Rule Provider’의 역할도 커질 것이라 본다.

결국 매크로를 엄청 잘보는 ‘시장의 마법사’가 되거나, 코딩을 죽어라 해서 ‘퀀트의 마법사’가 되거나, 그나마 커질 시장은 이 두가지가 아닐까 한다. 지금 시대에 ‘저는 졸업하고 피터린치와 같은 훌륭한 액티브 매니저가 되고 싶습니다’ 라고 하는건… 글쎄다… 거듭 말하지만 투자는 Return 과 Probability의 게임 아닌가. 그냥 니 돈 투자를 훌륭하게 하라고 추천하고 싶다.

2017년 7월 24일 월요일

Value & Momentum in Commodities



상품(Commodity) 자산 내에서의
밸류모멘텀 효과에 대해 테스트 해보도록 합니다.

테스트에 사용된 기초자산은 아래 23개 입니다.


[ Commodities List ]




Aluminum
Copper
Nickel
Zinc
Lead
Tin
Brent Crude
Gas Oil
Live Cattle
Lean Hogs
Corn
Soybean
Soy Meal
Wheat
WTI Crude
Heating Oil
Natural Gas
Gold
Silver
Cotton
Coffee
Cocoa
Sugar


방법론은 AQR Capital의 방법론과 동일합니다.


먼저 모멘텀의 측정은 각 상품 별 Future의 Excess Return 기준
12-1M 수익률로 측정합니다.

누적 수익률 상위 30% 자산은 Long, 하위 30% 자산은 Short을 하며,
매월 말 리밸런싱을 가정합니다. (동일가중)



Long
Short
LS
Ann Ret (Arith)
4.32%
1.75%
6.07%
Ann Ret (CAGR)
3.06%
0.59%
4.81%
Ann Std Dev
16.12%
15.24%
16.53%
Ann Sharpe
0.1898
0.0387
0.2913
MDD
57.44%
58.07%
46.33%


무위험 포트폴리오(LS: Long Short)이 장기간 상승하며
상품 자산 내에서도 모멘텀 효과가 있음이 확인됩니다.



다음으로 밸류의 측정은
Spot Price 기준 60개월 수익률의 낙폭 으로 측정합니다.
(낙폭이 클수록 밸류가 높음을 의미합니다.)



Long
Short
LS
Ann Ret (Arith)
2.43%
-0.71%
1.72%
Ann Ret (CAGR)
1.49%
-2.06%
0.47%
Ann Std Dev
13.85%
16.60%
15.84%
Ann Sharpe
0.1073
-0.1244
0.0297
MDD
58.78%
83.57%
55.57%


Short Portfolio의 손해가 심하여
무위험 포트폴리오(LS: Long Short)가 유의미한 성과를 보이지는 않습니다.



원 논문에서도 2000년 이후 상품 자산내에서
모멘텀효과는 지속되는 반면, 밸류 효과는 강하지 않음이 확인됩니다.




다음은 모멘텀과 밸류 포트폴리오간의 상관관계 입니다.

전체기간 상관관계가 -0.48 이며
아래 나타난 360일 롤링 상관관계도 대부분 0 이하로
매우 낮은 상관관계가 확인됩니다.


마지막으로 50 : 50 분산투자 포트폴리오 입니다.


Momentum
Value
50 : 50
Ann Ret (Arith)
6.07%
1.72%
3.82%
Ann Ret (CAGR)
4.81%
0.47%
3.54%
Ann Std Dev
16.53%
15.84%
8.24%
Ann Sharpe
0.2913
0.0297
0.4298
MDD
46.33%
55.57%
24.55%


둘 간의 분산효과로 인해 변동성과 MDD가 확연히 감소하였으며,
샤프지수가 각각에 비해 상승하였습니다.

마지막으로 50 : 50 포트폴리오의 연도별 수익률입니다.