【Pythonテクニカル分析】アームズ・ボックス
アームズ・ボックス概要
アームズ・ボックスは横軸に出来高、縦軸に株価をとるチャートになっている。チャートはボックスで表現し、一つのボックスの縦軸方向の幅は当日の高値と安値の幅をとる。ボックスの横軸方向の出来高の取幅は出来高の平均値(過去二年)の2/3で割った値を基準として、基準との比率を用いる。
アームズボックスの見方
ボックスが縦長の場合:出来高を伴わず価格が上昇・下降していることから価格が上下に動きやすいことを表す。
ボックスが横長の場合:価格の変動に大きな出来高をとも立っていることから値動きが重いことを表す。
描画する際の難所
通常の棒グラフと違い、ボックスの下部(bottom)をボックス毎に指定する必要がある。また、出来高が日毎に異なるため、ボックスの横軸方向の描画開始位置も個別に指定する必要がある。これについては出来高の数値を累積することで描画した。
実際のコード
日経平均のデータから過去2週間分のアームズボックスを描画する例
# ライブラリの読み込み
import pandas_datareader as pdr
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
# データ取得期間設定
current_date = datetime.now()
two_years_ago = current_date - timedelta(days=365*2) # 2年前を設定
formatted_date = two_years_ago.strftime("%Y-%m-%d")
df = pdr.DataReader('^NKX', 'stooq',start=formatted_date) # データの取得
#前処理
df.dropna(inplace=True)
df.sort_values('Date', inplace=True) # 日付順にソート
# 出来高をポイント化
vol_width_ave = df['Volume'].mean() * 2 / 3
df['vol_point'] = df['Volume'] / vol_width_ave
# 横軸のボックスの描画位置を計算
df['left'] = df['vol_point'].cumsum().shift(1).fillna(0)
# 縦軸の幅を計算
df['range'] = df['High'] - df['Low']
df_plt = df.tail(14) # 直近2週間分を抽出
# 描画
plt.figure(figsize=(10, 3))
plt.bar(df_plt['left'], df_plt['range'],bottom=df_plt['Low'], width = df_plt['vol_point'], alpha = 0.6, align='edge', edgecolor = 'k', linewidth = 1)
描画できたグラフ
参考図書
テクニカル分析大全集(シグマベイズキャピタル)