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





