regenerate_metrics.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. """初始化空配置字典。"""
  18. self.config = {}
  19. async def regenerate_data(end_date='20260415'):
  20. """重新生成metrics和portfolio数据"""
  21. ctx = SimpleContext()
  22. print("=" * 70)
  23. print(" 重新生成 Metrics 数据(包含新字段)")
  24. print("=" * 70)
  25. # Step 1: 计算 ROI metrics
  26. print(f"\n📊 步骤 1/2: 计算 ROI metrics (end_date={end_date})")
  27. try:
  28. result = await calculate_roi_metrics(ctx, end_date=end_date, min_daily_cost=100.0)
  29. print(f"✅ {result.title}")
  30. if result.metadata:
  31. print(f" 输出文件: {result.metadata.get('metrics_csv')}")
  32. print(f" 全局ROI均值: {result.metadata.get('动态ROI_7日均值_mean_all', 'N/A')}")
  33. except Exception as e:
  34. print(f"❌ ROI计算失败: {e}")
  35. import traceback
  36. traceback.print_exc()
  37. return False
  38. # Step 2: 计算 portfolio summary
  39. print(f"\n📊 步骤 2/2: 计算 Portfolio Summary")
  40. try:
  41. result = await calculate_portfolio_summary(ctx, end_date=end_date)
  42. print(f"✅ {result.title}")
  43. # 打印部分输出
  44. output_lines = result.output.split('\n')
  45. for line in output_lines[:20]:
  46. print(f" {line}")
  47. except Exception as e:
  48. print(f"❌ Portfolio计算失败: {e}")
  49. import traceback
  50. traceback.print_exc()
  51. return False
  52. print("\n" + "=" * 70)
  53. print(" ✅ 数据重新生成完成")
  54. print("=" * 70)
  55. print("\n提示:现在可以运行 `python3 test_strategy_upgrade.py` 进行验证")
  56. return True
  57. if __name__ == "__main__":
  58. end_date = sys.argv[1] if len(sys.argv) > 1 else '20260415'
  59. success = asyncio.run(regenerate_data(end_date))
  60. sys.exit(0 if success else 1)