Commit Graph

14 Commits

Author SHA1 Message Date
63c56f0001 feat(execution): 回测调仓事件记录功能增强
新增调仓事件记录功能,详细记录每次调仓的信息:

核心改进:
1. BacktestExecutor新增_apply_trade_cost_with_events方法
   - 记录每次调仓的基本信息(持仓变化、调入调出标的)
   - 记录换手率、调仓成本、持仓天数、当日收益

2. 新增_enrich_rebalance_events方法
   - 补充净值信息(调仓前净值、调仓后净值、净值变化%)

3. strategy.py保存调仓记录到CSV
   - 新增rebalances.csv文件
   - 返回结果包含rebalance_events

调仓记录字段:
- 调仓前持仓、调仓后持仓
- 调入标的、调出标的
- 换手率、调仓成本
- 持仓天数、当日收益
- 调仓前净值、调仓后净值、净值变化%

应用场景:
- 分析每次调仓对收益的影响
- 评估调仓决策质量
- 统计调仓频率与效果
2026-05-16 21:15:31 +08:00
2c1689089d revert(execution): 恢复动态权重仓位分配逻辑
- 恢复原逻辑: 按实际持仓数量等权分配
- 选出2只时每只权重50%,选出1只时权重100%
- 收益计算恢复为 np.mean(returns)
- 交易成本恢复为 swapped/len(old)
- 固定仓位逻辑记录在 docs/experiments/仓位分配逻辑修改分析.md
2026-05-16 00:34:12 +08:00
444dc0e751 refactor(execution): 改为固定仓位分配逻辑
- 原逻辑: 按实际持仓数量等权(选出2只时权重50%)
- 新逻辑: 按select_num固定等权(选出2只时权重33.3%+现金33.3%)
- 缺失仓位用现金替代,收益为0
- 交易成本按固定仓位比例计算
- 目的: 保持稳定风险敞口,避免仓位不足时波动放大
2026-05-16 00:18:19 +08:00
4e3aac5e0e feat: Flask统一数据服务迁移(分层架构)
架构设计:
- 对外统一接口 fetch():自动识别资产类型并路由
- 对内分层实现:各资产类型独立方法,职责单一

新增文件:
- datasource/universal_fetcher.py: 统一数据获取器
  - _fetch_china_index: A股指数(Tushare)
  - _fetch_china_etf: A股ETF(含净值)
  - _fetch_us_index: 美股指数(YFinance+SSH)
  - _fetch_hk_index: 港股指数(YFinance+SSH)
  - _fetch_futures: 期货(Tushare/YFinance)
  - fetch_etf_with_nav: ETF价格+净值(计算溢价率)

- datasource/asset_type_detector.py: 资产类型检测器
  - AssetType枚举:9种资产类型
  - detect(): 自动识别资产类型
  - group_by_type(): 批量分组

- datasource/flask_server.py: Flask API服务
  - LRU + TTL 双缓存机制
  - 8个API端点:ohlcv、etf/nav、batch、cache等

更新:
- datasource/__init__.py: 导出新模块

验证:
- 模块导入成功
- 资产类型检测正确
- A股数据获取正常(沪深300: 5条)
2026-05-12 21:33:19 +08:00
ba266ca3fe feat(execution): 实现完整BacktestExecutor回测执行器
- 日收益率计算(支持单/多标的策略)
- 交易成本扣除(支持换手率比例扣除)
- 净值计算(起点归一化)
- 基准对比
- 支持中英文列名(signal/信号)
- 相关系数达到1.0000,与现有实现完全一致
2026-05-11 23:24:25 +08:00
774758c3b0 feat(data): 实现数据获取层抽象接口
- OHLCVData: 标准化K线数据结构
- DataSource: 数据源抽象接口(fetch/fetch_batch)
- DataCache: 缓存抽象接口(get/set/is_fresh)
- LocalFileCache: 本地文件缓存实现
- HybridDataSourceAdapter/TushareDataSource/YFinanceDataSource: 定制数据源适配器
2026-05-11 23:24:11 +08:00
fc59836ec3 test: 更新测试以验证框架重构正确性
- 测试文件改用strategies.shared的具体实现
- 新增framework_comparison_test.py对比新旧实现结果
- 因子计算相关系数达到1.0000,差异为0.000000
- 79个单元测试全部通过
2026-05-11 23:10:02 +08:00
30ea2970bd refactor(framework): 框架只保留抽象接口,具体实现移至strategies/shared
- FactorBase/FactorRegistry/FactorCombiner: 因子抽象接口
- SignalGenerator: 信号生成抽象接口
- RiskControl/Position/CallbackHook: 风控抽象接口
- StrategyBase: 策略抽象基类
- Executor/Portfolio: 执行器抽象接口
- ConfigLoader: 配置加载器
- 删除framework/factors/momentum.py(具体实现)
2026-05-11 23:09:01 +08:00
95c0d79172 feat(framework): 完成框架入口与集成测试
核心组件:
- ConfigLoader: 配置加载器(YAML支持)
- StrategyConfig: 策略配置数据类
- framework/__init__.py: 框架统一入口

导出接口:
- FactorBase, FactorRegistry, FactorCombiner
- SignalGenerator, TopNSelector, TrendFollower, ReversalTrader
- StrategyBase, RotationStrategy
- RiskControl, StopLossControl, PositionLimitControl
- Executor, BacktestExecutor, DryRunExecutor
- ConfigLoader

集成测试:
- 轮动策略完整流程验证
- 趋势策略完整流程验证
- 回调钩子完整流程验证

总计:62个测试全部通过,框架核心实现完成
2026-05-11 22:19:26 +08:00
babf224203 feat(execution): 实现执行层(回测 + Dry-run)
核心组件:
- Executor: 执行器抽象基类
- BacktestExecutor: 回测执行器
  - 处理信号、计算净值、记录交易
  - 支持交易成本设置
- DryRunExecutor: 模拟盘执行器
  - 模拟下单、模拟成交、模拟持仓更新
  - 不影响真实资金
- Portfolio: 持仓组合数据类

特点:
- 统一接口(execute方法)
- 支持两种模式切换(回测/Dry-run)
- 实盘执行器预留扩展点

测试覆盖:7个测试全部通过
2026-05-11 22:19:07 +08:00
7468130450 feat(strategy): 实现策略层与配置加载
核心组件:
- StrategyBase: 策略抽象基类(含回调钩子)
  - 类属性(可被配置覆盖)
  - init_factors(): 初始化因子组合
  - init_signal_generator(): 初始化信号生成器
  - run(): 运行策略
- RotationStrategy: 轮动策略示例实现
  - 动量因子 + TopN选股
  - before_entry回调(溢价过滤)
  - dynamic_stoploss回调(持仓时间动态止损)
- ConfigLoader: 配置加载器(YAML支持)
- StrategyConfig: 策略配置数据类

特点:
- 配置覆盖类属性
- 回调自动注册
- 策略工厂模式

测试覆盖:8个测试全部通过
2026-05-11 22:18:55 +08:00
512b73ac04 feat(risk): 实现风控层与回调钩子机制(融合Freqtrade设计)
核心组件:
- RiskControl: 风控抽象基类
- StopLossControl: 止损控制(固定止损/跟踪止损)
- PositionLimitControl: 仓位限制控制
- PremiumControl: 溢价控制(filter/penalize模式)

回调钩子机制:
- CallbackHook: 回调管理器(注册/触发)
- 5个核心回调:before_entry, after_entry, before_exit, after_exit, dynamic_stoploss, custom_exit

便捷回调函数:
- premium_filter_callback: 溢价过滤回调
- crash_filter_callback: 崩盘检测回调
- holding_time_stoploss_callback: 持仓时间动态止损

测试覆盖:13个测试全部通过
2026-05-11 22:18:41 +08:00
f5e6202eee feat(signals): 实现信号生成层抽象
核心组件:
- SignalGenerator: 信号生成器抽象基类
- TopNSelector: Top N选股器(轮动策略)
  - 支持分组选股(先类内竞争,再跨类排序)
  - 支持最小得分阈值过滤
- TrendFollower: 趋势跟随器(趋势策略)
  - 入场阈值/出场阈值控制
- ReversalTrader: 反转交易器(反转策略)
  - 超买超卖信号生成

特点:
- T+1执行机制(信号shift向后移位)
- 向量化计算,避免前视偏差

测试覆盖:10个测试全部通过
2026-05-11 22:18:20 +08:00
796a695eef feat(factors): 实现因子层抽象
核心组件:
- FactorBase: 因子抽象基类(compute方法 + 数据验证)
- FactorRegistry: 因子注册器(注册/获取/按类别筛选)
- FactorCombiner: 因子组合器(加权组合4种方法)

已实现因子:
- MomentumFactor: 加权动量因子(含崩盘过滤)
- TrendFactor: 趋势因子(MA交叉/MACD)
- ReversalFactor: 反转因子(RSI/KDJ)
- VolatilityFactor: 波动率因子(ATR/标准差)

测试覆盖:18个测试全部通过
2026-05-11 22:17:53 +08:00