Created
May 9, 2023 00:31
-
-
Save melardev/6b02ddce7d82dd9278751f35508d98f1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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