PythonでTA-Libを使ってボリンジャーバンドを取得してみた

TA-Lib

PythonでTA-Libを使ってボリンジャーバンドを取得してみました。ボリンジャーバンドとは何か、またPythonのTA-Libを使ってどのようにボリンジャーバンドを取得するか記載します。

ボリンジャーバンドとは何か

ボリンジャーバンドは、金融市場におけるテクニカル分析のツールの一つです。これは、統計的な価格の変動を視覚的に表現するために使用されます。通常、株価のチャート上に描かれ、移動平均線の周りに上下に均等な幅で描かれたバンドで構成されます。

ボリンジャーバンドには通常、3つのラインが含まれます:

  1. 中心のライン:通常は移動平均線で、過去の特定期間の価格の平均を表します。
  2. 上部バンド:中心ラインから一定の標準偏差を加えたラインで、価格の上限を示します。
  3. 下部バンド:中心ラインから一定の標準偏差を引いたラインで、価格の下限を示します。

ボリンジャーバンドは、価格が上部バンドや下部バンドから逸脱するときに過去の相場の平均的な変動範囲を超えていることを示唆し、その後の価格の逆転や反発を予測するのに役立ちます。トレーダーや投資家はこれらのバンドを使用して、取引のタイミングや価格の方向性を判断するのに役立てることがあります。

TA-Libを使ったボリンジャーバンドの取得方法

PythonにTA-Libをインストールしていない場合はインストールします。
インストール方法はWindowsのPythonにTA-Libをインストールする方法 (argentinajapan.com)を参考にして下さい。

ソースコード

まず、TA-Libをインポートします。

import talib as ta

期間(timeperiod)=10,標準偏差(nvdevup,nbdevdn)=0.7を設定したときの上部バンド(df[‘bband_up’])、中心のライン(df[‘bband_mid]’)、下部バンド(df[‘bband_low’])のボリンジャーバンドを求める場合、以下のようにコードに記載します。(ちなみに matype=0は移動平均線タイプ:単純移動平均線の意味です)

df['bband_up'],df['bband_mid'],df['bband_low']=ta.BBANDS(df['close'],timeperiod=10,nbdevup=0.7,nbdevdn=0.7,matype=0)

以下にMT5から2024/1/8 10:00から 2024/1/8 13:59までまでドル円(USDJPY)のデータを1分単位で取得して、これに対して 期間=10,標準偏差=0.7(上部、下部)の上部バンド、中心ライン、下部バンドのボリンジャーバンドを取得するプログラム例を記載します。

尚取得したデータ最後の10行のデータ(2024/1/8 13:50から13:50のデータ)を表示させます。

import MetaTrader5 as mt5
import pandas as pd
from datetime import datetime
import pytz
import numpy as np

#Ta-Lib インポート
import talib as ta

#因みにloginidにはmt5へのloginid,ServerNameはmt5のサーバー名, Passwordには MT5へのログインパスワードを指定します    
if mt5.initialize(login=loginid, server="ServerName",password="Password") == False:
    print (mt5.last_error())
    exit()
 
timezone = pytz.timezone("Etc/UTC")
date_from = datetime(2024, 1, 8, 12,0, tzinfo=timezone) #2024/1/8 12:00
date_to = datetime(2024, 1, 8, 13, 59, tzinfo=timezone) #2024/1/8 13:59

ticks = mt5.copy_rates_range("USDJPY",mt5.TIMEFRAME_M1,date_from,date_to)
mt5.shutdown()
df = pd.DataFrame(ticks)
df['time']=pd.to_datetime(df['time'], unit='s')

#ボリンジャーバンド 期間10指定ここから
df['bband_up'],df['bband_mid'],df['bband_low']=ta.BBANDS(df['close'],timeperiod=10,nbdevup=0.7,nbdevdn=0.7,matype=0)

#print(df.head(20))
print(df.tail(10))

実行結果

                   time     open     high      low    close  tick_volume  spread  real_volume    bband_up  bband_mid   bband_low
110 2024-01-08 13:50:00  144.552  144.552  144.517  144.526          105       3            0  144.527386   144.5012  144.475014
111 2024-01-08 13:51:00  144.526  144.558  144.526  144.538           87       3            0  144.534177   144.5101  144.486023
112 2024-01-08 13:52:00  144.537  144.545  144.524  144.543           87       3            0  144.539732   144.5194  144.499068
113 2024-01-08 13:53:00  144.543  144.567  144.542  144.559           84       3            0  144.545601   144.5294  144.513199
114 2024-01-08 13:54:00  144.559  144.566  144.553  144.558           77       3            0  144.550704   144.5357  144.520696
115 2024-01-08 13:55:00  144.558  144.559  144.537  144.542           47       3            0  144.551164   144.5411  144.531036
116 2024-01-08 13:56:00  144.542  144.554  144.535  144.536           69       3            0  144.550900   144.5437  144.536500
117 2024-01-08 13:57:00  144.536  144.571  144.522  144.569          100       3            0  144.554861   144.5459  144.536939
118 2024-01-08 13:58:00  144.569  144.587  144.565  144.583           67       3            0  144.562160   144.5508  144.539440
119 2024-01-08 13:59:00  144.583  144.587  144.575  144.583           47       3            0  144.566937   144.5537  144.540463

無事に値を取得することができました。

タイトルとURLをコピーしました