regenerate_metrics.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env python3
  2. """
  3. 重新生成 metrics 数据(带新字段)
  4. """
  5. import asyncio
  6. import sys
  7. from pathlib import Path
  8. # 添加项目根目录到路径
  9. PROJECT_ROOT = Path(__file__).parent.parent.parent
  10. sys.path.insert(0, str(PROJECT_ROOT))
  11. from examples.auto_put_ad_mini.tools.roi_calculator import calculate_roi_metrics
  12. from examples.auto_put_ad_mini.tools.portfolio_metrics import calculate_portfolio_summary
  13. # 模拟ToolContext
  14. class SimpleContext:
  15. """简单的上下文模拟"""
  16. def __init__(self):
  17. self.config = {}
  18. async def regenerate_data(end_date='20260415'):
  19. """重新生成metrics和portfolio数据"""
  20. ctx = SimpleContext()
  21. print("=" * 70)
  22. print(" 重新生成 Metrics 数据(包含新字段)")
  23. print("=" * 70)
  24. # Step 1: 计算 ROI metrics
  25. print(f"\n📊 步骤 1/2: 计算 ROI metrics (end_date={end_date})")
  26. try:
  27. result = await calculate_roi_metrics(ctx, end_date=end_date, min_daily_cost=100.0)
  28. print(f"✅ {result.title}")
  29. if result.metadata:
  30. print(f" 输出文件: {result.metadata.get('metrics_csv')}")
  31. print(f" 全局ROI均值: {result.metadata.get('动态ROI_7日均值_mean_all', 'N/A')}")
  32. except Exception as e:
  33. print(f"❌ ROI计算失败: {e}")
  34. import traceback
  35. traceback.print_exc()
  36. return False
  37. # Step 2: 计算 portfolio summary
  38. print(f"\n📊 步骤 2/2: 计算 Portfolio Summary")
  39. try:
  40. result = await calculate_portfolio_summary(ctx, end_date=end_date)
  41. print(f"✅ {result.title}")
  42. # 打印部分输出
  43. output_lines = result.output.split('\n')
  44. for line in output_lines[:20]:
  45. print(f" {line}")
  46. except Exception as e:
  47. print(f"❌ Portfolio计算失败: {e}")
  48. import traceback
  49. traceback.print_exc()
  50. return False
  51. print("\n" + "=" * 70)
  52. print(" ✅ 数据重新生成完成")
  53. print("=" * 70)
  54. print("\n提示:现在可以运行 `python3 test_strategy_upgrade.py` 进行验证")
  55. return True
  56. if __name__ == "__main__":
  57. end_date = sys.argv[1] if len(sys.argv) > 1 else '20260415'
  58. success = asyncio.run(regenerate_data(end_date))
  59. sys.exit(0 if success else 1)