[Python bitFlyer SFD] 証拠金変動履歴から bitFlyer の SFD 徴収/付与 情報を取得する

やりたいこと

SFDでいくら得した(or 損した)を知りたい


実行結果

こんな感じ(裏にTweetDeckが透けてるけど気にしない


コード

安定のクソコード
・証拠金変動履歴(GET /v1/me/getcollateralhistory)の、reason_code=SFDから計算
・pandas🐼使ってます

# -*- Coding: utf-8 -*-
import ccxt
from datetime import datetime, timedelta
import dateutil.parser
import pandas as pd

# Settings
API_KEY = 'YourApiKey'
API_SECRET = 'YourApiSecret'
SYMBOL_BTCFX = 'FX_BTC_JPY'

def get_datetime(d):
  date = d.replace('T', ' ')[:-1]
  return dateutil.parser.parse(date) + timedelta(hours=9)

# Main Logics
if __name__ == "__main__":
  before = 999999999999
  after = 0
  profit, profitPlus, profitMinus, plusCnt, minusCnt = 0, 0, 0, 0, 0
  df = pd.DataFrame(columns=["date", "profit", "profitPlus", "profitMinus", "plusCnt", "minusCnt"])

  bf = ccxt.bitflyer({
    'apiKey': API_KEY,
    'secret': API_SECRET,
  })

  histories = bf.fetch2(path='getcollateralhistory', api='private', method='GET', params={"count": 500, "before": before, "after": after})
  date = get_datetime(histories[0]["date"])
  datePrev = get_datetime(histories[0]["date"])
  while len(histories) > 0:
    for h in histories:
      date = get_datetime(h["date"])
      if date.day != datePrev.day:
        df = df.append(pd.Series([date.strftime("%Y/%m/%d"), profit, profitPlus, profitMinus, plusCnt, minusCnt], index=["date", "profit", "profitPlus", "profitMinus", "plusCnt", "minusCnt"]), ignore_index=True)
        profit, profitPlus, profitMinus, plusCnt, minusCnt = 0, 0, 0, 0, 0

      if h["reason_code"] == "SFD":
        if h["change"] > 0:
          profitPlus += h["change"]
          plusCnt += 1
        else:
          profitMinus += h["change"]
          minusCnt += 1
        profit += h["change"]
      datePrev = date
    before = histories[-1]["id"]
    histories = bf.fetch2(path='getcollateralhistory', api='private', method='GET', params={"count": 500, "before": before, "after": after})
    # sleep(0.13)

  df = df.append(pd.Series([date.strftime("%Y/%m/%d"), profit, profitPlus, profitMinus, plusCnt, minusCnt], index=["date", "profit", "profitPlus", "profitMinus", "plusCnt", "minusCnt"]), ignore_index=True)
  print(df)

  print("=== Total ===")
  print(pd.Series([df["profit"].sum(), df["profitPlus"].sum(), df["profitMinus"].sum(), df["plusCnt"].sum(), df["minusCnt"].sum()], index=["profit", "profitPlus", "profitMinus", "plusCnt", "minusCnt"]))


関連ツイート


取引回数が多いと、APIがエラーになるとか何とか…


おわりに

有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。コードは、インデントくずれが起きたりするようなので、コピペ時には注意してください。


マガジン


コメント用note(未購入者向け)


干し芋


ここから先は

0字

¥ 100

サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM