backtesting은 각각 distance approach와 cointegration approach를 해봄.
1) 현선물 공통된 ticker를 이용하여 거래 -> 각각 엥겔-그레인저 검정을 통하여 pair selection
2) pair의 spread가 과거 데이터의 평균 +2*표준편차 만큼 벌어졌을 때 포지션 진입
과거 데이터를 이용하여 구한 Beta를 이용하여 현재 spread가 역전 되었을 때 청산
3) 수렴 속도 개념 도입.
a)수렴속도(v)=1/반감기 -> 반감기는 spread가 절반으로 줄어드는데 걸리는 시간.
b) spread가 공적분검정을 기각하였으므로 I(0) 시계열 이므로 간단하게 AR(1) 모형을 이용하여 반감기 공식을 적용.
-np.log(2)/v
##여기서 v는 ar(1) 모형의 계수
c) 수렴 속도가 빠를 수록 상대적으로 더 큰 레버리지, 더 많이 진입
4)병렬 처리
a)대략 139개의 티커를 이용하여 pair selection을 하는 과정을 ray를 이용하여 병렬로 처리
@ray.remote
def pair_selection(ticker,y=future_panel_minute,x=coin_panel_minute):
y,x=y[ticker].values,x[ticker].values
if coint(y,x,maxlag=12)[0]<-2.58:
results=sm.OLS(y,x).fit()
beta=results.params[0]
spread=results.resid
spread=pd.Series(spread,name='spread')
velo=-np.log(2)/DFGLS(spread).regression.params['Level.L1']
threshold=spread.std()*2+spread.mean()
return (ticker,beta,spread,velo,threshold)