迁移内容: - config/strategies/rotation.yaml → strategies/rotation/config.yaml 路径更新(核心文件): - strategies/rotation/strategy.py(注释示例) - scripts/generate_legacy_report.py(config_path) - run_rotation.py(注释和默认参数) - datasource/hybrid_source.py(from_yaml示例和fetch_rotation_data) 保留: - config/strategies/cci.yaml(无对应策略目录,暂保留) 设计原则:策略模块自包含,配置与实现同目录,方便移植和复制 验证:策略加载成功(候选池11只,回测区间2019-01-01 ~ 2026-05-12)
49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
ETF轮动策略回测入口
|
|
|
|
用法:
|
|
python run_rotation.py
|
|
python run_rotation.py --config strategies/rotation/config.yaml
|
|
python run_rotation.py --save-path results/my_rotation
|
|
"""
|
|
|
|
import argparse
|
|
import time
|
|
from datetime import datetime
|
|
|
|
from strategies.rotation.strategy import RotationStrategy
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="ETF轮动策略回测")
|
|
parser.add_argument(
|
|
"--config",
|
|
type=str,
|
|
default="strategies/rotation/config.yaml",
|
|
help="配置文件路径",
|
|
)
|
|
parser.add_argument(
|
|
"--save-path",
|
|
type=str,
|
|
default="results/rotation",
|
|
help="报告保存路径前缀",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
start_time = time.time()
|
|
|
|
# 从配置创建策略
|
|
strategy = RotationStrategy.from_yaml(args.config)
|
|
|
|
# 运行回测
|
|
result = strategy.run_backtest(save_path=args.save_path)
|
|
|
|
elapsed = time.time() - start_time
|
|
print(f"\n总耗时: {elapsed:.1f}秒")
|
|
|
|
return result
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |