PythonでbitFlyer、Bitcoinの移動平均線(SMA)を計算、表示する

Pythonでビットフレイヤーのビットコイン終値を元にSMAを計算し、表示します。

PythonでbitFlyer、Bitcoinの移動平均線(SMA)を計算、表示

サンプルプログラムでは取引所は”bitFlyer”、通貨は”btcfxjpy”です。

SMAを計算する為の過去の価格データは”CryptoWatch”から取得します。

足は1時間(60分)、SMAは期間10と期間30の2つを計算、表示します。

Pythonのコード

CryptoWatchからbitFlyer、btcfxjpyのohlcを取得します。
pythonのモジュールなし、pandasモジュールを用いた2種類の計算方法でSMAを取得します。
取得した終値とSMAを計算し、グラフに表示します。

コンソールの表示

SMA10          : 472119.00
SMA10 (pandas) : 472119.00
SMA10 (time)   : 2018-11-29 19:00:00
SMA10 compare  : True
SMA30          : 469217.77
SMA30 (pandas) : 469217.77
SMA30 (time)   : 2018-11-29 19:00:00
SMA30 compare  : True

Matplotlibの表示画面

 

解説

SMAを計算する(モジュールなし)

# SMAを計算する
# ClosePrice の順番
CLOSE = 4 
def _sma(_ohlcv, _length):
    total = 0
    for i in range(_length):
        total += _ohlcv[-i-1][CLOSE] # クローズを追加
    sma = total / _length # 数で割って平均を算出
    return sma

上記の関数では、モジュールなしでSMAを計算しています。
第1引数では取得した過去データ(ディクショナリ型)
第2引数ではSMAの期間 を指定します。

「for i in range(_length)」でSMAの足の期間分処理を繰り返し行います。
CryptoWatchから取得した価格データは古い順に並んでいるので
「_ohlcv[-i-1]」のマイナス指定で、後ろから1行の価格データを取得し、
「[CLOSE] 」で価格データの中から終値を取得しています。
※終値は価格データの5番目にならんでいるので、CLOSE=4(0からカウントされるので4を指定)で指定する。

「total += _ohlcv[-i-1][CLOSE]」でSMAで指定した期間の終値を合算し、
「sma = total / _length」で期間の数で割ることで平均値を計算しています。
 

SMAを計算する(pandas)

import pandas as pd
# cryptowatchのデータ配列名
OHLCV_LIST = ['CloseTime', 'OpenPrice', 'HighPrice', 'LowPrice', 'ClosePrice', 'Volume', 'FumeinaAtai']

# ohlcvを配列型からデータフレーム型に変換
df_ohlcv = pd.DataFrame(data=ohlcv, columns=OHLCV_LIST)


# SMAを計算する(by pandas)
def _sma_pandas(_df_ohlcv, _length):
    sma = pd.DataFrame()
    # SMAを取得
    sma['SMA'] = _df_ohlcv['ClosePrice'].rolling(_length).mean()
    # UnixTimeをデータタイム形式に変換
    sma['CloseTime'] = _df_ohlcv['CloseTime'].apply(lambda x: datetime.datetime.fromtimestamp(x))
    return sma

上記の関数では、pandasモジュールを利用してSMAを計算しています。
第1引数では取得した過去データ(データフレーム型)※先に紹介した関数とは別の型です
第2引数ではSMAの期間 を指定します。

「import pandas as pd」でpandasモジュールをインポートしています。
「df_ohlcv = pd.DataFrame(data=ohlcv, columns=OHLCV_LIST)」で
ディクショナリ型のデータをpandasのDataFrame型に変更します。
データ元はCryptoWatchから取得した過去データ(ohlcv)、
カラムは「OHLCV_LIST」を設定します。
※カラムはデータにアクセスする際に利用します

「_df_ohlcv[‘ClosePrice’].rolling(_length).mean()」の1行でSMAを取得しています。
「_df_ohlcv[‘ClosePrice’]」で終値データ(列)を取得します。
※ここで設定したカラム名で対象データを取得します
「rolling(_length)」で列から対象の行を取得し、「mean()」で平均値を計算しています。

「_df_ohlcv[‘CloseTime’].apply(lambda x: datetime.datetime.fromtimestamp(x))」
確認用に設定した時間は、元々UnixTimeだった時間をデータタイム型に変更しています。

 

終値、SMAのチャートを表示する

from matplotlib import pyplot as plt
    plt.plot(df_ohlcv['ClosePrice']) # 終値
    plt.plot(sma10_p['SMA']) # SMA10
    plt.plot(sma30_p['SMA']) # SMA30
    plt.show() # グラフ表示

matplotlibというモジュールを利用して終値、SMAのチャートを表示します。
「from matplotlib import pyplot as plt」でmatplotlibモジュールをインポートします
「plt.plot(df_ohlcv[‘ClosePrice’])」で終値を設定
「plt.plot(sma10_p[‘SMA’])」でSMAを設定
「plt.show()」でグラフを表示しています。