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

    pip install pyti lxml html5lib beautifulsoup4
    pip install --upgrade mplfinance 

2. ライブラリのimport

    # グラフ描画に使う
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    # bitFlyerにアクセスするのに使う
    import pybitflyer
    # 時間の管理に使う
    import time
    from datetime import datetime
    # リアルタイムプロットに必要
    from ipywidgets import FloatProgress
    from IPython.display import display, clear_output
    import requests
    from bs4 import BeautifulSoup
    # Jupyter環境でグラフを表示するのに必要
    %matplotlib inline

3. 2017年〜のデータ取得して、3ヶ月分で絞る

    import mplfinance as mpf
    from dateutil.relativedelta import relativedelta

    getdata_start = '20170101'
    # コインマーケットキャップからデータをスクレイピング
    df = pd.read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/?start="+getdata_start+"&end="+time.strftime("%Y%m%d"))[2] 
    df.columns =  ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Cap']
    df['date_org'] = df['Date']
    df['Date']=pd.to_datetime(df['Date'])
    # データを絞る
    months_ago = datetime.today() - relativedelta(months=3)
    mask = ((df['Date'] > months_ago.strftime('%Y-%m-%d')) & (df['Date'] <= datetime.now().strftime('%Y-%m-%d')))
    df =df.loc[mask]
    # indexにした後はdf['Date']に直接アクセスすることはできないらしい
    df = df.set_index('Date')  # Date列をindexにする
    df.index = pd.to_datetime(df.index, unit='s')  # unixtimeからdatetimeに変換する

    df = df.sort_index(ascending=True)
    df['Volume'] = df['Volume'].astype('int64')

    # styleは'blueskies(タイトルが左に来る), starsandstripes, yahooもいい感じ
    mpf.plot(df, type='candle', volume=True, mav=(3,6,9), style='blueskies')

4. ローソク足表示


5. EMAの表示

    # pytiのEMAモジュール
    from pyti.exponential_moving_average import exponential_moving_average as ema

    # EMA26を計算
    data = df['Close'].values.tolist()
    period = 26
    ema_26 = ema(data, period)
    df['ema_26'] = ema_26
 
    # EMA9を計算
    data = df['Close'].values.tolist()
    period = 9
    ema_9 = ema(data, period)
    df['ema_9'] = ema_9

    # EMAをプロッティング
    df[['Close', 'ema_26', 'ema_9']].plot()

6. ストキャスティクスの表示

    # ストキャスティクスの関数をライブラリからインポート
    from pyti.stochastic import percent_k as per_k
    from pyti.stochastic import percent_d as per_d

    # ストキャスの計算
    data = df['Close'].values.tolist()
    period = 14
    per_k = per_k(data, period)
    per_d = per_d(data, period)

    df['per_k'] = per_k
    df['per_d'] = per_d

    import matplotlib.patches as mpatches

    # ストキャスティクスをMatplotlibを使ってチャート描写
    fig, (ax1, ax2) = plt.subplots(2,1, gridspec_kw = {'height_ratios':[3, 1]})
    ax1.plot(df['date_org'], df['Close'])
    ax2.plot(df['date_org'], df['per_k'])
    ax2.plot(df['date_org'], df['per_d'])

    patch_k = mpatches.Patch(color='red', label='per_k')
    patch_d = mpatches.Patch(color='blue', label='per_d')
    plt.legend(handles=[patch_k, patch_d])
    #plt.legend()

    fig.tight_layout()
    plt.show()

7. MACDの表示

    # MACDの関数をインポート
    from pyti.moving_average_convergence_divergence import moving_average_convergence_divergence as macd

    # MACDを計算
    data = df['Close'].values.tolist()
    long = 26
    short = 12
    macd = macd(data, short, long)

    df['macd'] = macd

8. ボリンジャーバンドの表示

    # ボリンジャーバンドの関数
    from pyti.bollinger_bands import upper_bollinger_band as bb_up
    from pyti.bollinger_bands import middle_bollinger_band as bb_mid
    from pyti.bollinger_bands import lower_bollinger_band as bb_low

    # ボリンジャーバンドの計算
    data = df['Close'].values.tolist()
    period = 20
    bb_up = bb_up(data,period)
    bb_mid = bb_mid(data,period)
    bb_low = bb_low(data,period)
    df['bb_up'] = bb_up
    df['bb_mid'] = bb_mid
    df['bb_low'] = bb_low

    # ボリンジャーバンドをプロッティング
    df[['Close', 'bb_up', 'bb_mid', 'bb_low']].plot()

9. ローソク足のグラフにボリンジャーバンドを追加表示

    apd  = mpf.make_addplot(df[['Close', 'bb_up', 'bb_mid', 'bb_low']])
    mpf.plot(df, addplot=apd, type='candle', volume=True, mav=(3,6,9), style='blueskies')

 


 

githubはこちらです。

https://github.com/JironBach/jupyter_mplfinance/blob/develop/pyti.ipynb