PythonでBitcoinのRSIとMACDをモニターする
ビットコインをPythonで定期モニター出来ないかと思い、
そのやり方を忘れないうちに纏めます。
TA-Libをライブラリとして使う
TA-Lib(Technical Analysis Library)というライブラリを使います。
Windowsのみやり方がやっかい。手順は
- 使用しているPythonのバージョンを確認
- 使用しているPCのCPUは64bitか32bitかを確認
- 上記に適合するTa-libのバージョンを確認してダウンロード
- pipでインストールする
です。
まずはPythonのバージョン確認。私はJupyter notebookでコードを書いていたので
1 |
!python --version |
と記載すれば、Pythonのバージョンが確認できます。
私はPython 3.8.8を使っていました。
使用PCのCPUはデスクトップの「マイコンピュータ」を右クリック→プロパティでPCのSPECが確認できます。32か64のどちらかしかないので、その数字を探してみてください。
では、上記二つが分かったので、私の場合はこちらから適合する
TA_Lib-0.4.24-cp38–cp38-win_amd64.whl をダウンロード。
※CP38←38がPythonのバージョンを指します。
※amd64←64が使っているPCのCPUを指します。
Jupyter notebookでコードを保存しているフォルダと同じ場所に入れます。コマンドプロントで直で書かれている方はCドライブの直下に入れてください。
1 |
pip install TA_Lib-0.4.24-cp38-cp38-win_amd64.whl |
ダウンロードしたTA-Libのファイル名をinstall の後ろにコピペして実行すればOK。
ライブラリpandas_datareaderで日足データにアクセスする
通常のPandasはデータマトリクス/データフレームを扱うライブラリですが、こちらはYahooファイナンスやStooq、FREQから直接証券情報を入手できるライブラリです。
1 |
pip install pandas_datareader |
これでインストールはOK。
ライブラリmatplotlibでグラフ化する
最後はグラフ化したいので、グラフを描画するライブラリmatplotlibもを追加します。
1 |
pip install matplotlib |
全体のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#日付を扱うライブラリとデータフレームを扱うPandasと上記のpandas_datareaderを読み込む import datetime import pandas as pd from pandas_datareader import data end = datetime.datetime.today() #後述でデータを引っ張ってくる最新の日を設定。今回は今日を指定 start = (pd.Period(end, 'D') - 180).start_time #今日から180日前までの日を指定 df = data.get_data_yahoo('BTC-JPY', end=end, start=start) #yahooファイナンスのティッカーコードを入力 #とりあえずグラフ化のライブラリを読み込む import numpy as np import matplotlib.pyplot as plt import pandas_datareader.data as web import talib as ta import matplotlib.pyplot as plt from matplotlib import cm from matplotlib.pyplot import MultipleLocator close = df['Close'] #終値のみ欲しいのでdf=データフレームから"Close"のみを抽出しcloseに入れる rsi9 = ta.RSI(close, timeperiod=9) #RSIを計算。今回は9 rsi14 = ta.RSI(close, timeperiod=14) #RSIを計算。今回は14 color_1 = cm.Set1.colors[1] #グラフにチャートを重ね書きするので、見やすい色を事前に指定 color_2 = cm.Set1.colors[2] #グラフにチャートを重ね書きするので、見やすい色を事前に指定 color_3 = cm.Set1.colors[0] #グラフにチャートを重ね書きするので、見やすい色を事前に指定 fig1 = plt.figure() #箱=描画領域を指定。走らせたときにこの箱に何個グラフを入れるか?を指定できる ax1 = fig1.add_subplot(1,1,1) #上記で箱作ったけど、今回は1個のグラフしか入れない ln1=ax1.plot(rsi9,color=color_1,label='rsi9') #上記で計算したRSI9と色指定、ラベル名はRSI9と表示するように記載 ln2=ax1.plot(rsi14,color=color_3,label='rsi14') #同上 ax2 = ax1.twinx() #グラフのY軸に第二軸を追加する(グラフの左縁じゃなくて、右縁に別のY軸を設ける) ln3=ax2.plot(close,color=color_2,label=r'BTC') #上記の第二軸にビットコインのY軸チャートを使う。X軸はRSIと共有 h1, l1 = ax1.get_legend_handles_labels() #グラフの凡例情報を取得指示 h2, l2 = ax2.get_legend_handles_labels() ax1.legend(h1+h2, l1+l2, loc='upper right') #凡例をグラフに記載 ax2.tick_params(axis='y', colors=color_2) #色が多いのでビットコインのチャートとY軸のメモリを同じ色で指示 ax1.grid(True) #グラフにグリッドを表示 ax1.set_xlabel('DATE') #X軸名をグラフに表示するよう指示 ax1.set_ylabel(r'RSI') #Y軸の第一軸(左側)をRSIと表示するよう指示 ax2.set_ylabel(r'BTC-JPY') ax1.tick_params(axis="x", labelrotation=45) #X軸の文字が被る時があるから45度傾ける fig1.savefig("BTC_RSI.png") #グラフをpngファイルで保存 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#MACDを記載する macd, macdsignal, macdhist = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) #もう一度同じようにグラフを描画するように指示 fig2=plt.figure() ax=fig2.add_subplot(1,1,1) ln_a=ax.plot(macd,label='macd') ln_b=ax.plot(macdsignal,label='macdsignal') ln_c=ax.bar(macdhist.index,macdhist ,label='macdhist') ax.grid(True) ax.set_xlabel('DATE') ax.set_ylabel(r'indicator value') ax.legend() ax.tick_params(axis="x", labelrotation=45) fig2.savefig("BTC_MACD.png") |
これで得られたグラフが上記です。
短期売買をする為にはレンジなど調整する必要があります。
好みでのオプションを加える
ここから好みで
・Scheduleライブラリで1分毎にdef関数で昼の12時での実行
・上記と合わせてTwitterAPIと連結させて、自動ツイート
・次いでにLINE APIと連結させて自分へ定期連絡としてLINE通知 など加えられます。
あとは仮想通貨口座で売買をすればOKです!
参考にさせていただいたブログ
https://zero-cheese.com/6066/
https://qiita.com/Fujinoinvestor/items/852a19fd1a787b31371f