ファイナンス機械学習:標本の重み付け 練習問題 ドルバーでの同時発生ラベルの数

E-mini S&P500先物のティックデータからドルバーをとり、最初のバリアに接触する時間を取得するgetEventsを用いて、t1行列を導出し、これについて、各時点で重複しているラベルの数を計算する。

import Labels as labels # labeling
import Bars as bars # dollar bar
from datetime import datetime
SP_data = pd.read_csv('SP.csv')
SP_data = SP_data[SP_data['volume'] > 0]
SP_data['datetime'] = SP_data['date'] + "/" + SP_data['time']
SP_data['datetime'] = SP_data['datetime'].apply(lambda dt: datetime.strptime(dt, '%m/%d/%Y/%H:%M:%S.%f'))
#SP_data=SP_data[SP_data['datetime'] >= datetime(2009, 1, 1)]
SP_data.index=SP_data['datetime']
SP_data.drop(['date','time'],axis=1, inplace=True)
SP_data.drop(['datetime'],axis=1, inplace=True)
SP_data.volume=SP_data.groupby(SP_data.index).volume.sum()
SP_data = SP_data[~SP_data.index.duplicated(keep='first')]

dv=100_000
Dbar=bars.getDollarBars(SP_data,dv)
minRet = .0005 
ptsl=[2,2]

span0=20
price=Dbar['Close']
DailyVol=labels.getDailyVol(price,span0)
DbarRtn = price.pct_change().dropna()
thred=DbarRtn.std()
Events=bars.getTEvents(DbarRtn[DailyVol.index[0]:], thred)  #CUSUM
t1 = labels.addVerticalBarrier(price, Events, numDays=1)
TPevents=labels.getEventsML(price,Events,ptsl,DailyVol,minRet,t1=t1,side=None).dropna()
TPevents
getEvents出力

これから、同時発生的なラベルの数をmpNumCoEvents関数を適用して導出し、リターンの指数加重移動標準偏差と合わせてプロットする。

COEvent=pd.DataFrame({
    'NumConc':mpNumCoEvents(Dbar.index, t1=TPevents['t1'], period=TPevents.index),
    'RtnEWMS':DbarRtn.ewm(span=20).std().dropna()}).dropna()
import matplotlib.pyplot as plt
%matplotlib inline

fig, ax = plt.subplots(figsize=(10,8))
COEvent.NumConc.plot(legend=True, ax=ax)
COEvent.RtnEWMS.plot(legend=True,secondary_y='RtnEWMS',alpha=0.4, ax=ax)
同時発生ラベル数とリターンの指数荷重移動標準偏差

横軸を同時発生ラベル数、縦軸を理たんの指数荷重移動標準偏差として散布図を描く。

plt.figure(figsize=(10, 8))
plt.scatter(COEvent.NumConc,COEvent.RtnEWMS)
plt.xlabel('Number of CoEvents')
plt.ylabel('Standard Deviation of Return EWM')

plt.show()
scatter plot: Std. of EWM Return vs. Number of CoEvents

この記事が気に入ったらサポートをしてみませんか?