import pandas as pd
from binance.client import Client
client = Client()
info = client.get_exchange_info()
filtered = ['WBTCBUSD']
symbols = [x["symbol"] for x in info['symbols'] if x['status'] == 'TRADING' and not x['symbol'] in filtered]
relevant = [symbol for symbol in symbols if symbol.endswith('BUSD')]
print(f"Number of relevant symbols: {len(relevant)}")
Number of relevant symbols: 320
def getdailydata(symbol):
    frame = pd.DataFrame(client.get_historical_klines(symbol, '1d', '450 days ago UTC'))

    if len(frame) > 0:
        frame = frame.iloc[:,:5]
        frame.columns = ['DateTime', 'Open', 'High', 'Low', 'Close']
        frame = frame.set_index('DateTime')
        frame.index = pd.to_datetime(frame.index, unit='ms')
        frame = frame.astype('float')
        return frame
dfs = []

for coin in relevant:
    dfs.append(getdailydata(coin))

mergeddf = pd.concat(dict(zip(relevant,dfs)), axis=1)
high_close_df = mergeddf.loc[:, mergeddf.columns.get_level_values(1).isin(['High', 'Close'])]
df1 = high_close_df.idxmax(numeric_only=True).drop(labels='Close', level=1).droplevel(1).rename('Date')
df2 = high_close_df.max(numeric_only=True).drop(labels='Close', level=1).droplevel(1).rename('High').round(2)
highdf = pd.merge(df1, df2, right_index=True, left_index=True)
closedf = mergeddf.loc[:, mergeddf.columns.get_level_values(1).isin(['Close'])]
closedf.columns = closedf.columns.droplevel(1)
df1 = (((closedf.iloc[-1] - highdf['High']) / highdf['High']) * 100).round(2).rename('drawdown %')
df2 = (mergeddf.iloc[-1].name - highdf['Date']).dt.days.rename('days since ath')
df3 = highdf['High'].rename('high')
df4 = closedf.iloc[-1].round(2).rename('last')
df5 = pd.merge(df1, df2, right_index=True, left_index=True)
df6 = pd.merge(df5, df3, right_index=True, left_index=True)
df7 = pd.merge(df6, df4, right_index=True, left_index=True)

print(f"Unfiltered length: {len(df7)}")

max_drawdown = 95
min_drawdown = 15
df8 = df7[df7['drawdown %'] > -max_drawdown]
df9 = df8[df8['drawdown %'] < -min_drawdown]

pd.set_option('display.max_rows', None)
summarydf = df9.sort_values(by=['drawdown %'])
summarydf.index.name = 'coin/token'
print(f"Filtered length: {len(summarydf)}")

import os
os.makedirs('data', exist_ok=True)
summarydf.to_csv('data/ath-drawdown.csv')
summarydf
#.nsmallest(20, columns=['drawdown %'])
Unfiltered length: 320
Filtered length: 248
drawdown % days since ath high last
coin/token
DODOBUSD -94.91 439 2.20 0.11
FTMBUSD -94.89 387 3.49 0.18
TVKBUSD -94.85 359 0.55 0.03
SKLBUSD -94.82 429 0.50 0.03
JOEBUSD -94.62 326 2.75 0.15
XVGBUSD -94.55 372 0.04 0.00
RENBUSD -94.46 413 1.37 0.08
WAXPBUSD -94.41 367 0.98 0.05
OMGBUSD -94.40 379 20.13 1.13
CELRBUSD -94.36 419 0.20 0.01
BAKEBUSD -94.33 439 3.09 0.18
PYRBUSD -94.31 353 50.40 2.87
ALPHABUSD -94.26 439 1.50 0.09
RNDRBUSD -94.24 357 7.99 0.46
SXPBUSD -94.23 439 4.09 0.24
ICXBUSD -94.22 369 2.72 0.16
FETBUSD -94.18 374 1.03 0.06
PLABUSD -94.09 361 3.40 0.20
CTSIBUSD -94.06 373 1.73 0.10
GTCBUSD -94.04 357 29.00 1.73
CVXBUSD -93.91 327 63.88 3.89
TKOBUSD -93.75 448 3.47 0.22
ADXBUSD -93.70 386 1.94 0.12
ENJBUSD -93.68 359 4.85 0.31
LRCBUSD -93.62 374 3.86 0.25
ORNBUSD -93.51 427 13.19 0.86
LINABUSD -93.51 377 0.09 0.01
POLSBUSD -93.47 347 5.28 0.34
CKBBUSD -93.40 357 0.04 0.00
1INCHBUSD -93.39 388 8.00 0.53
CELOBUSD -93.36 386 6.87 0.46
OGNBUSD -93.28 373 1.50 0.10
SANDBUSD -93.26 359 8.49 0.57
RSRBUSD -93.25 352 0.06 0.00
BTCSTBUSD -93.21 408 90.59 6.15
MOBBUSD -93.20 204 8.50 0.58
DENTBUSD -93.18 382 0.01 0.00
OMBUSD -93.18 427 0.45 0.03
SCRTBUSD -93.16 387 10.80 0.74
RUNEBUSD -93.13 382 17.28 1.19
FIOBUSD -93.11 351 0.44 0.03
MANABUSD -93.10 359 5.91 0.41
AUCTIONBUSD -93.04 393 63.79 4.44
ZENBUSD -93.02 358 138.00 9.63
API3BUSD -92.99 302 20.00 1.40
LPTBUSD -92.94 375 101.88 7.19
BNTBUSD -92.89 374 5.01 0.36
WRXBUSD -92.84 382 2.10 0.15
STXBUSD -92.79 353 3.26 0.24
COMPBUSD -92.70 439 528.90 38.60
SUSHIBUSD -92.68 429 16.17 1.18
CHRBUSD -92.67 364 1.50 0.11
DFBUSD -92.51 437 0.49 0.04
FARMBUSD -92.41 448 387.60 29.40
TOMOBUSD -92.40 439 3.93 0.30
ROSEBUSD -92.34 308 0.60 0.05
REEFBUSD -92.33 382 0.04 0.00
APTBUSD -92.30 31 59.39 4.57
HOTBUSD -92.22 380 0.02 0.00
FRONTBUSD -92.19 438 2.27 0.18
DYDXBUSD -92.19 415 27.87 2.18
EGLDBUSD -92.17 361 544.65 42.66
BURGERBUSD -92.06 408 6.75 0.54
CRVBUSD -92.00 319 6.81 0.55
SCBUSD -91.97 357 0.03 0.00
DUSKBUSD -91.92 306 1.08 0.09
MINABUSD -91.80 373 6.68 0.55
QUICKBUSD -91.77 448 638.90 52.60
HBARBUSD -91.74 429 0.58 0.05
SUNBUSD -91.62 395 0.06 0.01
NEARBUSD -91.59 309 20.60 1.73
MLNBUSD -91.57 423 234.10 19.74
SYSBUSD -91.56 321 1.33 0.11
TROYBUSD -91.50 400 0.03 0.00
REQBUSD -91.47 344 1.00 0.09
FLUXBUSD -91.42 344 5.43 0.47
STMXBUSD -91.40 441 0.06 0.01
IMXBUSD -91.40 307 4.72 0.41
ELFBUSD -91.34 428 1.40 0.12
AVAXBUSD -91.34 363 146.74 12.71
DEXEBUSD -91.31 350 27.32 2.38
COSBUSD -91.24 337 0.05 0.00
DEGOBUSD -91.20 359 14.43 1.27
DGBBUSD -91.20 439 0.08 0.01
ERNBUSD -91.17 442 20.80 1.84
OCEANBUSD -91.12 353 1.44 0.13
KDABUSD -91.07 253 10.00 0.89
TBUSD -91.00 262 0.23 0.02
LTOBUSD -90.99 363 0.82 0.07
STORJBUSD -90.91 357 3.54 0.32
THETABUSD -90.91 438 9.75 0.89
XVSBUSD -90.82 439 42.94 3.94
LITBUSD -90.82 356 7.77 0.71
IOSTBUSD -90.71 436 0.09 0.01
BSWBUSD -90.71 231 2.18 0.20
WINGBUSD -90.60 113 62.85 5.91
ZILBUSD -90.54 232 0.23 0.02
ARPABUSD -90.48 381 0.28 0.03
FISBUSD -90.45 440 2.85 0.27
GMTBUSD -90.40 205 4.18 0.40
IOTXBUSD -90.35 371 0.26 0.03
KAVABUSD -90.35 446 9.22 0.89
AUTOBUSD -90.31 438 1770.70 171.50
ACHBUSD -90.28 313 0.10 0.01
HIVEBUSD -90.22 358 3.42 0.33
NEOBUSD -90.09 439 66.82 6.62
VETBUSD -89.98 375 0.19 0.02
CTXCBUSD -89.93 337 0.82 0.08
LEVERBUSD -89.92 126 0.01 0.00
DOTBUSD -89.91 380 55.13 5.56
INJBUSD -89.87 439 16.61 1.68
FORBUSD -89.83 428 0.14 0.01
COTIBUSD -89.81 384 0.69 0.07
ALGOBUSD -89.81 366 2.95 0.30
UNFIBUSD -89.79 165 41.84 4.27
FXSBUSD -89.76 230 44.00 4.51
KNCBUSD -89.70 205 5.76 0.59
ANKRBUSD -89.68 357 0.21 0.02
ADABUSD -89.53 443 3.10 0.32
HARDBUSD -89.49 439 1.42 0.15
IOTABUSD -89.44 441 2.09 0.22
AVABUSD -89.41 439 5.40 0.57
ASTRBUSD -89.38 223 0.34 0.04
XTZBUSD -89.36 411 9.18 0.98
PEOPLEBUSD -89.29 331 0.22 0.02
QTUMBUSD -89.22 383 19.23 2.07
ZRXBUSD -89.20 384 1.68 0.18
SNXBUSD -89.17 429 15.89 1.72
DOCKBUSD -89.12 443 0.13 0.01
ENSBUSD -89.08 374 120.00 13.11
ARBUSD -89.07 379 91.24 9.97
OXTBUSD -89.03 374 0.79 0.09
DATABUSD -88.95 406 0.22 0.02
BELBUSD -88.88 401 3.58 0.40
APEBUSD -88.76 205 27.60 3.10
BATBUSD -88.46 356 1.93 0.22
DIABUSD -88.37 434 2.58 0.30
PROMBUSD -88.17 442 34.56 4.09
MDTBUSD -88.07 329 0.18 0.02
STPTBUSD -87.61 402 0.24 0.03
RVNBUSD -87.51 441 0.17 0.02
UMABUSD -87.49 263 13.35 1.67
AAVEBUSD -87.37 388 457.50 57.80
NEXOBUSD -87.29 204 5.65 0.72
MULTIBUSD -87.28 227 25.78 3.28
ZECBUSD -87.25 359 305.20 38.90
NULSBUSD -87.25 330 1.41 0.18
FORTHBUSD -87.20 384 22.35 2.86
ONTBUSD -87.08 439 1.33 0.17
WOOBUSD -87.04 284 0.96 0.12
BCHBUSD -87.01 439 804.00 104.40
BIFIBUSD -86.91 277 2702.50 353.80
DASHBUSD -86.90 440 269.10 35.25
MASKBUSD -86.87 357 22.60 2.97
PHABUSD -86.74 429 1.24 0.16
TRIBEBUSD -86.61 354 1.52 0.20
CITYBUSD -86.35 374 34.95 4.77
EOSBUSD -86.11 439 6.43 0.89
STRAXBUSD -86.01 440 3.23 0.45
TRBBUSD -85.96 371 80.04 11.24
COCOSBUSD -85.93 351 3.28 0.46
YFIBUSD -85.93 440 43887.68 6173.00
IQBUSD -85.87 407 0.03 0.00
UFTBUSD -85.67 437 1.72 0.25
CAKEBUSD -85.51 448 26.21 3.80
MTLBUSD -85.43 438 4.79 0.70
ANTBUSD -85.26 322 14.30 2.11
AGIXBUSD -84.85 36 0.26 0.04
ATMBUSD -84.80 442 19.94 3.03
PHBBUSD -84.77 67 2.56 0.39
POWRBUSD -84.77 363 0.96 0.15
ALPACABUSD -84.59 447 1.44 0.22
BALBUSD -84.58 441 35.68 5.50
LINKBUSD -84.07 374 38.32 6.10
BANDBUSD -83.87 439 11.44 1.84
LTCBUSD -83.70 375 389.00 63.39
PSGBUSD -83.55 447 39.57 6.51
UTKBUSD -83.40 350 0.55 0.09
VIBBUSD -83.26 64 0.28 0.05
BARBUSD -83.20 422 24.65 4.14
LSKBUSD -83.12 352 4.59 0.78
ACMBUSD -83.09 430 16.62 2.81
GBPBUSD -82.58 304 6.85 1.19
MKRBUSD -82.43 449 3791.00 666.00
AERGOBUSD -82.43 440 0.60 0.11
XNOBUSD -82.40 248 3.33 0.59
TFUELBUSD -82.36 282 0.25 0.04
JUVBUSD -82.25 408 20.56 3.65
JSTBUSD -82.22 233 0.12 0.02
NMRBUSD -82.10 427 62.81 11.24
UNIBUSD -81.64 443 31.42 5.77
XLMBUSD -79.84 374 0.44 0.09
AMBBUSD -79.64 67 0.05 0.01
SFPBUSD -79.03 401 3.16 0.66
FIROBUSD -78.93 126 7.45 1.57
ATOMBUSD -77.97 425 44.78 9.86
PUNDIXBUSD -77.60 176 1.67 0.37
SNMBUSD -77.50 68 0.90 0.20
OPBUSD -77.04 171 3.88 0.89
USTCBUSD -77.04 143 0.10 0.02
CTKBUSD -76.89 353 3.28 0.76
MBLBUSD -76.23 204 0.01 0.00
BTCBUSD -75.91 374 69020.00 16627.94
DOGEBUSD -75.25 387 0.34 0.08
ETHBUSD -75.17 374 4867.36 1208.34
ETCBUSD -75.11 439 77.38 19.26
POLYXBUSD -74.98 33 0.52 0.13
BLZBUSD -74.00 87 0.22 0.06
QNTBUSD -73.38 434 429.70 114.40
XRPBUSD -73.30 439 1.42 0.38
ALPINEBUSD -73.14 246 11.91 3.20
AKROBUSD -72.90 126 0.01 0.00
LOOMBUSD -72.77 68 0.17 0.05
DREPBUSD -72.20 176 0.96 0.27
ASRBUSD -72.12 164 9.95 2.77
GTOBUSD -70.97 124 0.04 0.01
MATICBUSD -70.50 327 2.92 0.86
OGBUSD -70.05 93 9.77 2.93
GHSTBUSD -69.49 359 3.33 1.02
CVCBUSD -69.45 96 0.31 0.09
NKNBUSD -67.04 91 0.23 0.08
KEYBUSD -66.94 135 0.01 0.00
STEEMBUSD -66.58 133 0.50 0.17
LDOBUSD -66.17 194 3.55 1.20
STGBUSD -64.31 85 1.15 0.41
NEBLBUSD -63.43 37 3.47 1.27
CHZBUSD -61.85 385 0.66 0.25
REIBUSD -61.83 149 0.06 0.02
GLMBUSD -61.73 68 0.55 0.21
PROSBUSD -61.72 64 2.68 1.03
TRXBUSD -60.21 369 0.13 0.05
BNBBUSD -59.55 377 669.70 270.90
QKCBUSD -59.29 22 0.02 0.01
XMRBUSD -58.65 439 321.90 133.10
SANTOSBUSD -55.33 55 22.66 10.12
ARKBUSD -54.95 72 0.60 0.27
SSVBUSD -53.34 67 20.79 9.70
GASBUSD -47.33 27 3.97 2.09
BNXBUSD -46.33 380 289.00 155.10
LAZIOBUSD -46.14 379 14.40 7.76
SNTBUSD -44.82 36 0.04 0.02
OSMOBUSD -40.64 22 1.87 1.11
GMXBUSD -37.82 45 66.89 41.59
PORTOBUSD -33.90 211 8.50 5.62
BETHBUSD -32.29 69 1729.99 1171.40
VITEBUSD -19.17 1 0.03 0.02
TWTBUSD -17.09 5 2.74 2.27
PAXGBUSD -16.04 256 2070.00 1738.00
import matplotlib
summarydf.reset_index().plot.bar(x='coin/token', y='drawdown %', figsize=(50,10))#, color=["#F699CD"]) # wanted to use red-isdh tone to indicate drawdown but too painful on the eye
<AxesSubplot: xlabel='coin/token'>