ああああさんのbitFlyer約定情報 to OHLCVが便利だったので改造してみた


元ネタnote(※有料noteですが無料部分に全内容があります)

上記がとても便利だったのでn秒足で取れるように改造しました。
差分だけ貼ります。
本コードは上記元noteを見ていただければ。

ITV_SLEEP下にOHLC_INTERVAL_SEC追加

ITV_SLEEP = 0.001
OHLC_INTERVAL_SEC = 5

get_executionsメソッド下にメソッド3つ追加

def calc_next_date(dt: datetime) -> datetime:
   return dt + timedelta(seconds=OHLC_INTERVAL_SEC)

def is_empty_execution(executions_date: datetime, ohlc_date: datetime) -> bool:
   return ohlc_date + timedelta(seconds=OHLC_INTERVAL_SEC) <= executions_date

def fix_ohlc_date(executions_date: datetime, ohlc_date: datetime) -> datetime:
   if not is_empty_execution(executions_date, ohlc_date):
       return ohlc_date
   ohlc_date = ohlc_date + timedelta(seconds=OHLC_INTERVAL_SEC)
   return fix_ohlc_date(executions_date, ohlc_date)

dateUntil初期化下にnextDate追加

dateUntil = datetime(2018, 8, 23, 0, 0, 0)
nextDate = calc_next_date(dateSince)

`if dateSince <= date <= dateUntil:` ブロック下の順序を下記のように変更し、
「# ※ここをいじれば好きな解像度にできるはず、このコードは1秒足でデータ作成(抜けの補完はしてないので注意)」のところをいじって好きな解像度にする。

           # 日付が変わったらファイルハンドラ変更
           if date.day != datePrev.day:
               ... # このif文内はコード変更なし
           # 秒が変わったらOHLCVリセット
           # ※ここをいじれば好きな解像度にできるはず、このコードは1秒足でデータ作成(抜けの補完はしてないので注意)
           if nextDate <= date:
               ohlcDate = fix_ohlc_date(date, nextDate)
               logger.info("{ohlcDate},{op},{hi},{lo},{cl},{vol}".format(
                   ohlcDate=ohlcDate.strftime("%Y-%m-%d %H:%M:%S"),
                   op=int(op),
                   hi=int(hi),
                   lo=int(lo),
                   cl=int(cl),
                   vol=vol,
               )
               )
               op, hi, lo, cl, vol = price, price, price, price, size
               nextDate = calc_next_date(ohlcDate)
           price = ex["price"]
           size = ex["size"]
           # ここから下は変更なし

データの検算はしていませんがおそらくこれで取れるはず・・!
5秒足はそれっぽく取れています。

2018-08-16 00:00:05,713435,714000,713350,713354,60.4068843
2018-08-16 00:00:10,713354,713532,712100,712100,89.44809699000005
2018-08-16 00:00:15,712795,712999,712070,712551,52.932906040000006
2018-08-16 00:00:20,712551,713151,712500,712995,51.72138477000002
2018-08-16 00:00:25,712995,713867,712750,713867,69.93597181000005
2018-08-16 00:00:30,713867,714729,713200,714729,148.54807072

OHLC_INTERVAL_SEC を変更するとn秒足が取れます。

※もしバグってそうなら教えていただけるとありがたいです

この記事が気に入ったらサポートをしてみませんか?