-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbd_cut_1.py
More file actions
107 lines (98 loc) · 5.76 KB
/
bd_cut_1.py
File metadata and controls
107 lines (98 loc) · 5.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import os
import polars as pl
from datetime import datetime
# -----------------------------
# CONFIGURATION
DATA_DIR = "datasets/raw/1h" # Folder where raw CSVs are stored
START_DATE_CUTOFF = "2020-01-01"
ASSET_LIST = [
"1000SATSUSDT", "1INCHUSDT", "AAVEUSDT", "ACAUSDT", "ACEUSDT", "ACHUSDT",
"ACMUSDT", "ADAUSDT", "ADXUSDT", "AERGOUSDT", "AEURUSDT", "AEVOUSDT",
"AGLDUSDT", "AIUSDT", "ALCXUSDT", "ALGOUSDT", "ALICEUSDT", "ALPACAUSDT",
"ALPHAUSDT", "ALPINEUSDT", "ALTUSDT", "AMBUSDT", "AMPUSDT", "ANKRUSDT",
"APEUSDT", "API3USDT", "APTUSDT", "ARBUSDT", "ARDRUSDT", "ARKMUSDT",
"ARKUSDT", "ARPAUSDT", "ARUSDT", "ASRUSDT", "ASTRUSDT", "ASTUSDT",
"ATAUSDT", "ATMUSDT", "ATOMUSDT", "AUCTIONUSDT", "AUDIOUSDT", "AVAUSDT",
"AVAXUSDT", "AXLUSDT", "AXSUSDT", "BADGERUSDT", "BAKEUSDT", "BALUSDT",
"BANDUSDT", "BARUSDT", "BATUSDT", "BBUSDT", "BCHUSDT", "BEAMXUSDT",
"BELUSDT", "BETAUSDT", "BICOUSDT", "BIFIUSDT", "BLURUSDT", "BNBUSDT",
"BNTUSDT", "BNXUSDT", "BOMEUSDT", "BONKUSDT", "BSWUSDT", "BTCUSDT",
"BURGERUSDT", "C98USDT", "CAKEUSDT", "CELOUSDT", "CELRUSDT", "CFXUSDT",
"CHESSUSDT", "CHRUSDT", "CHZUSDT", "CITYUSDT", "CKBUSDT", "CLVUSDT",
"COMBOUSDT", "COMPUSDT", "COSUSDT", "COTIUSDT", "CREAMUSDT", "CRVUSDT",
"CTKUSDT", "CTSIUSDT", "CTXCUSDT", "CVCUSDT", "CVXUSDT", "CYBERUSDT",
"DARUSDT", "DASHUSDT", "DATAUSDT", "DCRUSDT", "DEGOUSDT", "DENTUSDT",
"DEXEUSDT", "DFUSDT", "DGBUSDT", "DIAUSDT", "DODOUSDT", "DOGEUSDT",
"DOTUSDT", "DUSKUSDT", "DYDXUSDT", "DYMUSDT", "EDUUSDT", "EGLDUSDT",
"ELFUSDT", "ENAUSDT", "ENJUSDT", "ENSUSDT", "EOSUSDT", "ERNUSDT",
"ETCUSDT", "ETHFIUSDT", "ETHUSDT", "EURUSDT", "FARMUSDT", "FDUSDUSDT",
"FETUSDT", "FIDAUSDT", "FILUSDT", "FIOUSDT", "FIROUSDT", "FISUSDT",
"FLMUSDT", "FLOKIUSDT", "FLOWUSDT", "FLUXUSDT", "FORTHUSDT", "FTMUSDT",
"FTTUSDT", "FUNUSDT", "FXSUSDT", "GALAUSDT", "GASUSDT", "GHSTUSDT",
"GLMRUSDT", "GLMUSDT", "GMTUSDT", "GMXUSDT", "GNOUSDT", "GNSUSDT",
"GRTUSDT", "GTCUSDT", "HARDUSDT", "HBARUSDT", "HFTUSDT", "HIFIUSDT",
"HIGHUSDT", "HIVEUSDT", "HOOKUSDT", "HOTUSDT", "ICPUSDT", "ICXUSDT",
"IDEXUSDT", "IDUSDT", "ILVUSDT", "IMXUSDT", "INJUSDT", "IOSTUSDT",
"IOTAUSDT", "IOTXUSDT", "IQUSDT", "JASMYUSDT", "JOEUSDT", "JSTUSDT",
"JTOUSDT", "JUPUSDT", "JUVUSDT", "KAVAUSDT", "KDAUSDT", "KMDUSDT",
"KNCUSDT", "KSMUSDT", "LAZIOUSDT", "LDOUSDT", "LEVERUSDT", "LINAUSDT",
"LINKUSDT", "LITUSDT", "LOKAUSDT", "LPTUSDT", "LQTYUSDT", "LRCUSDT",
"LSKUSDT", "LTCUSDT", "LTOUSDT", "LUNAUSDT", "LUNCUSDT", "MAGICUSDT",
"MANAUSDT", "MANTAUSDT", "MASKUSDT", "MAVUSDT", "MBLUSDT", "MBOXUSDT",
"MDTUSDT", "MEMEUSDT", "METISUSDT", "MINAUSDT", "MKRUSDT", "MLNUSDT",
"MOVRUSDT", "MTLUSDT", "NEARUSDT", "NEOUSDT", "NEXOUSDT", "NFPUSDT",
"NKNUSDT", "NMRUSDT", "NOTUSDT", "NTRNUSDT", "NULSUSDT", "OGNUSDT",
"OGUSDT", "OMNIUSDT", "OMUSDT", "ONEUSDT", "ONGUSDT", "ONTUSDT",
"OPUSDT", "ORDIUSDT", "OSMOUSDT", "OXTUSDT", "PAXGUSDT", "PDAUSDT",
"PENDLEUSDT", "PEOPLEUSDT", "PEPEUSDT", "PERPUSDT", "PHAUSDT", "PHBUSDT",
"PIVXUSDT", "PIXELUSDT", "POLYXUSDT", "PONDUSDT", "PORTALUSDT", "PORTOUSDT",
"POWRUSDT", "PROMUSDT", "PROSUSDT", "PSGUSDT", "PUNDIXUSDT", "PYRUSDT",
"PYTHUSDT", "QIUSDT", "QKCUSDT", "QNTUSDT", "QUICKUSDT", "RADUSDT",
"RAREUSDT", "RAYUSDT", "RDNTUSDT", "REIUSDT", "REQUSDT", "REZUSDT",
"RIFUSDT", "RLCUSDT", "RONINUSDT", "ROSEUSDT", "RPLUSDT", "RSRUSDT",
"RUNEUSDT", "RVNUSDT", "SAGAUSDT", "SANDUSDT", "SANTOSUSDT", "SCRTUSDT",
"SCUSDT", "SEIUSDT", "SFPUSDT", "SHIBUSDT", "SKLUSDT", "SLPUSDT",
"SNTUSDT", "SNXUSDT", "SOLUSDT", "SPELLUSDT", "SSVUSDT", "STEEMUSDT",
"STGUSDT", "STMXUSDT", "STORJUSDT", "STPTUSDT", "STRAXUSDT", "STRKUSDT",
"STXUSDT", "SUIUSDT", "SUNUSDT", "SUPERUSDT", "SUSHIUSDT", "SXPUSDT",
"SYNUSDT", "SYSUSDT", "TAOUSDT", "TFUELUSDT", "THETAUSDT", "TIAUSDT",
"TKOUSDT", "TLMUSDT", "TNSRUSDT", "TRBUSDT", "TROYUSDT", "TRUUSDT",
"TRXUSDT", "TUSDT", "TUSDUSDT", "TWTUSDT", "UFTUSDT", "UMAUSDT",
"UNIUSDT", "USDCUSDT", "USDPUSDT", "USTCUSDT", "UTKUSDT", "VANRYUSDT",
"VETUSDT", "VIBUSDT", "VICUSDT", "VIDTUSDT", "VITEUSDT", "VOXELUSDT",
"VTHOUSDT", "WANUSDT", "WAXPUSDT", "WBETHUSDT", "WBTCUSDT", "WIFUSDT",
"WINGUSDT", "WINUSDT", "WLDUSDT", "WOOUSDT", "WUSDT", "XAIUSDT",
"XECUSDT", "XLMUSDT", "XNOUSDT", "XRPUSDT", "XTZUSDT", "XVGUSDT",
"XVSUSDT", "YFIUSDT", "YGGUSDT", "ZECUSDT", "ZENUSDT", "ZILUSDT",
"ZRXUSDT"
]
# -----------------------------
def asset_has_data_from(asset_name: str, data_dir: str, cutoff: str) -> bool:
file_path = os.path.join(data_dir, f"{asset_name}_1h_historical_data.csv")
if not os.path.isfile(file_path):
return False
try:
df = pl.read_csv(file_path, columns=["timestamp"])
df = df.with_columns(pl.col("timestamp").str.strptime(pl.Datetime))
min_date = df.select(pl.col("timestamp").min()).item()
return min_date <= datetime.strptime(cutoff, "%Y-%m-%d")
except Exception as e:
print(f"⚠️ Failed for {asset_name}: {e}")
return False
def filter_assets_by_start_date(asset_names, data_dir, cutoff_date):
print(f"🔍 Checking data availability for {len(asset_names)} assets...")
valid_assets = []
for asset in asset_names:
if asset_has_data_from(asset, data_dir, cutoff_date):
valid_assets.append(asset)
return valid_assets
if __name__ == "__main__":
filtered_assets = filter_assets_by_start_date(ASSET_LIST, DATA_DIR, START_DATE_CUTOFF)
print("\n✅ Assets with data from or before", START_DATE_CUTOFF)
for asset in filtered_assets:
print(asset)
# Optional: Save to CSV
with open("filtered_assets.csv", "w") as f:
for asset in filtered_assets:
f.write(f"{asset}\n")
print("\n💾 Saved to filtered_assets.csv")