PythonでTA-Libを使ってボリンジャーバンドを取得してみました。ボリンジャーバンドとは何か、またPythonのTA-Libを使ってどのようにボリンジャーバンドを取得するか記載します。
ボリンジャーバンドとは何か
ボリンジャーバンドは、金融市場におけるテクニカル分析のツールの一つです。これは、統計的な価格の変動を視覚的に表現するために使用されます。通常、株価のチャート上に描かれ、移動平均線の周りに上下に均等な幅で描かれたバンドで構成されます。
ボリンジャーバンドには通常、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
無事に値を取得することができました。