CryptocurrencyPython

【Python|plotly】仮想通貨のチャート・ローソク足とMACD、RSI、ボリンジャーバンドを表示する方法

Cryptocurrency

どうも、月見(@Suzuka14144156)です。

今回は、仮想通貨のチャート・ローソク足とMACD、RSI、ボリンジャーバンドを表示する方法したいと思います。

解決するお悩み
  • Pythonで仮想通貨のローソク足チャートを表示したいがやり方がわからない
  • ぐりぐり動かしたりできる、インタラクティブな表示をしたい
  • MACD、RSI、ボリンジャーバンドを表示したい
  • 一気に複数銘柄取得し、比較したい

この記事のゴール

  • こんなチャートをPythonで表示できるようにします!

これは、BTC-USDのチャートです。

月見
月見
  • しかもグリグリいじることができます!

これを実現する上で、キーとなるライブラリが「plotly」と「TaLib」です。

plotlyとは?

インタラクティブなグラフを表示するのに使うライブラリがplotlyです。

こんな風に綺麗なグラフが、描けます。

TaLib

  • テクニカル指標を計算するためのライブラリ

環境の構築

今回は、Anacondaを用います。

Anacondaをインストール

以下の記事を参考にしてください。

JupyterLabの起動

コマンドプロンプトから、以下のコードを入力ください。

jupyter lab

以下赤枠のアイコンをクリック。

これで起動します。

ライブラリのインストール

主に使用するライブラリ
  • pandas:データ処理
  • plotly:グラフの表示

以下以外のライブラリは、デフォルトでインストールされているはずです。

plotlyのインストール

コマンドプロンプトから、以下のコードを入力ください。

 conda install -c plotly plotly

jupyter labでうまく表示されない場合は、以下の記事を参考にしてみてください。

TaLib

TaLibのインストール方法は、二つあります。

方法1:Anaconda経由でのインストール

方法2:公式サイトからインストール

オススメは、方法1:Anaconda経由でのインストールです。

方法1:Anaconda経由でのインストール(オススメ

コマンドプロンプトから、以下のコードを入力ください。

conda install -c conda-forge ta-lib
月見
月見
  • たったこの一行だけで、完了です。
方法2:公式サイトからインストール
pythonのバージョンを調べる

コマンドプロンプトで以下を入力する。

python -V

PowerShellCopy

すると、インストールされているPythonの情報が表示されます。

Python 3.8.8

この場合は、バージョン3.8のPythonであることがわかります。

TA-Libのwhlファイルをダウンロード

次に,以下のダウンロードサイトからTA-Libのwhlファイルをダウンロードします.
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib

ダウンロードするファイルは、以下のようになります。

  • Python 3.9,Windows 64bitの場合:「TA_Lib‑0.4.19‑cp39‑cp39‑win_amd64.whl」
  • Python 3.9,Windows 32bitの場合:「TA_Lib‑0.4.19‑cp39‑cp39‑win32.whl」
  • Python 3.8,Windows 64bitの場合:「TA_Lib‑0.4.19‑cp38‑cp38‑win_amd64.whl」
  • Python 3.8,Windows 32bitの場合:「TA_Lib‑0.4.19‑cp38‑cp38‑win32.whl」
TA-Libをインストール

ダウンロードしたwhlファイルを保存したディレクトリを開く。

アドレスを入力するところに「cmd」と入力し、エンターを押す。

開いたコマンドプロンプトにて、以下を入力。

pip install whlファイル名

PowerShellCopy

以下は、例です。

pip install TA_Lib‑0.4.19‑cp38‑cp38‑win64.whl
月見
月見
  • これで完了です。

仮想通貨のチャートを取得

今回は、以下の銘柄を取得します。

tickers = [‘BTC-USD’,’ETH-USD’,’BNB-USD’,’XRP-USD’,’DOGE-USD’]

そのほかにもYahoo Financeにある銘柄なら取得可能ですので、各々で取得したい銘柄を追加ください。

ただし、下記のコードは、銘柄数が1だとこれ以降の処理でエラーになるので注意ください。

2銘柄以上は設定するようにお願いします。

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import talib
import pandas as pd  
from pandas_datareader import data as pdr 
import datetime
import yfinance as yf
import numpy as np

#BTCのチャートを取得
tickers = ['BTC-USD','ETH-USD','BNB-USD','XRP-USD','DOGE-USD']

#取得開始日を入力
start = "2022-01-02"

#取得終了日を入力
end = datetime.date.today()

#Yahoofinanceから取得するように設定
yf.pdr_override()

#データの取得を実行
crypto_data = pdr.get_data_yahoo(tickers, start, end)

以下を実行すると取得したデータが表示されます。

crypto_data

仮想通貨チャートでとテクニカル指標を表示

bb_trigger = Falseとなっていますが、bb_trigger = Trueにすることで、ボリンジャーバンドを表示できます。

bb_trigger = False
for ticker in tickers:
    #fig初期化
    fig = make_subplots(rows=4, cols=1, shared_xaxes=True, vertical_spacing=0.05, row_width=[0.2,0.2,0.2,0.7], x_title="Date")
    
    #MACD
    macd = pd.DataFrame(data=None)
    macd['macd'], macd['macdsignal'], macd['macdhist'] =talib.MACD(crypto_data['Adj Close'][ticker], fastperiod=12, slowperiod=26, signalperiod=9)
    
    #RSI
    rsi = pd.DataFrame(data=None)
    rsi= talib.RSI(crypto_data["Close"][ticker], timeperiod=14)
    line_80 = pd.Series([80]*len(crypto_data), index=crypto_data.index)
    line_20 = pd.Series([20]*len(crypto_data), index=crypto_data.index)
    
    #ボリンジャーバンド
    bb = pd.DataFrame(data=None)
    bb["u_1σ"], bb["middle"], bb["l_1σ"] = talib.BBANDS(crypto_data['Adj Close'][ticker], timeperiod=20, nbdevup=1, nbdevdn=1, matype=0)
    bb["u_2σ"], bb["middle"], bb["l_2σ"] = talib.BBANDS(crypto_data['Adj Close'][ticker], timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)
    bb["u_3σ"], bb["middle"], bb["l_3σ"] = talib.BBANDS(crypto_data['Adj Close'][ticker], timeperiod=20, nbdevup=3, nbdevdn=3, matype=0)

    #fig
    fig.add_trace(go.Candlestick(x=crypto_data.index, open=crypto_data["Open"][ticker], high=crypto_data["High"][ticker], low=crypto_data["Low"][ticker], close=crypto_data["Close"][ticker], showlegend=False))
    fig.add_trace(go.Scatter(x=crypto_data.index,y=macd['macd'],mode="lines", showlegend=False), row=3, col=1)
    fig.update_yaxes(title_text="MACD", row=3, col=1)
    fig.add_trace(go.Scatter(x=crypto_data.index,y=macd['macdsignal'],mode="lines", showlegend=False), row=3, col=1)
    fig.add_trace(go.Scatter(x=crypto_data.index,y=rsi,mode="lines", showlegend=False), row=4, col=1)
    fig.update_yaxes(title_text="RSI", row=4, col=1)
    fig.add_trace(go.Scatter(x=crypto_data.index,y= line_80,mode="lines", showlegend=False), row=4, col=1)
    fig.add_trace(go.Scatter(x=crypto_data.index,y= line_20,mode="lines", showlegend=False), row=4, col=1)
    
    if bb_trigger == True:
        fig.add_trace(go.Scatter(x=crypto_data.index,y= bb["u_1σ"],mode="lines", showlegend=False,opacity=0.5), row=1, col=1)
        fig.add_trace(go.Scatter(x=crypto_data.index,y= bb["l_1σ"],mode="lines", showlegend=False,opacity=0.5), row=1, col=1)
        fig.add_trace(go.Scatter(x=crypto_data.index,y= bb["u_2σ"],mode="lines", showlegend=False,opacity=0.5), row=1, col=1)
        fig.add_trace(go.Scatter(x=crypto_data.index,y= bb["l_2σ"],mode="lines", showlegend=False,opacity=0.5), row=1, col=1)
        fig.add_trace(go.Scatter(x=crypto_data.index,y= bb["u_3σ"],mode="lines", showlegend=False,opacity=0.5), row=1, col=1)
        fig.add_trace(go.Scatter(x=crypto_data.index,y= bb["l_3σ"],mode="lines", showlegend=False,opacity=0.5), row=1, col=1)
        
    fig.update_layout(
        title=ticker,
        #plot_bgcolor ='lightgray',
        autosize=False,
        width=1200,
        height=800,
        margin=dict(
            l=0,
            r=0,
            b=0,
            t=40,
            pad=0,
        ),
        font=dict(
            size=13,
        )
    )

    fig.show()
    print('*-'*100)

綺麗に表示されました。

ボリンジャーバンドを表示したバージョンは、以下です。

月見
月見
  • これで沢山の銘柄のテクニカル分析を比較しながら行えるようになりました。

Pythonでファイナンスのデータ分析の勉強方法

私は、以下の本で勉強しました。

かなり詳しく書かれており、とてもオススメの本です。

Udemy

Udemyはオンライン口座です。

一度購入すれば、ずっと閲覧できるのでオススメです。

【世界で8万人が受講:Python for Finance】Pythonを使って学ぶ現代ファイナンス理論と実践
ポートフォリオ理論、コーポレートファイナンス、資本資産評価モデル(CAPM)、デリバティブの値決め、モンテカルロシミュレーションといった内容を中心に、Pwcなどで活躍した講師が理論と実践に基づき解説します。

私の記事

私のブログでも解説していますので参考にしてみてください。

まとめ

今回は、仮想通貨のチャート・ローソク足とMACD、RSI、ボリンジャーバンドを表示する方法しました。

私のブログではほかにも、仮想通貨の自動トレードの方法などを解説しているのでぜひ参考にしてみてください。

無料で閲覧可能で、コードをコピペして動かすことができます。

コメント

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