#!/usr/bin/env python # coding: utf-8 # #### BitMEX API(REST)にて約定履歴取得 # In[83]: # coding: utf-8 from datetime import datetime import pytz, bitmex import pandas as pd now = datetime.now(pytz.utc) # BitMEX約定履歴取得(REST API) api = bitmex.bitmex() trades = api.Trade.Trade_get(symbol="XBTUSD", count=500, endTime=now).result()[0] # 約定履歴リスト作成 lst_trades = [[t["timestamp"], t["side"], t["size"], t["price"]] for t in trades] for i in range(10): print("[{0[0]:%Y-%m-%d %H:%M:%S}, {0[1]}, {0[2]}, {0[3]}]".format(lst_trades[i])) # #### 約定履歴リストから1秒足OHLCV(DataFrame)作成 # 【rule】 # # |rule|期間|基準| # |:---|:---|:---| # |"AS"|年|年初| # |"A"|年|年末| # |"MS"|月|月初| # |"M"|月|月末| # |"W"|週|日曜| # |"D"|日|0時| # |"H"|時|0分| # |"T"|分|0秒| # |"S"|秒| | # In[84]: # 約定履歴DataFrame作成(index設定) df_trades = pd.DataFrame(lst_trades, columns=["timestamp", "side", "size", "price"]) df_trades = df_trades.set_index("timestamp") # 1秒足("1S")OHLCVリサンプリング df_ohlcv_1s = df_trades.resample("1S").agg({ "price" : "ohlc", "size" : "sum",}).ffill() df_ohlcv_1s.columns = ["open", "high", "low", "close", "volume"] display(df_ohlcv_1s.head()) # #### 1秒足OHLCVを1分足OHLCVにリサンプリング # 【集計】 # # |処理|内容| # |:---|:---| # |"min"|最小| # |"max"|最大| # |"sum"|合計| # |"mean"|平均| # |"first"|最初の値| # |"interpolate"|補間| # In[85]: # 1分足("1T")にリサンプリング(timestamp:デフォルト(期間開始時刻)->TradingViewタイプ) df_ohlcv_1m = df_ohlcv_1s.resample("1T").agg({ "open" : "first", "high" : "max", "low" : "min", "close" : "last", "volume" : "sum",}) display(df_ohlcv_1m.head()) # #### 1秒足OHLCVを1分足OHLCVにリサンプリング(timestampを期間終了時間にする) # 【label】 # # |label|内容| # |:---|:---| # |"left"|期間開始時刻(デフォルト)| # |"right"|期間終了時刻| #
# 【closed】 # # |closed|内容| # |:---|:---| # |"left"|基準時間が集計開始時刻(デフォルト)| # |"right"|基準時間が集計終了時刻| # # In[86]: # 1分足("1T")にリサンプリング(timestamp:期間終了時刻->BitMEXタイプ) df_ohlcv_1m = df_ohlcv_1s.resample("1T", label="right").agg({ "open" : "first", "high" : "max", "low" : "min", "close" : "last", "volume" : "sum",}) display(df_ohlcv_1m.head()) # #### timestampのタイムゾーン変換(UTC->JST) # In[87]: # タイムゾーンを日本時間(JST)に変換 df_ohlcv_1m.index = df_ohlcv_1m.index.tz_convert("Asia/Tokyo") display(df_ohlcv_1m.head())