BitMEXの1分足データから移動平均線を求める
BitMEXの自動売買botに移動平均線が使えそうだったので、自分で計算してみます。 本記事のコードのではBitMEXから1分足データを取得し、移動平均線を描画します。
移動平均線
wikipedia から
株価や外国為替 (FX)でもつかわれている指標で、ビットコインの為替にも適用可能ではないかと思えます。 移動平均線は平均する株価の期間によって、たとえば、5日移動平均線であれば、過去5日の日足の終値の平均値をグラフにしたものです。
実装
取得したデータを加工して移動平均線を作成します。データの作成ができたらローソク足と一緒に移動平均線を描画します。 ローソク足の情報はBitMEXが提供しており (https://www.bitmex.com/api/udf/history)、取得には特に認証を必要としません。また、グラフの描画はplotlyというグラフの描画ライブラリを用います。
依存ライブラリ
pip install plotly requests
コード
import json from datetime import datetime, timedelta import requests import plotly SYMBOL = 'XBTUSD' def get_ohlc(resolution, start_time, end_time=datetime.today()): res = requests.get('https://www.bitmex.com/api/udf/history', params={ 'symbol': SYMBOL, 'resolution': resolution, 'from': start_time.timestamp(), 'to': end_time.timestamp(), }) return json.loads(res.text) def moving_average_of(ohlc_data, n): assert 't' in ohlc_data and 'c' in ohlc_data ret = { 't': [], 'm': [] } ave = sum(ohlc_data['c'][:n]) / n ret['t'].append(ohlc_data['t'][n-1]) ret['m'].append(ave) for i in range(n, len(ohlc_data['t'])): ave -= ohlc_data['c'][i - n] / n ave += ohlc_data['c'][i] / n ret['t'].append(ohlc_data['t'][i]) ret['m'].append(ave) return ret ohlc_data = get_ohlc(1, datetime.today() + timedelta(days=-1)) ohlc_data['t'] = list(map(datetime.utcfromtimestamp, ohlc_data['t'])) trace1 = plotly.graph_objs.Candlestick( x=ohlc_data['t'], open=ohlc_data['o'], high=ohlc_data['h'], low=ohlc_data['l'], close=ohlc_data['c'], ) ma5 = moving_average_of(ohlc_data, 5) trace2 = plotly.graph_objs.Scatter(x=ma5['t'], y=ma5['m']) ma9 = moving_average_of(ohlc_data, 9) trace3 = plotly.graph_objs.Scatter(x=ma9['t'], y=ma9['m']) plotly.offline.plot([trace1, trace2, trace3], filename='moving-average.html')
実行例
上記のコードでは実行時から1日前までの1分足データから移動平均線を計算していますが、1日、7時間、1時間分の1分足と移動平均線でプロットした結果が以下になります。
plotlyではブラウザでプロットした画像を表示してくれますが、上の中では自分でのディスプレイでは7時間分くらいが一番移動平均線がくっきり見えそれなりの量のデータが並んでくれて、1時間分のではやや寂しい見た目でした。 ブログ用にスクリーンショットを貼ると詰まって見えてしまうだけかもしれないので、実験する場合は、特に理由がなければ7, 8時間分のデータをプロットするのがいいと思います。
おわりに
wikipediaによると、移動平均線は25日と9日のものを使うらしいですが、頻繁にトレードする場合はなどは使うローソク足や平均する時間の幅も異なるかと思いますが、 上記で書いたコードでは引数をいじるだけでほしい移動平均線を計算することができます。