pythonでシステムトレード:ボリンジャーバンドを描く
ボリンジャーバンドとは
ボリンジャーバンドは、よく次のようなグラフで説明されます。
monex証券HPより。https://info.monex.co.jp/technical-analysis/indicators/003.html
よく証券会社のHPで見る絵ですが、ここで疑問がわきます。なぜ?25移動平均線(25SMA)、なぜ、±1、2σなの?
5SMA、7SMAとか、0.9σとか、1.4σとか、半端な値に最適値があるかもしれません。これくらいDXの世の中なので、自宅のコンピューターのパワーで計算は簡単です。
このσとSMAの最適値を求めるのをやってみようと昨晩思いつきました。思いついただけで、うまくいくかどうかはわかりませんが・・・。
そのためには、まずボリンジャーバンドを描く必要があります。
### ボリンジャーバンドを描く
ボリンジャーバンドを描くためには、移動平均線を描いたのと同様にrolling
を使って標準偏差を求めます。
df["5day_std"]=df["end_price"].rolling(5).std().round(1)
この標準偏差を平均値に足したり引いたりするだけです。+1σなら、
df["5day_bol_+1"]=df["5day_ave"]+df["5day_std"]
です。
#標準偏差を求める
df["5day_std"]=df["end_price"].rolling(5).std().round(1)
#ボリンジャーバンドを求める(±1σ)
df["5day_bol_+1"]=df["5day_ave"]+df["5day_std"]
df["5day_bol_-1"]=df["5day_ave"]-df["5day_std"]
細かく見てみようと思います。20年12月の状況です。トレンドを追って上昇しているところと反転しているところがあります。
このグラフは±1σですが、コンピューターですので、いくらでも細かく計算できます。例えば±0.8σとか、±1.1σとか。
この移動平均線(SMA)の日数とバンド幅で最適値を見付けたいと思います。
まず最初の単純な作戦は、
短期勝負にする。移動平均線の日数は数日。
ボリンジャーバンドで反転するかトレンド入りするかのバンド幅と日数の最適解がないか探索する。
これで考えてみようと思います。
では、次にそのための特徴量と目的変数を作っていこうと思います。