fix: timezone handling and prediction logic
- api/models.py: Fix timezone conversion in stats queries by calculating UTC ranges in Python instead of using SQL CONVERT_TZ. Ensure JSON serializable types.
- api/prediction_service.py:
- Update ensure_predictions_for_month to check previous day (ET) to cover CST month start.
- Update _generate_prediction_for_hour to skip saving unclosed candles (current hour).
- trader/auto_trade_polymarket.py: Update to use hourly_model_predictions (V2) table for storing live trading predictions.
This commit is contained in:
1 parent
2993014fa8
commit
99fa79cde4
4 files changed
+232
-111
No files matched your search
@@ -226,6 +226,17 @@ class PredictionService:
|
||||
preds = self.inference_manager.predict_all(df_input)
|
||||
|
||||
# 7. 判断实际涨跌
|
||||
# Check if the candle is closed (current time > candle open time + 1 hour)
|
||||
current_now_utc = datetime.now(ZoneInfo('UTC')).replace(tzinfo=None)
|
||||
candle_close_time = target_time_utc + timedelta(hours=1)
|
||||
|
||||
is_closed = current_now_utc >= candle_close_time
|
||||
|
||||
if not is_closed:
|
||||
# 仅保存已完成的K线预测,未完成的跳过 (等待完成后再生成)
|
||||
# 实时交易逻辑在 auto_trade_polymarket.py 中单独处理
|
||||
return
|
||||
|
||||
actual_result = 1 if target_close > prev_close else 0
|
||||
|
||||
# 8. 组装数据 (宽表格式)
|
||||
@@ -266,7 +277,11 @@ class PredictionService:
|
||||
|
||||
def ensure_predictions_for_month(self, month: str) -> None:
|
||||
"""
|
||||
确保指定月份有预测数据
|
||||
确保指定月份有预测数据 (CST)
|
||||
需要检查:
|
||||
1. 该月的所有日期 (ET)
|
||||
2. 上个月的最后一天 (ET) -> 因为 ET 上个月最后一天 11:00-23:00 对应 CST 该月第一天 00:00-12:00
|
||||
|
||||
Args:
|
||||
month: 月份 (YYYY-MM)
|
||||
"""
|
||||
@@ -281,8 +296,15 @@ class PredictionService:
|
||||
from calendar import monthrange
|
||||
_, last_day = monthrange(year, mon)
|
||||
|
||||
# 1. 确保上个月最后一天有数据 (为了 CST 的开头)
|
||||
first_day_of_month = datetime(year, mon, 1).date()
|
||||
prev_day = first_day_of_month - timedelta(days=1)
|
||||
prev_day_str = prev_day.strftime('%Y-%m-%d')
|
||||
self.ensure_predictions_for_date(prev_day_str)
|
||||
|
||||
today = datetime.now(self.et_tz).date()
|
||||
|
||||
# 2. 确保本月所有日期
|
||||
for day in range(1, last_day + 1):
|
||||
date = f"{year}-{mon:02d}-{day:02d}"
|
||||
date_obj = datetime.strptime(date, '%Y-%m-%d').date()
|
||||
|
||||
Reference in new issue
Block a user