import time, requests
# 取得件数
count = 5
# 現在時刻と取得開始時刻
to_time = int(time.time())
from_time = to_time - (count - 1) * 60
# OHLCVデータ取得
param = {"period": 1, "from": from_time, "to": to_time}
url = "https://www.bitmex.com/api/udf/history?symbol=XBTUSD&resolution={period}&from={from}&to={to}".format(**param)
d = requests.get(url).json()
# 取得結果を表示(json:dict0)
display(d, type(d))
# requestで取得したjson結果はOHLCVの各列がリストとなっている
print("timestamp :", d["t"], type(d["t"]))
print("open :", d["o"], type(d["o"]))
print("high :", d["h"], type(d["h"]))
print("low :", d["l"], type(d["l"]))
print("close :", d["c"], type(d["c"]))
print("volume :", d["v"], type(d["v"]))
{'c': [6672.5, 6675, 6674.5, 6674.5, 6675], 'h': [6673, 6675, 6675, 6675, 6675], 'l': [6672.5, 6672.5, 6674.5, 6674.5, 6674.5], 'o': [6672.5, 6672.5, 6675, 6674.5, 6674.5], 's': 'ok', 't': [1537634340, 1537634400, 1537634460, 1537634520, 1537634580], 'v': [207182, 475951, 263725, 211947, 104105]}
dict
timestamp : [1537634340, 1537634400, 1537634460, 1537634520, 1537634580] <class 'list'> open : [6672.5, 6672.5, 6675, 6674.5, 6674.5] <class 'list'> high : [6673, 6675, 6675, 6675, 6675] <class 'list'> low : [6672.5, 6672.5, 6674.5, 6674.5, 6674.5] <class 'list'> close : [6672.5, 6675, 6674.5, 6674.5, 6675] <class 'list'> volume : [207182, 475951, 263725, 211947, 104105] <class 'list'>
# 各列リストからOHLCV二次元配列を作成
# for文
lst_ohlcv =[]
for i in range(len(d["t"])):
ohlcv = [d["t"][i], d["o"][i], d["h"][i], d["l"][i], d["c"][i], d["v"][i]]
lst_ohlcv.append(ohlcv)
display(lst_ohlcv, type(lst_ohlcv))
# リスト内包表記
lst_ohlcv2 = [list(ohlcv) for ohlcv in zip(d["t"], d["o"], d["h"], d["l"], d["c"], d["v"])]
display(lst_ohlcv2, type(lst_ohlcv2))
[[1537634340, 6672.5, 6673, 6672.5, 6672.5, 207182], [1537634400, 6672.5, 6675, 6672.5, 6675, 475951], [1537634460, 6675, 6675, 6674.5, 6674.5, 263725], [1537634520, 6674.5, 6675, 6674.5, 6674.5, 211947], [1537634580, 6674.5, 6675, 6674.5, 6675, 104105]]
list
[[1537634340, 6672.5, 6673, 6672.5, 6672.5, 207182], [1537634400, 6672.5, 6675, 6672.5, 6675, 475951], [1537634460, 6675, 6675, 6674.5, 6674.5, 263725], [1537634520, 6674.5, 6675, 6674.5, 6674.5, 211947], [1537634580, 6674.5, 6675, 6674.5, 6675, 104105]]
list
# OHLCV二次元配列からデータ取得
print("最新足のOHLCVリストを取得")
lst_newest = lst_ohlcv[-1]
print(lst_newest, type(lst_newest))
print("\n最も古い終値を取得")
oldest_close = lst_ohlcv[0][4]
print(oldest_close, type(oldest_close))
print("\n始値リストを取得")
lst_open = [ohlcv[1] for ohlcv in lst_ohlcv]
print(lst_open, type(lst_open))
print("\n新⇒古順のOHLCVリストを取得(反転)")
lst_reverse = lst_ohlcv[::-1]
display(lst_reverse, type(lst_reverse))
最新足のOHLCVリストを取得 [1537634580, 6674.5, 6675, 6674.5, 6675, 104105] <class 'list'> 最も古い終値を取得 6672.5 <class 'float'> 始値リストを取得 [6672.5, 6672.5, 6675, 6674.5, 6674.5] <class 'list'> 新⇒古順のOHLCVリストを取得(反転)
[[1537634580, 6674.5, 6675, 6674.5, 6675, 104105], [1537634520, 6674.5, 6675, 6674.5, 6674.5, 211947], [1537634460, 6675, 6675, 6674.5, 6674.5, 263725], [1537634400, 6672.5, 6675, 6672.5, 6675, 475951], [1537634340, 6672.5, 6673, 6672.5, 6672.5, 207182]]
list
import pandas as pd
import numpy as np
# リスト⇒Series
sr_timestamp = pd.Series(d["t"])
sr_open = pd.Series(d["o"])
sr_high = pd.Series(d["h"])
sr_low = pd.Series(d["l"])
sr_close = pd.Series(d["c"])
sr_volume = pd.Series(d["v"])
print(sr_timestamp, type(sr_timestamp))
print(sr_open, type(sr_open))
print(sr_high, type(sr_high))
print(sr_low, type(sr_low))
print(sr_close, type(sr_close))
print(sr_volume, type(sr_volume))
0 1537634340 1 1537634400 2 1537634460 3 1537634520 4 1537634580 dtype: int64 <class 'pandas.core.series.Series'> 0 6672.5 1 6672.5 2 6675.0 3 6674.5 4 6674.5 dtype: float64 <class 'pandas.core.series.Series'> 0 6673 1 6675 2 6675 3 6675 4 6675 dtype: int64 <class 'pandas.core.series.Series'> 0 6672.5 1 6672.5 2 6674.5 3 6674.5 4 6674.5 dtype: float64 <class 'pandas.core.series.Series'> 0 6672.5 1 6675.0 2 6674.5 3 6674.5 4 6675.0 dtype: float64 <class 'pandas.core.series.Series'> 0 207182 1 475951 2 263725 3 211947 4 104105 dtype: int64 <class 'pandas.core.series.Series'>
# Series⇒リスト
lst_t = sr_timestamp.tolist()
lst_o = sr_open.tolist()
lst_h = sr_high.tolist()
lst_l = sr_low.tolist()
lst_c = sr_close.tolist()
lst_v = sr_volume.tolist()
print("timestamp :", lst_t, type(lst_t))
print("open :", lst_o, type(lst_o))
print("high :", lst_h, type(lst_h))
print("low :", lst_l, type(lst_l))
print("close :", lst_c, type(lst_c))
print("volume :", lst_v, type(lst_v) ,"\n")
# Series⇒ndarray
nda_t = sr_timestamp.values
nda_o = sr_open.values
nda_h = sr_high.values
nda_l = sr_low.values
nda_c = sr_close.values
nda_v = sr_volume.values
print("timestamp :", nda_t, type(nda_t))
print("open :", nda_o, type(nda_o))
print("high :", nda_h, type(nda_h))
print("low :", nda_l, type(nda_l))
print("close :", nda_c, type(nda_c))
print("volume :", nda_v, type(nda_v))
timestamp : [1537634340, 1537634400, 1537634460, 1537634520, 1537634580] <class 'list'> open : [6672.5, 6672.5, 6675.0, 6674.5, 6674.5] <class 'list'> high : [6673, 6675, 6675, 6675, 6675] <class 'list'> low : [6672.5, 6672.5, 6674.5, 6674.5, 6674.5] <class 'list'> close : [6672.5, 6675.0, 6674.5, 6674.5, 6675.0] <class 'list'> volume : [207182, 475951, 263725, 211947, 104105] <class 'list'> timestamp : [1537634340 1537634400 1537634460 1537634520 1537634580] <class 'numpy.ndarray'> open : [6672.5 6672.5 6675. 6674.5 6674.5] <class 'numpy.ndarray'> high : [6673 6675 6675 6675 6675] <class 'numpy.ndarray'> low : [6672.5 6672.5 6674.5 6674.5 6674.5] <class 'numpy.ndarray'> close : [6672.5 6675. 6674.5 6674.5 6675. ] <class 'numpy.ndarray'> volume : [207182 475951 263725 211947 104105] <class 'numpy.ndarray'>
from collections import OrderedDict
# DataFrame作成
# OHLCV二次元配列⇒DataFrame
df_ohlcv = pd.DataFrame(lst_ohlcv,
columns=["timestamp", "open", "high", "low", "close", "volume"])
display(df_ohlcv, type(df_ohlcv))
# OrderedDict⇒DataFrame
df_ohlcv2 = pd.DataFrame(OrderedDict({
"timestamp" : d["t"],
"open" : d["o"],
"high" : d["h"],
"low" : d["l"],
"close" : d["c"],
"volume" : d["v"],
}))
display(df_ohlcv2, type(df_ohlcv2))
timestamp | open | high | low | close | volume | |
---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
pandas.core.frame.DataFrame
timestamp | open | high | low | close | volume | |
---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
pandas.core.frame.DataFrame
# DataFrameからデータ取得
print("最新(最終行)の終値を取得")
last_close = df_ohlcv.iloc[-1, 4]
print(last_close, type(last_close))
print("\n最も古い(先頭)行を取得")
row_first = df_ohlcv.iloc[0] # Series
display(row_first, type(row_first))
# リスト変換
lst_first = row_first.tolist()
display(lst_first, type(lst_first))
print("終値列を取得")
col_close = df_ohlcv["close"] # Series
display(col_close, type(col_close))
# リスト変換
lst_close = col_close.tolist()
display(lst_close, type(lst_close))
print("2~4行目の時刻, 始値, 終値列の取得")
rng_toc = df_ohlcv.iloc[2:5, [0,1,4]] # DataFrame
display(rng_toc, type(rng_toc))
# リスト変換
lst_toc = rng_toc.values.tolist()
display(lst_toc, type(lst_toc))
最新(最終行)の終値を取得 6675.0 <class 'numpy.float64'> 最も古い(先頭)行を取得
timestamp 1.537634e+09 open 6.672500e+03 high 6.673000e+03 low 6.672500e+03 close 6.672500e+03 volume 2.071820e+05 Name: 0, dtype: float64
pandas.core.series.Series
[1537634340.0, 6672.5, 6673.0, 6672.5, 6672.5, 207182.0]
list
終値列を取得
0 6672.5 1 6675.0 2 6674.5 3 6674.5 4 6675.0 Name: close, dtype: float64
pandas.core.series.Series
[6672.5, 6675.0, 6674.5, 6674.5, 6675.0]
list
2~4行目の時刻, 始値, 終値列の取得
timestamp | open | close | |
---|---|---|---|
2 | 1537634460 | 6675.0 | 6674.5 |
3 | 1537634520 | 6674.5 | 6674.5 |
4 | 1537634580 | 6674.5 | 6675.0 |
pandas.core.frame.DataFrame
[[1537634460.0, 6675.0, 6674.5], [1537634520.0, 6674.5, 6674.5], [1537634580.0, 6674.5, 6675.0]]
list
# DataFrameインデックス
print("timestampをインデックスに設定")
df_ohlcv.set_index("timestamp", inplace=True)
display(df_ohlcv)
print("timestampインデックスを解除")
df_ohlcv.reset_index(inplace=True)
display(df_ohlcv)
timestampをインデックスに設定
open | high | low | close | volume | |
---|---|---|---|---|---|
timestamp | |||||
1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
timestampインデックスを解除
timestamp | open | high | low | close | volume | |
---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
# DataFrameデータ追加/削除
# 最終行をもう1行追加
df_new = pd.DataFrame([[0, 1, 2, 3, 4, 5]],
columns=["timestamp", "open", "high", "low", "close", "volume"])
df_ohlcv = df_ohlcv.append(df_new, ignore_index=True)
display(df_ohlcv)
# 最終行を1行削除
df_ohlcv.drop(len(df_ohlcv) - 1, axis=0, inplace=True)
display(df_ohlcv)
# datetime列を追加
df_ohlcv["datetime"] = pd.to_datetime(df_ohlcv["timestamp"], unit="s")
display(df_ohlcv)
# datetime列を削除
df_ohlcv.drop("datetime", axis=1, inplace=True)
display(df_ohlcv)
timestamp | open | high | low | close | volume | |
---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
5 | 0 | 1.0 | 2 | 3.0 | 4.0 | 5 |
timestamp | open | high | low | close | volume | |
---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
timestamp | open | high | low | close | volume | datetime | |
---|---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 | 2018-09-22 16:39:00 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 | 2018-09-22 16:40:00 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 | 2018-09-22 16:41:00 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 | 2018-09-22 16:42:00 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 | 2018-09-22 16:43:00 |
timestamp | open | high | low | close | volume | |
---|---|---|---|---|---|---|
0 | 1537634340 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 |
1 | 1537634400 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 |
2 | 1537634460 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 |
3 | 1537634520 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 |
4 | 1537634580 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 |
# DataFrame列の並び替え
df_ohlcv = df_ohlcv[["open", "high", "low", "close", "volume", "timestamp"]]
display(df_ohlcv)
# DataFrame列名変更
df_ohlcv.rename(
columns={
"open" : "始値",
"high" : "高値",
"low" : "安値",
"close" : "終値",
"volume" : "出来高",
"timestamp" : "タイムスタンプ",
}, inplace=True)
display(df_ohlcv)
open | high | low | close | volume | timestamp | |
---|---|---|---|---|---|---|
0 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 | 1537634340 |
1 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 | 1537634400 |
2 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 | 1537634460 |
3 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 | 1537634520 |
4 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 | 1537634580 |
始値 | 高値 | 安値 | 終値 | 出来高 | タイムスタンプ | |
---|---|---|---|---|---|---|
0 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 | 1537634340 |
1 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 | 1537634400 |
2 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 | 1537634460 |
3 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 | 1537634520 |
4 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 | 1537634580 |
# DataFrame行反転
df_ohlcv = df_ohlcv.iloc[::-1]
display(df_ohlcv)
# DataFrame列反転
df_ohlcv = df_ohlcv.iloc[:, ::-1]
display(df_ohlcv)
始値 | 高値 | 安値 | 終値 | 出来高 | タイムスタンプ | |
---|---|---|---|---|---|---|
4 | 6674.5 | 6675 | 6674.5 | 6675.0 | 104105 | 1537634580 |
3 | 6674.5 | 6675 | 6674.5 | 6674.5 | 211947 | 1537634520 |
2 | 6675.0 | 6675 | 6674.5 | 6674.5 | 263725 | 1537634460 |
1 | 6672.5 | 6675 | 6672.5 | 6675.0 | 475951 | 1537634400 |
0 | 6672.5 | 6673 | 6672.5 | 6672.5 | 207182 | 1537634340 |
タイムスタンプ | 出来高 | 終値 | 安値 | 高値 | 始値 | |
---|---|---|---|---|---|---|
4 | 1537634580 | 104105 | 6675.0 | 6674.5 | 6675 | 6674.5 |
3 | 1537634520 | 211947 | 6674.5 | 6674.5 | 6675 | 6674.5 |
2 | 1537634460 | 263725 | 6674.5 | 6674.5 | 6675 | 6675.0 |
1 | 1537634400 | 475951 | 6675.0 | 6672.5 | 6675 | 6672.5 |
0 | 1537634340 | 207182 | 6672.5 | 6672.5 | 6673 | 6672.5 |