ファイナンス機械学習: 金融データ構造 練習問題 ドルバー、ドルインバランスバー
前記事でTick Imbalance Barの取り方を扱った。
Tick Imbalance Bar とDollar/Volume Imbalance Barの取り方で違うのは、$${\theta_T}$$である。
Tick rule$${b_t}$$とその境界条件は同じであり、$${v_t}$$を取引総額、または出来高として
$${\theta_T=\displaystyle{\sum^T_{i=1}b_tv_t}}$$
と計算する。
tickでバーをとった場合と比べ、分割注文や寄り付きなどによる外れ値の影響を受け難いことがメリットである。
ドルバーと同じく、2009年以降のE-mini S&P 先物tickデータを読み込み、ドルインバランスバーをとり、価格系列データを作成する。
price=SP_data.loc['2009-01-01':]['price']
dollar=SP_data['price']*SP_data['volume']
tick_im=get_imbalance(price)*dollar.iloc[1:]
def ImbalanceBar(data,i_s):
prices=data['price'].to_numpy()
datetimes=data.index.to_numpy()
vols=data['volume'].to_numpy()
bars = np.zeros(shape=(len(prices), 6), dtype=object)
ind = 0
last_tick = 0
for i in i_s:
bars[ind][0] = datetimes[i] # time
bars[ind][1] = prices[last_tick] # open
bars[ind][2] = np.max(prices[last_tick: i+1]) # high
bars[ind][3] = np.min(prices[last_tick: i+1]) # low
bars[ind][4] = prices[i] # close
bars[ind][5] = np.sum(vols[last_tick: i+1]) # volume
last_tick = i
ind += 1
return bars_df(bars[1:ind])
dImdf=ImbalanceBar(SP_data,i_s)
ドルインバランスバーとドルバーのキャンドルスティックを表示する。
import plotly.graph_objects as go
m_figs = make_subplots(
rows=2, cols=1,
subplot_titles=(f'Dollar d={round(dv,2)}', 'Dollar Imbalance'),
shared_xaxes=True,
)
m_figs.add_trace(go.Candlestick(x=ddf.index,
open=ddf['Open'],
high=ddf['High'],
low=ddf['Low'],
close=ddf['Close'],
showlegend=False), row=1, col=1)
m_figs.add_trace(go.Candlestick(x=dImdf.index,
open=dImdf['Open'],
high=dImdf['High'],
low=dImdf['Low'],
close=dImdf['Close'],
showlegend=False), row=2, col=1)
m_figs.update_layout(xaxis1={"rangeslider":{"visible":False}})
両方のリターン系列相関を比較する。
ddf_r_corr = ddf['Close'].pct_change().dropna().autocorr()
dImdf_r_corr=dImdf['Close'].pct_change().dropna().autocorr()
print('Dollar Bar:',ddf_r_corr)
print('Dollar Imbalance Bar:',dImdf_r_corr)
この記事が気に入ったらサポートをしてみませんか?