Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save melardev/6b02ddce7d82dd9278751f35508d98f1 to your computer and use it in GitHub Desktop.
Save melardev/6b02ddce7d82dd9278751f35508d98f1 to your computer and use it in GitHub Desktop.
"""
This script gets all Binance futures tickers, it tries to match the spot tickers against the
futures tickers.
The resulted TradingView list consists of ALL futures + their spot equivalents,
any other spot ticker (like $PYR) is not included.
This is useful for:
- Quickly highlight spot/futures premium, price difference
- Quickly switch from spot to futures chart to spot differences, for instance if futures had a massive wick that does not exist
in spot, then you may no longer be interested in the setup anymore as it is not clear to define when the liquidity is swept or not.
"""
import requests
whitelisted_quotes = [
'USDT',
]
futures_url = "https://fapi.binance.com/fapi/v1/exchangeInfo"
spot_url = "https://api.binance.com/api/v3/exchangeInfo"
response = requests.get(futures_url)
if response.status_code != 200:
raise ValueError(f'Invalid HTTP response {response.content.decode()}')
futures_data = response.json()
message = ''
spot_futures_map = set()
futures_pairs = {}
for futures_pair in futures_data['symbols']:
if futures_pair['status'] == "TRADING":
base = futures_pair['baseAsset']
quote = futures_pair['quoteAsset']
if quote != 'USDT':
continue
if futures_pair['status'] == "TRADING" and futures_pair['contractType'] == 'PERPETUAL':
futures_pairs[base] = quote
response = requests.get(spot_url)
if response.status_code != 200:
raise ValueError(f'Invalid HTTP response {response.content.decode()}')
spot_data = response.json()
spot_pairs = {}
for spot_pair in spot_data['symbols']:
if spot_pair['status'] == "TRADING":
base = spot_pair['baseAsset']
quote = spot_pair['quoteAsset']
if quote != 'USDT':
continue
add = False
if base in futures_pairs:
add = True
else:
for k in futures_pairs.keys():
if (k.startswith('100') and k[3:] == base) or (k.startswith('1000') and k[4:] == base):
add = True
if add:
spot_pairs[base] = quote
for base, quote in spot_pairs.items():
message += f"BINANCE:{base}{quote},"
for base, quote in futures_pairs.items():
message += f"BINANCE:{base}{quote}PERP,"
if message.endswith(','):
message = message[:-1]
print(message)
with open('tradingview_futures_and_spot.txt', 'w') as fd:
fd.write(message)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment