[Python OHLCV] bitFlyer の過去の約定情報からオレオレOHLCVデータを作成する(その2)
前回のnote
Public APIで取れる約定履歴から、1秒足のOHLCVデータを作成した。
今回のnote
1秒足のOHLCVデータを元に、好きな解像度のOHLCVデータを作成する。
pandasの使い方をお勉強したので、メモ代わりみたいなもん。
コード
今回も「自分の環境で動けばいいや」のクソコードです。
・data/ohlcv/YYYYMMDD_1s.csv みたいなファイルが事前に格納されていること(入力ファイル名は inCsvPath を適宜変更)
・pandasでquery()を使うにはnumexprパッケージが必要(らしい、最初から入ってた)、pip install numexprでインストール要
import pandas as pd
from datetime import datetime
DATA_DIR = 'data/ohlcv/'
SINCE = datetime(2018, 6, 1)
UNTIL = datetime(2018, 7, 24)
RES_NUM = 30 # 解像度
RES_UNIT = "s" # 解像度
RES_SEC = RES_NUM * (1 if RES_UNIT == "s" else 60 if RES_UNIT == "m" else 60*60)
# Pandas Dataframe
inCsvPath = DATA_DIR + SINCE.strftime("%Y%m%d") + "_1s.csv"
df = pd.read_csv(inCsvPath, header=None, names=["T", "O", "H", "L", "C", "V"], parse_dates=["T"])
# 出力ファイル
outCsvPath = DATA_DIR + SINCE.strftime("%Y%m%d") + "_" + str(RES_NUM) + RES_UNIT + ".csv"
outCsv = open(outCsvPath, mode="w")
# 解像度範囲
rangeS = datetime.fromtimestamp(SINCE.timestamp())
rangeE = datetime.fromtimestamp(rangeS.timestamp() + RES_SEC)
# 終了日時までループ
while rangeE <= UNTIL:
df_ = df.query('@rangeS <= T & T < @rangeE')
if(not(df_.empty)):
outCsv.write("{t},{o},{h},{l},{c},{v}\n".format(
t=rangeS.strftime("%Y-%m-%d %H:%M:%S"),
o=df_['O'].iloc[0],
h=df_['H'].max(),
l=df_['L'].min(),
c=df_['C'].iloc[-1],
v=df_['V'].sum(),
))
# 日付変更(ファイル変更)
if(rangeS.day != rangeE.day):
print("{}: {} fin, next {}".format(datetime.now(), rangeS.strftime("%Y%m%d"), rangeE.strftime("%Y%m%d")))
outCsv.close()
# 入力ファイルがなければ終了
inCsvPath = DATA_DIR + rangeE.strftime("%Y%m%d") + "_1s.csv"
try:
df = pd.read_csv(inCsvPath, header=None, names=["T", "O", "H", "L", "C", "V"], parse_dates=["T"])
except Exception as e:
print(e)
break
# 新規出力ファイル
outCsvPath = DATA_DIR + rangeE.strftime("%Y%m%d") + "_" + str(RES_NUM) + RES_UNIT + ".csv"
outCsv = open(outCsvPath, mode="w")
# 解像度範囲 更新
rangeS = rangeE
rangeE = datetime.fromtimestamp(rangeS.timestamp() + RES_SEC)
if(not(outCsv.closed)):
outCsv.close()
Pandasの勉強メモ
その他参考
queryでやったけど、resample使った方が早いかも(試してない
おわりに
有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。コードは、インデントくずれが起きたりするようなので、コピペ時には注意してください。
マガジン
コメント用note(未購入者向け)
干し芋
ここから先は
0字
¥ 100
期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる
Amazonギフトカード5,000円分が当たる
サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM