bybitの過去frを計算するコード
間違えてるかもですが、せっかく作ったので共有。
# license CC0
import pandas as pd
print('calc fr')
date = pd.to_datetime('2021-03-10 00:00:00Z')
dfs = []
while True:
date_str = date.strftime("%Y-%m-%d")
print(date_str)
url = 'https://public.bybit.com/premium_index/BTCUSD/BTCUSD{}_premium_index.csv.gz'.format(date_str)
try:
df = pd.read_csv(url)
except Exception as e:
print(e)
break
df = df.rename(columns={
'start_at': 'timestamp',
'open': 'op',
'high': 'hi',
'low': 'lo',
'close': 'cl',
'symbol': 'market'
})
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s', utc=True)
df = df[['timestamp', 'cl']]
# display(df)
df['timestamp'] = df['timestamp'].dt.floor('8H')
df = pd.concat([
df.groupby('timestamp')['cl'].mean()
], axis=1)
dfs.append(df)
# display(df)
date += pd.to_timedelta(1, unit='day')
df = pd.concat(dfs)
df = df.sort_values('timestamp')
interest_rate = (0.0006 - 0.0003) / 3.0
df['fr'] = (df['cl'] + (interest_rate - df['cl']).clip(-0.0005, 0.0005) ).shift(2)
df.to_pickle('df_fr.pkl')
display(df)
原理
bybitの過去frを直接取得するAPIが見つからなかったので、以下の計算式に従って、プレミアムインデックスから計算しました。
バックテスト用に書いたので以下から取得。プレミアムインデックスはAPIから取得できるらしいので、書き換えれば当日も取得できそう。
よく探したらあった
xlsxですがfrそのものがありました。
https://www.bybit.com/data/basic/inverse/funding-history?symbol=BTCUSD