PythonでTA-Libを使ってADX(+DI,-DI)を取得してみました。ADXとは何か、またPythonのTA-Libを使ってどのようにADXを取得するか記載します。
ADX(Wilder)とは何か
ADXは、平均方向性指標(Average Directional Index)の略称であり、J. Welles Wilderによって開発されたテクニカル分析ツールです。ADXは、市場のトレンドの強さや方向性を示すために使用されます。通常、ADXは、+DI(プラス方向性指標)と-DI(マイナス方向性指標)とともに使用され、これらの線の相対的な位置と動きを分析することによって、トレンドの強さや方向性を評価します。ADX Wilderは、Wilderが開発したADXのバージョンであり、トレンドの方向性と強さを計算するための特定の方法を指します。
TA-Libを使ったADX Wilder の取得方法
PythonにTA-Libをインストールしていない場合はインストールします。
インストール方法はWindowsのPythonにTA-Libをインストールする方法 (argentinajapan.com)を参考にして下さい。
ソースコード
まず、TA-Libをインポートします。
import talib as ta
ADX(Wilder)+DI,-DI 取得処理を以下のように記載します。(以下の例では期間14で取得しています)
df['adx14']=ta.ADX(df['high'],df['low'],df['close'],timeperiod=14)
df['pDI']=ta.PLUS_DI(df['high'],df['low'],df['close'],timeperiod=14)
df['mDI']=ta.MINUS_DI(df['high'],df['low'],df['close'],timeperiod=14)
因みに df[‘high’]はMT5で求めた高値、df[‘low’]は低値、df[‘close’]は終値になります。
以下にMT5から2024/1/8 10:00から 2024/1/8 13:59までまでドル円(USDJPY)のデータを1分単位で取得して、これに対して期間14のADX(Wilder),+DI,-DIを取得するプログラム例を記載します。
尚取得したデータ最後の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にログインするためのID,servernameにはMT5のサーバー名,passwordにはそのパスワードを入力してください。
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, 10,30, tzinfo=timezone) #2024/1/8 10:30
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')
df['adx14']=ta.ADX(df['high'],df['low'],df['close'],timeperiod=14)
df['pDI']=ta.PLUS_DI(df['high'],df['low'],df['close'],timeperiod=14)
df['mDI']=ta.MINUS_DI(df['high'],df['low'],df['close'],timeperiod=14)
print(df.tail(10))
実行結果
time open high low close tick_volume spread real_volume adx14 pDI mDI
200 2024-01-08 13:50:00 144.552 144.552 144.517 144.526 105 3 0 24.345420 31.168367 14.315884
201 2024-01-08 13:51:00 144.526 144.558 144.526 144.538 87 3 0 25.409152 30.171404 13.166586
202 2024-01-08 13:52:00 144.537 144.545 144.524 144.543 87 3 0 26.274426 28.551471 12.971002
203 2024-01-08 13:53:00 144.543 144.567 144.542 144.559 84 3 0 27.646038 32.380049 12.135649
204 2024-01-08 13:54:00 144.559 144.566 144.553 144.558 77 3 0 28.919677 31.252916 11.713213
205 2024-01-08 13:55:00 144.558 144.559 144.537 144.542 47 3 0 29.094712 29.388517 15.353021
206 2024-01-08 13:56:00 144.542 144.554 144.535 144.536 69 3 0 29.136334 27.843652 15.099296
207 2024-01-08 13:57:00 144.536 144.571 144.522 144.569 100 3 0 29.704944 28.716346 13.175701
208 2024-01-08 13:58:00 144.569 144.587 144.565 144.583 67 3 0 30.667005 31.270038 12.411194
209 2024-01-08 13:59:00 144.583 144.587 144.575 144.583 47 3 0 31.560347 30.239358 12.002113
無事データが取得できました。
最後に
ここで取得したデータ結果をMT5のADXと比較したい場合は、MT5のADX(Wilder)インディケータを挿入して こちらのものを比較してください。MT5のADXと比較すると値がまったく異なります。