見出し画像

FTX ビットコイン現物と先物の乖離率を取得するPythonコード

これis何

ビットコインがあまりに暇ムーブしているのでbotで遊んでるこの頃です。
もう使えなくなったものからまだエッジのあるものまで、いろんな戦略の仕組みを有料/無料問わず調べて「ほえ〜」となっています。
その中で、いくつかの戦略は実際にbotとして実装してみて動かしたりもします。
今回はビットコイン現物と先物の乖離をとってアレコレいい感じにトレードするbotを実装した時に作った、 ビットコインの現物と先物の過去の価格を取ってきて、乖離率を計算するという下準備コードを書き散らかしておく次第🥱

実行環境

  • 取引所

    • FTX

  • 言語

    • Python 3.9.7

  • ライブラリ

    • ftx 1.2.0

    • datetime

    • pandas 1.4.0

まずは過去の価格データ(OHLCV)取得

import ftx
import pandas as pd
from datetime import datetime
from datetime import timedelta

client = ftx.FtxClient()

# Get OHLCV and convert to DataFrame
def get_ohlcv(symbol, start_time, end_time, resolution_seconds):
    start_time_stamp = start_time.timestamp()
    end_time_stamp = end_time.timestamp()
    time_delta = timedelta(seconds=resolution_seconds)

    df = pd.DataFrame(columns=['startTime', 'time', 'open', 'high', 'low', 'close', 'volume'])

    while start_time_stamp < end_time_stamp:
        historical_data = client.get_historical_data(
            symbol,
            resolution=resolution_seconds,  # window length in seconds. options: 15, 60, 300, 900, 3600, 14400, 86400
            limit=5000,  # max 5000
            start_time=start_time_stamp,
            end_time=end_time_stamp)
        historical_df = pd.DataFrame(historical_data)

        df = pd.concat([df, historical_df], axis=0)

        historical_df_end_time = datetime.fromisoformat(historical_df.iloc[0]['startTime'])
        end_time_stamp = (historical_df_end_time - time_delta).timestamp()

    df = df.drop_duplicates()

    # 日付が古いものを先頭へ、新しいものを後方へ
    df = df.sort_values('time')

    return df

価格データ取るだけならAPIキーとかいらないから、環境同じならこのコードコピペで過去データ取れるはず👍
get_ohlcvに取得するコイン(symbol)と取得開始日(start_time)、取得終了日(end_time)、何分足(何時間足)で取るか(resolution_seconds)を渡して過去の価格データを取ってきてDataFrameにしているだけ。
resolution_secondsの単位は秒なので、例えば60(s)を渡すと1分刻みのデータが取れる👍

このメソッドを使ってビットコイン現物と先物のOHLCVを取る。

df_btcusd = get_ohlcv(symbol='BTC/USD', start_time=datetime(2021, 1, 1), end_time=datetime.now(), resolution_seconds=300)
df_btcperp = get_ohlcv(symbol='BTC-PERP', start_time=datetime(2021, 1, 1), end_time=datetime.now(), resolution_seconds=300)

現先乖離の計算

df_btcperp['kairi'] = (df_btcperp['close'] - df_btcusd['close']) / df_btcusd['close']

乖離の計算はたったこれだけ。先物の価格(df_btcperp)から現物の価格(df_btcusd)を引いて割ってやる。

おまけ CSV出力

バックテストや実際のトレード時に使いたい場合はこのデータをCSVに落としておくといい。
ディレクトリやファイル名は適宜変えてよろしく🙋‍♂️

df_btcperp.to_csv('./ohlcv/FTX_BTCPERP+Kairi.csv', index=False)


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