[Python pandas] bitFlyer の取引ランキングをコマンドでまとめて確認する
やりたいこと
bitFlyer(bF)の取引ランキング情報を簡単に確認したい。
Webからは以下で見れる。
※そもそもランキングって何?
これをチェック
つくったもの
Pythonで各ランキングの上位n位と、それぞれに対する自分や指定した人のランキングを簡単に確認できるコード書いた。実行するとこんな感じ。volume は小数点丸めてる。ついでに BTC/trades, trades/min, BTC/min も出力してみた。
各ランキング(上位n名) ※ここでは5名分
指定した人のランキング
複数人分まとめて取れるようにした
コード
nicknamesを自分やチェックしたい人のものに、ranksを確認したいランキング数(上位n名まで)に変更して実行してください。
import requests
import pandas as pd
import dateutil
from datetime import timedelta
# Input nicknames
nicknames = ["勇者ああああ", "これはまあまあ", ]
# Input ranking range
ranks = 5
# GET
RANKING = "https://lightning.bitflyer.jp/api/trade/ranking?contractRegion=JP"
res = requests.get(RANKING).json()
# 週次換算 trades/min
weeklyRanks = ["VOLUME", "FX", "API", "MANUAL", "NEW_MM_POINT", "NEW_MT_POINT"]
# Ranking
myRanks = {v: "\n<<{}>>\n Rank BTC Trades BTC/Trades Trades/m BTC/m\n{}".format(v, "="*70) for v in nicknames}
for k in [k for k in res.keys()]:
try:
df = pd.DataFrame(res[k])
except Exception as e:
print(k, res.keys(), res, e)
continue
dt = dateutil.parser.parse(df["calculated_date"][0]) + timedelta(hours=9)
minutes = dt.hour * 60 + dt.minute + dt.second / 60
if minutes == 0: minutes = 1440
weekday = dt.weekday()
if k in weeklyRanks:
minutes += weekday * 1440
print("\n\n<<{}>> at {}".format(k, dt.strftime("%Y/%m/%d %H:%M:%S")))
print("Rank BTC Trades BTC/Trades Trades/m BTC/m name\n{}".format("-"*80))
ranks = min(ranks, df.shape[0])
for i in range(ranks):
m = "{:>4}".format(df.index[i] + 1)
m += "{:>10}".format(round(df["volume"].values[i], 1))
m += "{:>9}".format(df["number_of_trades"].values[i])
m += "{:>12.2f}".format(round(df["volume"].values[i] / df["number_of_trades"].values[i], 2))
m += "{:>10.2f}".format(round(df["number_of_trades"].values[i] / minutes, 2))
m += "{:>7.2f}".format(round(df["volume"].values[i] / minutes, 2))
m += " {}".format(df["nickname"].values[i])
print(m)
for n in nicknames:
myRanks[n] += "\n{:<17}".format(k)
df_ = df[df["nickname"] == n]
if df_.empty:
myRanks[n] += " ---".format(k)
else:
myRanks[n] += "{:>4}".format(df_.index[0] + 1)
myRanks[n] += "{:>10}".format(round(df_["volume"].values[0], 1))
myRanks[n] += "{:>9}".format(df_["number_of_trades"].values[0])
myRanks[n] += "{:>12.2f}".format(round(df_["volume"].values[0] / df_["number_of_trades"].values[0], 2))
myRanks[n] += "{:>10.2f}".format(round(df_["number_of_trades"].values[0] / minutes, 2))
myRanks[n] += "{:>7.2f}".format(round(df_["volume"].values[0] / minutes, 2))
# Output
for n,v in myRanks.items():
print(v, "\n")
Special thanks
スナフキンさんのツイートが元ネタです
おわりに
有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。コードは、インデントくずれが起きたりするようなので、コピペ時には注意してください。
マガジン
コメント用note(未購入者向け)
干し芋
ここから先は
0字
¥ 100
サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM