Here we will download and display calendar futures spread on btc and eth from binance.
We will use the following code to get the data via http API. We will look into september / december 2020 calendar spread for coin futures (delivered in coin).
import requests from datetime import datetime def ts2dt(x): return (datetime.utcfromtimestamp(int(x)/1000.)) def getqf(pair='ETHUSD',interval='1d',q=0): contractType={1:'CURRENT_QUARTER',0:'NEXT_QUARTER'}[q] r =requests.get(f'https://www.binance.com/dapi/v1/continuousKlines?pair={pair}&interval={interval}&contractType={contractType}&limit=800').json() df=DF(r) df[0]=df[0].apply(ts2dt) df[6]=df[6].apply(ts2dt) df=df.set_index(0) return df.apply(pd.to_numeric) ethdf1=getqf(pair='ETHUSD',interval='2h',q=0)#.set_index(0) ethdf2=getqf(pair='ETHUSD',interval='2h',q=1)#.set_index(0) eth=(ethdf1-ethdf2) #ethereum spread btcdf1=getqf(pair='BTCUSD',interval='2h',q=0)#.set_index(0) btcdf2=getqf(pair='BTCUSD',interval='2h',q=1)#.set_index(0) btc=(btcdf1-btcdf2) #bitcoin spread (btcdf1).join(50*btc,rsuffix='btc')[['1','1btc']].plot() #btc spread and btc price
BTC price (blue) and september – december calendar BTCUSD spread (x50) :
And the same for Ethereum futures and calendar spread:
and now both eth and btc spread after rank transform to show that they move in tandem: