在数据库模型中新增了 `TradeStats` 类,包含交易统计功能,支持按交易对和日期聚合数据。实现了从 `binance_trades` 和 `trades` 表中提取交易数据的逻辑,并创建了相应的统计表 `trade_stats_daily` 和 `trade_stats_time_bucket`。此改动旨在增强交易数据分析能力,为后续的风险控制和决策提供支持。
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
定时任务:将最近 N 天的交易数据聚合到 trade_stats_daily / trade_stats_time_bucket。
|
||
优先从 binance_trades 读取(需先跑 sync_binance_orders.py),无数据时用 trades 表。
|
||
|
||
用法:
|
||
python scripts/aggregate_trade_stats.py # 默认 7 天、默认账号
|
||
python scripts/aggregate_trade_stats.py -d 30 # 最近 30 天
|
||
python scripts/aggregate_trade_stats.py -a 2 # 指定账号
|
||
"""
|
||
import argparse
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
proj = Path(__file__).resolve().parent.parent
|
||
if (proj / "backend").exists():
|
||
sys.path.insert(0, str(proj / "backend"))
|
||
sys.path.insert(0, str(proj))
|
||
|
||
|
||
def main():
|
||
parser = argparse.ArgumentParser(description="聚合交易统计到 trade_stats_* 表")
|
||
parser.add_argument("-a", "--account", type=int, default=None, help="账号 ID,不传则用默认")
|
||
parser.add_argument("-d", "--days", type=int, default=7, help="聚合最近 N 天,默认 7")
|
||
args = parser.parse_args()
|
||
if args.days <= 0:
|
||
print("days 须 > 0")
|
||
sys.exit(1)
|
||
try:
|
||
from database.models import TradeStats
|
||
TradeStats.aggregate_recent_days(days=args.days, account_id=args.account)
|
||
print(f"已聚合最近 {args.days} 天统计 (account_id={args.account or 'default'})")
|
||
except Exception as e:
|
||
print(f"聚合失败: {e}")
|
||
sys.exit(1)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|