BFSX2ユーザー向けの OI データ取得サービスのためのライブラリとサンプルコードです
pip install cryptography influxdb pandas
1. 接続に必要な情報 (host, username , password) を事前に準備します
BFSX2専用Discordにて必要な情報を用意していますので、事前に必要な情報を用意しておいてください。
2. auth_dbクラスを利用してワンタイムアクセスキーを取得
接続先hostを指定して auth_db クラスのインスタンスを生成し、generate_keyメソッドにユーザー名(DiscordID)とパスワードを指定してワンタイムアクセスキーを取得します
アクセスキーは6時間ごとに変化しますので、連続的に稼働させる場合には定期的または毎回アクセスキーの取得を行ってください。
>>> key = auth_db(host).generate_key(username, password)
3. oi_dbクラスを利用してサーバーへ接続
接続先hostと取得したワンタイムアクセスキーを指定して oi_db クラスのインスタンスを生成します。
>>> db = oi_db(host, key)
4. query_exchangesメソッドを使用して取得可能な取引所のリストを取得することが出来ます
>>> db.query_exchanges()
['binance', 'bitmex', 'bybit', 'ftx', 'phemex']
5. query_oiメソッドを使用し取引所と取得期間を指定してOI情報を含むローソク足データ(5分足)を取得することが出来ます
>>> db.query_oi(exchange='ftx', period="31d")
open high low close volume group usdbase btcbase
date
2021-07-17 11:00:00+09:00 31398.0 31411.0 31321.0 31344.0 5.380103e+06 31300.0 4.210162e+04 42101.6242
2021-07-17 11:05:00+09:00 31344.0 31349.0 31277.0 31328.0 8.081574e+06 31300.0 4.215518e+04 42155.1750
2021-07-17 11:10:00+09:00 31328.0 31333.0 31252.0 31319.0 1.005782e+07 31300.0 4.221473e+04 42214.7339
2021-07-17 11:15:00+09:00 31319.0 31377.0 31314.0 31345.0 6.883365e+06 31300.0 4.224277e+04 42242.7717
2021-07-17 11:20:00+09:00 31345.0 31363.0 31246.0 31298.0 8.029254e+06 31300.0 4.229422e+04 42294.2217
... ... ... ... ... ... ... ... ...
2021-08-17 10:30:00+09:00 46318.0 46318.0 46185.0 46201.0 7.844221e+06 46200.0 2.691400e+09 58254.1535
2021-08-17 10:35:00+09:00 46201.0 46249.0 46170.0 46249.0 4.962152e+06 46200.0 2.694531e+09 58261.3941
2021-08-17 10:40:00+09:00 46249.0 46284.0 46178.0 46284.0 6.151954e+06 46200.0 2.695172e+09 58231.1910
2021-08-17 10:45:00+09:00 46284.0 46421.0 46284.0 46325.0 1.287331e+07 46300.0 2.695946e+09 58196.3433
2021-08-17 10:50:00+09:00 46325.0 46335.0 46224.0 46254.0 6.053310e+06 46200.0 2.691418e+09 58187.7832
[8912 rows x 8 columns]
- pediodでは m:分, h:時, d:日, w:週 が指定できます。
- btcbase カラムが OI (単位:BTC)で、usdbaseカラムはそれにcloseを掛けた値です
- group はOHLC/4 の値が入っています
get_oi.py がOIを取得するサンプルコードです(host, username, password)は別途入手した情報に書き換えて使用してください。
(実行例)
ec2-user:~/environment/database_connect (master) $ python get_oi.py
open high low close volume group usdbase btcbase
date
2021-07-17 11:45:00+09:00 31452.0 31459.0 31393.0 31396.0 2.213559e+06 31400.0 4.226988e+04 42269.8790
2021-07-17 11:50:00+09:00 31396.0 31396.0 31246.0 31317.0 1.267483e+07 31300.0 4.227386e+04 42273.8557
2021-07-17 11:55:00+09:00 31317.0 31348.0 31310.0 31333.0 1.426154e+06 31300.0 4.225570e+04 42255.6998
2021-07-17 12:00:00+09:00 31333.0 31353.0 31283.0 31352.0 5.115069e+06 31300.0 4.226293e+04 42262.9255
2021-07-17 12:05:00+09:00 31352.0 31389.0 31352.0 31389.0 2.277635e+06 31300.0 4.225854e+04 42258.5418
... ... ... ... ... ... ... ... ...
2021-08-17 11:10:00+09:00 46312.0 46349.0 46272.0 46336.0 2.874162e+06 46300.0 2.698466e+09 58236.9141
2021-08-17 11:15:00+09:00 46336.0 46339.0 46227.0 46301.0 5.096552e+06 46300.0 2.696442e+09 58237.2233
2021-08-17 11:20:00+09:00 46301.0 46325.0 46197.0 46197.0 2.645007e+06 46200.0 2.690774e+09 58245.6380
2021-08-17 11:25:00+09:00 46197.0 46246.0 46187.0 46215.0 1.973865e+06 46200.0 2.691677e+09 58242.4914
2021-08-17 11:30:00+09:00 46215.0 46290.0 46210.0 46221.0 3.108960e+06 46200.0 2.692221e+09 58246.7098
[8911 rows x 8 columns]
['binance', 'bitmex', 'bybit', 'ftx', 'phemex']
このようなコードで複数取引所の合算コードを CSV ファイルに出力することもできます。(バックテストなどでお使いいただけます)
# DB接続
db = oi_db( host, key )
# 対象の取引所
exchanges = ['binance', 'bitmex', 'bybit', 'ftx']
# 複数の取引所のデータを取得して一つのpandasに結合
datas = [db.query_oi( exchange=e, period="31d" )[['btcbase']].set_axis([e], axis='columns') for e in exchanges]
df = datas[0].join(datas[1:])
# 複数の取引所のOIを合算
df['total'] = df[[e for e in exchanges]].sum(axis=1,skipna=True)
# 価格情報を付加
df = pd.concat( [df, db.query_oi( exchange="bybit", period="31d" )[['open','high','low','close','volume']]] ).groupby(level=0).last()
# ファイルに保存
df.to_csv("oi.csv")
頻繁なアクセスはサーバーの負荷となりますので、3分あたり30回以上のアクセスが発生する場合には、自動的にウェイトが入るようになっています。コードを改変するなどして頻繁なアクセスを行うことの無いようにしてください。
サーバーの負荷になるような高頻度のアクセスが見られた場合には、パスワードを無効にする場合があります。