# 策略2:中证 A500 与沪深 300 双轴收盘价图 ## 目标 从 `sidecar` 模块获取中证 A500 与沪深 300 指数日线数据,将两者自中证 A500 成立日至今日的收盘价绘制在同一张 SVG 图中。由于两个指数价格区间不同,图表使用双 Y 轴:左轴对应中证 A500,右轴对应沪深 300。 ## 假设 - 中证 A500 指数代码:`sh000510`。 - 沪深 300 指数代码:`sh000300`。 - 横轴起始日:`2024-09-23`。 - 数据周期:日线。 - K 线数据源:`sidecar.sources.tencent.TencentFinanceSource`。 - 输出格式:SVG 图片,默认路径为 `strategy/output/a500_hs300_close.svg`。 ## 双轴缩放规则 - 两个指数都以 `2024-09-23` 的收盘价作为各自基准价。 - Y 坐标按相对基准价的涨跌比例计算,而不是按各自价格区间独立拉伸。 - 因此两个指数起点位于同一水平线;相同涨跌比例对应相同纵向距离。 - 终点不强行对齐,终点高度真实反映各自相对起点的涨跌幅差异。 - 左右 Y 轴仍显示各自指数价格,同时括号展示对应涨跌比例。 ## 数据处理 - 两个指数都通过 `sidecar` 统一服务读取并写入 DuckDB 缓存。 - 先过滤 `2024-09-23` 之前的数据。 - 再按共同交易日对齐,避免不同市场日历或缺失数据导致横轴错位。 ## 运行方式 ```powershell python -m strategy.a500_hs300_close_chart --refresh ``` 可指定输出路径: ```powershell python -m strategy.a500_hs300_close_chart --output strategy/output/a500_hs300_close.svg --refresh ``` ## 输入 | 参数 | 类型 | 默认值 | 说明 | |---|---|---|---| | `--output` | string | `strategy/output/a500_hs300_close.svg` | 输出 SVG 文件路径 | | `--refresh` | bool | `False` | 是否强制刷新 sidecar 缓存 | ## 输出 生成一张 SVG 图片: - 横轴:共同交易日期,范围为中证 A500 成立日 `2024-09-23` 至当前可获取的最新交易日。 - 左轴:中证 A500 日收盘价。 - 右轴:沪深 300 日收盘价。 - 标题:`中证 A500 与沪深 300 收盘价对比`。 ## 测试用例 - `5-1`:按共同交易日对齐两组收盘价。 - `5-2`:生成包含双轴图例和两条折线的 SVG。 - `5-3`:相同涨跌比例映射到相同 Y 坐标。