【Python】【株式投資】TA-Libによるテクニカル指標算出方法(移動平均、ボリンジャーバンド、MACD、RSI)

プログラミング

おはようございます、こんにちは、こんばんは。

ひよこです(@hiyoko_lets_go)。

今回はPythonのTA-Libライブラリを用いたテクニカル指標の算出方法をご紹介します。

テクニカル指標は、投資での売買タイミング決定や相場のトレンド判断においてとても重要です。このテクニカル指標をPythonを用いて簡単に取得できるようになりましょう。

テクニカル指標を株式投資の参考にしたい

株式投資には、多くのテクニカル指標があります。

それらを用いることで買うタイミングや売るタイミングを検討できるわけですが、自分でチャートを確認する必要があるため特に株初心者の方には億劫です。

そこで、「それPythonで自動化しようよ」となるわけです。

今回はまず「Pythonで株式のテクニカル指標を取得する」部分にフォーカスを当ててご紹介します。

こんな方におすすめ!
Pythonでテクニカル指標を取得したい
Pythonのスキルを株式投資に活かしたい

今後数回に渡って関連記事を執筆予定ですが、最終的には

  • 株式のテクニカル分析を理解できる
  • 閾値を自分で設定することで、自分だけの売買タイミングを検討できる
  • 自動化することで売り場と買い場を逃すことがなくなる

ことを目標にしています。

使用するライブラリ:TA-Lib(Technical Analysis Library)

from datetime import datetime #日付指定
import matplotlib.pyplot as plt #グラフ描画
import pandas_datareader.data as data #株価取得
import talib as ta #テクニカル指標算出


start = datetime(2019, 1, 1) #2019/1/1以降のデータを取得
end =datetime.now() #現在時刻までのデータを取得

df = data.DataReader("AAPL", 'yahoo', start, end) #AAPL(アップル)の株価を取得

date = df.index
close = df["Adj Close"] #調整後の終値を"close"として保持

今回使用する主なPythonのライブラリは「TA-Lib」です。TA-Libはテクニカル指標を簡単に生成することができます。

その他にも、Pythonで株価を取得することができる「pandas_datareader」も用います。

\pandas_datareaderの詳細はこちら/

【Python】初心者必見の株価取得方法~ライブラリ利用~
おはようございます、こんにちは、こんばんは。ひよこ(@hiyoko_lets_go)です。 本日は、Pythonで株価を取得する方法をご紹介します。 最近Pythonを学習していて実データを触りたい人。自分で企業分析を行って投資...
スポンサーリンク

Pythonによるテクニカル指標の取得方法

紹介指標

今回はテクニカル指標の中でも特に有名かつ(個人的に)利用頻度の高い指標を4つご紹介します。

ひよこ
ひよこ

これらは、私が実際に取引を行う時にも特に重要視している指標!

移動平均線

移動平均線は、相場のトレンドを確認する指標で、5日と25日のように複数の移動平均線を用いることが一般的です。

移動平均線は、一定期間の平均価格を日々計算して出した「答え」を線でつないだものです。
例えば5日移動平均値は5日分の平均価格となります。そして、日々の平均価格を線でつないだものが5日移動平均線となります。
平均価格(ここでは終値の平均)を使用することで日中の大きな変動に惑わされることなく、現在の相場の方向性(トレンド)がどちらを向いているのか(上がっているのか、下がっているのか)を見ることができます。(引用:auじぶん銀行 単純移動平均線
例)5日間の終値が、10、20、30、40、50であった場合、この5日間の移動平均は30になる。

コード例

#################################
#移動平均

#指定期間:5日、25日、50日
span5 = 5
span25 = 25
span50 = 50

#各期間における終値の平均値を算出
df["span5"] = close.rolling(window=span5).mean()
df["span25"] = close.rolling(window=span25).mean()
df["sma03"] = close.rolling(window=span03).mean()

#グラフ描画
plt.figure(figsize=(30,15))
plt.subplot(1,1,1)
plt.plot(date,close,label="Close",color="#99b898") #終値
plt.plot(date,df["span5"],label="span5",color="#e84a5f") #5日移動平均線
plt.plot(date,df["span25"],label="span25",color="#ff847c") #25日移動平均線
plt.plot(date,df["span03"],label="span03",color="#feceab") #50日移動平均線
plt.legend()

plt.show()

上記コードでは、5日、25日、50日と3種類の移動平均を算出しています。

可視化結果

プログラムの実行結果として得られるグラフは以下の通りです。終値(Close)と3種類の移動平均線(5日、25日、50日)を獲得できていることが分かります。

移動平均線(5日、25日、50日)

ボリンジャーバンド

ボリンジャーバンドは、標準偏差を用いてレンジを可視化する指標です。順張りに利用することが多く、終値が2σの範囲を超えたタイミングでトレンドに乗っていきます。

ボリンジャーバンドは、移動平均線と標準偏差で構成されており、移動平均を表す線とその上下に値動きの幅を示す線を加えた指標で、「価格の大半がこの帯(バンド)の中に収まる」という統計学を応用したテクニカル指標のひとつです。(引用:マネックス証券 ボリンジャーバンド
ある一定の確率で値動きが収まりやすいレンジを『σ(シグマ)』と呼び、平均値からみて上のレンジを+1σ、下のレンジを-1σと呼びます。これを2倍したものが+2σ・-2σになります。正規分布の理論によれば、この+1σ、-1σに収まる確率は約68.2%、+2σから-2σに収まる確率は約95.4%です。(引用:auじぶん銀行 ボリンジャーバンド

コード例

#################################
#ボリンジャーバンド

#指定期間:25日間
df["upper"], df["middle"], df["lower"] = ta.BBANDS(close,timeperiod=span25, nbdevup=2,nbdevdn=2,matype=0)

plt.figure(figsize=(30,15))
plt.plot(date,close,label="Close",color="#99b898")
plt.fill_between(date,df["upper"],df["lower"],color="grey",alpha=0.3)

plt.show()

ボリンジャーバンドは、TA-Libのta.BBANDSにより算出することができます。

可視化結果

ボリンジャーバンド

灰色で示した部分がボリンジャーバンドです。

スポンサーリンク

MACD

MACDは、ゴールデンクロス(短期移動平均線が長期移動平均線を上抜け)とデッドクロス(短期移動平均線が長期移動平均線を下抜け)を判断する指標です。

MACDのヒストグラムがマイナス圏からプラス圏になるとゴールデンクロス、プラス圏からマイナス圏になるとデッドクロスを表します。

MACD(移動平均収束拡散手法)は短期の移動平均線と中長期の移動平均線を使用することで、買いと売りを判断する手法です。(引用:auじぶん銀行 MACD

コード例

#################################
#MACD

#MACD、シグナル、ヒストグラム(MACD-シグナル)の3種を算出可能
df["macd"], df["macdsignal"],df["macdhist"] = ta.MACD(close, fastperiod=12,slowperiod=26,signalperiod=9)

plt.figure(figsize=(30,15))
plt.subplot(2,1,1)

plt.plot(date,close,label="Close",color="#99b898")
plt.legend()

plt.subplot(2,1,2)
plt.fill_between(date,df["macdhist"],color="grey",alpha=0.5,label="MACD_hist")
plt.hlines(0,start,end,"grey",linestyles="dashed")
plt.legend()

plt.show()

MACDは、TA-LibのMACDによって算出できます。ここでは、ヒストグラムを可視化しています。

可視化結果

MACD

グラフ上段が終値の推移、下段がMACDのヒストグラムです。ヒストグラムの値0付近をチェックすることでゴールデンクロス、デッドクロスを判断することができ、今後のトレンド予想に利用できます。

RSI

RSIは、相場の買われすぎ、売られすぎを判断する指標です。ファンダメンタル分析と組み合わせて利用することで効果を発揮する指標です(私は売られすぎのタイミングで逆張りするのが好きです)。

RSI(相対力指数)は、一定期間の相場における「値上がり幅」と「値下がり幅」を活用して、値動きの強弱を数値で表し、買われ過ぎなのか売られ過ぎなのかを判断する手法です。一定期間において、「上昇した日の値幅合計」と、「下落した日の値幅合計」をあわせたもののうち、前者の比率を表します。例えば、比率が上昇日7:下落日3の場合、RSIは70ということになります。(引用:auじぶん銀行 RSI

コード例

#################################
#RSI

df["RSI"] = ta.RSI(close,timeperiod=span25)

plt.figure(figsize=(30,15))
plt.subplot(2,1,1)

#上段終値推移
plt.plot(date,close,label="Close",color="#99b898")
plt.plot(date,df["span5"],label="span5",color="#e84a5f")
plt.plot(date,df["span25"],label="span25",color="#ff847c")
plt.plot(date,df["span50"],label="span50",color="#feceab")
plt.legend()

#下段RSI
plt.subplot(2,1,2)
plt.plot(date,df["RSI"],label="RSI",color="grey")
plt.ylim(0,100)
plt.hlines([30,50,70],start,end,"grey",linestyles='dashed') #30,50,70に基準値破線
plt.legend()

plt.show()

RSIは、TA-LibのRSIを用いて算出できます。

可視化結果

RSI

市場に大きな影響が与えられた場合は、RSIが0や100付近になってしまうこともあるため注意が必要ですが、緩やかな上昇、下落、横ばいの場合には有効な指標です。

銘柄にも依存しますが、RSIが20~40で売られすぎ、60~80で買われすぎと判断されるため、RSI30、70の値に破線を加えています。

すべて一つのグラフに描画する

ここまでご紹介した指標を1つのグラフで可視化することも可能です。

コード例

#################################
#すべての指標を表示

plt.figure(figsize=(20,10))
plt.subplot(5,1,1)

#移動平均線
plt.plot(date,close,label="Close",color="#99b898")
plt.plot(date,df["span5"],label="span5",color="#e84a5f")
plt.plot(date,df["span25"],label="span25",color="#ff847c")
plt.plot(date,df["span50"],label="span50",color="#feceab")
plt.legend()

#出来高
plt.subplot(5,1,2)
plt.bar(date,df["Volume"],label="Volume",color="grey")
plt.legend()

#MACD
plt.subplot(5,1,3)
plt.fill_between(date,df["macdhist"],color="grey",alpha=0.5,label="MACD_hist")
plt.hlines(0,start,end,"grey",linestyles="dashed")
plt.legend()

#RSI
plt.subplot(5,1,4)
plt.plot(date,df["RSI"],label="RSI",color="grey")
plt.ylim(0,100)
plt.hlines([30,50,70],start,end,"grey",linestyles='dashed')
plt.legend()

#ボリンジャーバンド
plt.subplot(5,1,5)
plt.plot(date,close,label="Close",color="#99b898")
plt.fill_between(date,df["upper"],df["lower"],color="grey",alpha=0.3)
plt.legend()

plt.show()

ここでは出来高も追加してしまいました(笑)

可視化結果

移動平均線、MACD、ボリンジャーバンド、RSI、出来高

少し窮屈ではありますが、多様な指標を1つのグラフとして可視化できました。実際の取引では複数の指標を用いながら売買を行うことになるので汎用性があるのではないでしょうか。

まとめ

今回は、PythonのTA-Libライブラリを用いて、株式のテクニカル指標算出方法をご紹介しました。

・移動平均線
・ボリンジャーバンド
・MACD
・RSI

よく用いられる有名指標に絞りましたが、TA-Libは200近くの指標算出が可能ですのでぜひ利用してみてください。あなただけの売買タイミングを分析してみましょう。

投資へのハードルが下がっている昨今、プログラミングスキルとの併用は大きな力になります。

 

本ブログでは、株式やプログラミングに関する記事を投稿しています。

プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。

【Python】おすすめ書籍20選(入門~AI・機械学習)(現役データサイエンティストが厳選)
おはようございます、こんにちは、こんばんは。 ひよこです(@hiyoko_lets_go)。 今回はPythonに関するおすすめ書籍を入門~AI・機械学習まで網羅的にご紹介します。 私自身、学生時代にプログラミングに出会い...

独学で挫折してしまう方は、プログラミングスクールという方法がおすすめです。

私の一押しは『TechAcademy』です。

質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。

無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。

スキルアップを目指したい方におすすめのオンライン学習サービス

Profile
この記事を書いた人

現役データサイエンティスト
【投資×プログラミング】に関するブログを運営しています。

■発信内容
・・・プログラミング(Python)、銘柄分析、株価予測など
■投資対象
・・・インデックス投資、米国ETF、米国個別株

普段は1万人規模の大企業で世にコンテンツを生み出してます。

ひよこをフォローする
プログラミング開発
ひよこをフォローする
副業プログラミング応援団

コメント

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