ファイナンス機械学習: 金融データ構造 練習問題 ドルバー、ドルインバランスバー

前記事で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)

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