未分類

Pythonによる株価テクニカル分析_ボリンジャーバンド編

目的

Pythonによる株価のテクニカル分析ということで、ボリンジャーバンドについて紹介します。
Pythonのライブラリである「mplfinance」を使用することで、
簡単なコードで、ボリンジャーバンドのグラフを作成することが可能です。

そもそもボリンジャーバンドって何?というところから、具体的な分析方法まで紹介しています。
さらに、Pythonで実際にコードを書くことで、数式への理解が深まります。

ボリンジャーバンドとは?

ボリンジャーバンドとは、移動平均標準偏差σを加味したものであり、
チャートがバンドを突き抜けるのは非常に稀なケースだといえます。
統計学に基づいて計算された指標で、値動きがバンド内に収まる確率は以下の通りです。

移動平均の標準偏差

とても簡単にいうと、移動平均がどれくらいバラつく可能性があるかを示した値です。

価格がバンド内に収まる確率

  • ±1σの範囲内に収まる確率 → 約68.3%
  • ±2σの範囲内に収まる確率 → 約95.4%
  • ±3σの範囲内に収まる確率 → 約99.7%

実行結果

ソースコード

下記のソースコードをコピーすることで、簡単にチャートを作成することができます。

準備&株価の取得

上記の実行結果を参考にしていただければ、問題ありませんが、
詳しいライブラリのインポートや株価の取得については、
下記の記事を参考にしていただければと思います。

ボリンジャーバンドによるテクニカル分析

ボリンジャーバンドのグラフを表示する関数

def BB(df, period):
    #パラメータ設定
    df['BBMA'] = df['Close'].rolling(window=period).mean()
    df['BBSTD'] = df['Close'].rolling(window=period).std()
    df['BBH1'] = df['BBMA'] + df['BBSTD'] * 1
    df['BBL1'] = df['BBMA'] - df['BBSTD'] * 1
    df['BBH2'] = df['BBMA'] + df['BBSTD'] * 2
    df['BBL2'] = df['BBMA'] - df['BBSTD'] * 2    
    df['BBH3'] = df['BBMA'] + df['BBSTD'] * 3
    df['BBL3'] = df['BBMA'] - df['BBSTD'] * 3
    
    bbargs = dict(width=1, linestyle='dashdot')
    
    #ボリンジャーバンドのグラフ設定
    add_plot = [
    mpf.make_addplot(df['BBH1'], **bbargs, color='limegreen'),
    mpf.make_addplot(df['BBL1'], **bbargs, color='limegreen'),
    mpf.make_addplot(df['BBH2'], **bbargs, color='mediumseagreen'),
    mpf.make_addplot(df['BBL2'], **bbargs, color='mediumseagreen'),
    mpf.make_addplot(df['BBH3'], **bbargs, color='forestgreen'),
    mpf.make_addplot(df['BBL3'], **bbargs, color='forestgreen'),        
    ]
    #キャンドルチャートの作成
    mpf.plot(df, type='candle', addplot=add_plot)

パラメータ設定

df:取得した株価データフレーム
下記のパラメータは、商品、期間、使い方によって、自身で数値を考える必要があります。

period:株価データを参照する日数

グラフ説明

アッパーバンド :+1σ, +2σ, +3σ
設定した日数の移動平均 + 設定した日数の標準偏差 ×(1,2,3)

ローバンド:-1σ, -2σ, -3σ
設定した日数の移動平均 – 設定した日数の標準偏差 ×(1,2,3)

一般的な分析方法
  • 上に抜けた時には高値になっているから売り
  • 下に抜けた時には安値になっているから買い
価格がバンドを突き抜ける確率
  • ±1σの範囲を突き抜ける確率 → 約31.7%
  • ±2σの範囲を突き抜ける確率 → 約5.6%
  • ±3σの範囲を突き抜ける確率 → 約0.3%

具体的なパラメータ

一般的なパラメータ(世界の投資機関がよく使用しているもの)

period:20日間

BB(df_stock_data,20)

ボリンジャーバンド_2σのグラフを表示する関数

def BB_2σ(df):
    #パラメータ設定
    df['BBMA'] = df['Close'].rolling(window=20).mean()
    df['BBSTD'] = df['Close'].rolling(window=20).std()
    df['BBH2'] = df['BBMA'] + df['BBSTD'] * 2
    df['BBL2'] = df['BBMA'] - df['BBSTD'] * 2    
    
    bbargs = dict(width=1, linestyle='dashdot')
    
    #ボリンジャーバンドのグラフ設定
    add_plot = [
    mpf.make_addplot(df['BBH2'], **bbargs, color='green'),
    mpf.make_addplot(df['BBL2'], **bbargs, color='green'),       
    ]
    #キャンドルチャートの作成
    mpf.plot(df, type='candle', addplot=add_plot, mav=20)

グラフ説明

ミドルバンド:20日間移動平均

アッパーバンド:20日間移動平均 + 20日間標準偏差×2

ローバンド:20日間移動平均 ー 20日間標準偏差×2

分析方法

ボリンジャーバンド幅が狭い:標準偏差が低い→バラツキが小さい

ボリンジャーバンド幅が広い:標準偏差が高い→バラツキが大きい

参考にした本

テクニカル分析の方法だけでなく、
投資について、わかりやすく書かれているので、大変参考になると思います。
電子書籍の方が半額で購入できるので、そちらをオススメします。



おすすめのPython学習方法

ABOUT ME
チェルシー
【プロフィール】  年齢:30代前半  性別:オス 【主な職歴】  メーカー勤務  製品設計開発_メカ設計:7年  開発業務自動化:1年半 元々、メカ設計エンジニアとして、製品設計開発に携わっていました。新しいスキルを身につけたいと独学でPythonを勉強し始め、現在、本業でソフトエンジニアとして働いています。具体的には、Pythonを使った製品評価業務の自動化を推進しています。 また、製品市場データ分析業務など可視化なども実施しています。 【2023年度目標】 1. 副業収入:月5,000円 2. 塩漬けにしていたブログをChatGPTなどを活用して執筆の効率化し、1年半前に開設した本サイトを改善する 3. 定期的に株式投資おすすめ成長株の紹介記事を投稿 4. 自作中の米国成長株の分析ツールのコーディング紹介 5. 株式投資の本で学んだ情報をアウトプットする