Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -71,6 +71,12 @@ def fetch_and_upload_data():
|
|
| 71 |
if not data or data[-1][0] == last_timestamp:
|
| 72 |
break
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
ohlcv.extend(data)
|
| 75 |
last_timestamp = data[-1][0]
|
| 76 |
current_since = data[-1][0] + 1
|
|
@@ -90,6 +96,13 @@ def fetch_and_upload_data():
|
|
| 90 |
|
| 91 |
# Convert to DataFrame and process
|
| 92 |
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
|
| 94 |
df['symbol'] = symbol
|
| 95 |
df['market_type'] = data_type
|
|
@@ -99,11 +112,26 @@ def fetch_and_upload_data():
|
|
| 99 |
# Save to CSV
|
| 100 |
base_symbol = symbol.split('/')[0]
|
| 101 |
filename = f"{base_symbol}_USDT_Binance_{data_type}_{timeframe}.csv"
|
| 102 |
-
subfolder = "data/
|
| 103 |
os.makedirs(subfolder, exist_ok=True)
|
| 104 |
filepath = os.path.join(subfolder, filename)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
df.to_csv(filepath, index=False)
|
| 106 |
-
|
| 107 |
# Upload to Hugging Face
|
| 108 |
api = HfApi(token=HF_TOKEN)
|
| 109 |
api.upload_file(
|
|
@@ -113,7 +141,7 @@ def fetch_and_upload_data():
|
|
| 113 |
repo_type="dataset",
|
| 114 |
commit_message=f"Update {filename}"
|
| 115 |
)
|
| 116 |
-
msg = f"Successfully uploaded {filepath}"
|
| 117 |
output_messages.append(msg)
|
| 118 |
latest_output = output_messages.copy()
|
| 119 |
|
|
|
|
| 71 |
if not data or data[-1][0] == last_timestamp:
|
| 72 |
break
|
| 73 |
|
| 74 |
+
# Validate data structure
|
| 75 |
+
if not all(len(candle) == 6 for candle in data):
|
| 76 |
+
msg = f"Invalid data structure for {symbol} {timeframe} {data_type}"
|
| 77 |
+
output_messages.append(msg)
|
| 78 |
+
break
|
| 79 |
+
|
| 80 |
ohlcv.extend(data)
|
| 81 |
last_timestamp = data[-1][0]
|
| 82 |
current_since = data[-1][0] + 1
|
|
|
|
| 96 |
|
| 97 |
# Convert to DataFrame and process
|
| 98 |
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
|
| 99 |
+
|
| 100 |
+
# Validate data types and ranges
|
| 101 |
+
if df['timestamp'].isna().any() or df['open'].isna().any():
|
| 102 |
+
msg = f"Invalid data detected for {symbol} {timeframe} {data_type}"
|
| 103 |
+
output_messages.append(msg)
|
| 104 |
+
continue
|
| 105 |
+
|
| 106 |
df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
|
| 107 |
df['symbol'] = symbol
|
| 108 |
df['market_type'] = data_type
|
|
|
|
| 112 |
# Save to CSV
|
| 113 |
base_symbol = symbol.split('/')[0]
|
| 114 |
filename = f"{base_symbol}_USDT_Binance_{data_type}_{timeframe}.csv"
|
| 115 |
+
subfolder = f"data/{data_type}"
|
| 116 |
os.makedirs(subfolder, exist_ok=True)
|
| 117 |
filepath = os.path.join(subfolder, filename)
|
| 118 |
+
|
| 119 |
+
# Verify timeframe consistency
|
| 120 |
+
if timeframe == '1d':
|
| 121 |
+
time_diff = df['timestamp'].diff().median() / (1000 * 60 * 60 * 24)
|
| 122 |
+
if not (0.9 < time_diff < 1.1): # Allow 10% deviation
|
| 123 |
+
msg = f"Inconsistent daily intervals detected for {symbol} {timeframe} {data_type}"
|
| 124 |
+
output_messages.append(msg)
|
| 125 |
+
continue
|
| 126 |
+
elif timeframe == '1h':
|
| 127 |
+
time_diff = df['timestamp'].diff().median() / (1000 * 60 * 60)
|
| 128 |
+
if not (0.9 < time_diff < 1.1): # Allow 10% deviation
|
| 129 |
+
msg = f"Inconsistent hourly intervals detected for {symbol} {timeframe} {data_type}"
|
| 130 |
+
output_messages.append(msg)
|
| 131 |
+
continue
|
| 132 |
+
|
| 133 |
df.to_csv(filepath, index=False)
|
| 134 |
+
|
| 135 |
# Upload to Hugging Face
|
| 136 |
api = HfApi(token=HF_TOKEN)
|
| 137 |
api.upload_file(
|
|
|
|
| 141 |
repo_type="dataset",
|
| 142 |
commit_message=f"Update {filename}"
|
| 143 |
)
|
| 144 |
+
msg = f"Successfully uploaded {filepath} ({len(df)} records)"
|
| 145 |
output_messages.append(msg)
|
| 146 |
latest_output = output_messages.copy()
|
| 147 |
|