e56bd39400
feat: 创建数据源模块 datasource/
...
核心功能:
- ssh_tunnel.py: SSH隧道管理器(连接香港ECS)
- tushare_source.py: A股数据获取(指数、ETF、期货)
- yfinance_source.py: 境外数据获取(港股、美股)
- hybrid_source.py: 混合数据源(整合所有)
使用方式:
from datasource import HybridDataSource
source = HybridDataSource.from_yaml('config/strategies/rotation.yaml')
result = source.fetch_all()
更新 RotationStrategy 使用新数据源模块
2026-05-12 00:03:25 +08:00
e6b2c8cfb7
fix: 适配归档数据源接口,添加dotenv加载
...
- 使用 fetch_all() 替代 fetch_batch()
- 添加 from dotenv import load_dotenv 加载环境变量
- 返回完整数据结构(index_data, etf_data, nav_data, benchmark)
回测验证成功:
- 累计收益: 164.47%
- 最终净值: 2.6447
- 信号日期: 1780 天
2026-05-11 23:56:05 +08:00
893a75a27f
refactor: 将回测逻辑整合到策略类,简化执行入口
...
重构 RotationStrategy:
- 添加 from_yaml() 从配置创建实例
- 添加 get_data() 获取数据
- 添加 compute_factors() 计算因子
- 添加 generate_signals() 生成信号
- 添加 run_backtest() 完整回测流程
简化 run_rotation.py:
- 从 264 行简化为 9 行
- 只做策略调用入口
执行方式:
python run_rotation.py --config config/strategies/rotation.yaml
python run_rotation.py --save-path results/my_rotation
代码方式:
strategy = RotationStrategy.from_yaml('config/strategies/rotation.yaml')
result = strategy.run_backtest()
2026-05-11 23:50:40 +08:00
6231401b71
docs: 更新README添加回测执行方式
2026-05-11 23:46:12 +08:00
f70aa1d3d1
feat: 创建新框架执行入口 run_rotation.py
...
使用新框架的因子、信号、执行器:
- FactorRegistry + MomentumFactor(因子层)
- TopNSelector(信号层,支持分散化选股)
- BacktestExecutor(执行层,完整回测)
暂时复用归档的HybridDataSource获取数据
执行方式:
python run_rotation.py
python run_rotation.py --config config/strategies/rotation.yaml
2026-05-11 23:39:51 +08:00
44f52cc0be
docs: 更新archive README记录screener归档
2026-05-11 23:36:56 +08:00
9e1ba2db03
refactor: 移除screener目录到archive
...
- strategies/screener/ → archive/legacy_screener/
- base.py (Screener抽象基类) 功能已被 framework/signals/SignalGenerator 覆盖
- cci.py (CCI策略) 依赖已归档的 core.factors.technical 和 core.common
保留新框架结构,使用 SignalGenerator 替代 Screener 抽象
2026-05-11 23:36:29 +08:00
1fca536c95
refactor: 归档旧代码,保留新框架结构
...
归档内容:
- core/ (数据源、因子计算、通用工具) → archive/legacy_core/
- strategies/rotation/engine.py, portfolio.py, report.py → archive/legacy_core/
- scripts/ (run_rotation, daily_scheduler) → archive/legacy_scripts/
- examples/ → archive/legacy_examples/
- tests/ (实验、对比测试) → archive/legacy_tests/
- 单独文件 (fetch_*.py, 动量.py, 全球市场.py等) → archive/single_files/
保留新结构:
- framework/ (抽象接口)
- strategies/shared/ (定制组件)
- strategies/rotation/strategy.py (新策略)
- 外层配置: .env, .dockerignore, build-and-push.sh, hk_ecs.pem, README.md, requirements.txt
- Docker相关: Dockerfile, Dockerfile_base, docker-compose.yml
更新README反映新框架架构
2026-05-11 23:34:23 +08:00
f663d51b87
test: 完整对比测试验证新框架功能
...
- 分散化选股测试:验证group_mapping分组选股逻辑
- 完整回测测试:验证BacktestExecutor回测结果
- 因子计算相关系数1.0000,差异0.000000
- 回测结果:策略收益1804.16%,基准收益46.29%
- 2/2测试全部通过
2026-05-11 23:24:36 +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
c5a41b71ae
feat(signals): 完善TopNSelector分散化选股和调仓控制
...
- 支持group_mapping分组映射(替代group_info列)
- 每大类选Top1,然后跨类排序选Top3
- 添加调仓周期控制(rebalance_days)
- 添加调仓阈值检查(rebalance_threshold)
- 支持最小得分过滤(min_score过滤负分)
2026-05-11 23:23:37 +08:00
c95ec9bfdb
fix(report): 修复持仓收益百分号格式转换
...
- 使用apply+lambda统一处理百分号格式
- 添加列存在性检查,避免KeyError
- 正确计算盈亏次数
2026-05-11 23:10:31 +08:00
fc59836ec3
test: 更新测试以验证框架重构正确性
...
- 测试文件改用strategies.shared的具体实现
- 新增framework_comparison_test.py对比新旧实现结果
- 因子计算相关系数达到1.0000,差异为0.000000
- 79个单元测试全部通过
2026-05-11 23:10:02 +08:00
de31271ab3
feat(rotation): 实现轮动策略(使用框架抽象+定制组件)
...
- RotationStrategy: 继承StrategyBase,使用MomentumFactor+TopNSelector
- 实现before_entry溢价过滤、dynamic_stoploss动态止损、custom_exit自定义出场
- 策略配置从类属性读取,支持config覆盖
2026-05-11 23:09:49 +08:00
69081297c5
feat(strategies): 实现定制组件(因子、信号生成器、风控)
...
- strategies/shared/factors/momentum.py: MomentumFactor/TrendFactor/ReversalFactor/VolatilityFactor
- strategies/shared/signals/selectors.py: TopNSelector/TrendFollower/ReversalTrader
- strategies/shared/risk/controls.py: StopLossControl/PositionLimitControl/PremiumControl
- strategies/shared/__init__.py: 统一入口导出所有定制组件
2026-05-11 23:09:35 +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
9a8a0d7c72
docs: 添加框架功能完善性分析与通用能力边界设计文档
...
- 框架功能完善性分析:评估现有轮动策略与新框架对比
- 通用能力与定制开发边界设计:明确框架只放抽象接口
- 总体完善度约45%,数据层和执行层缺失
2026-05-11 23:08:48 +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
c54ba442ad
docs: 添加策略框架调研与设计方案
...
包含4份核心文档:
- 轮动策略系统架构分析报告
- 量化策略通用框架抽象设计
- Freqtrade架构调研与对比分析
- ETF轮动策略通用化重构方案
调研结论:三种策略可抽象通用框架
设计决策:因子注册器风格 + 5个核心回调钩子 + TopN/Trend/Reversal信号生成器
2026-05-11 22:17:41 +08:00
baeeb13c34
fix(engine): 修复净值起点归一化问题,确保净值从1.0开始
...
问题分析:
1. 策略净值起点原为1.0051,不是标准的1.0
2. 根本原因:日收益率在factor_data中已计算好,第一行包含前一天价格变化
3. cumprod()从第一行开始,导致起点不是1.0
4. 累计收益计算错误:
- 原计算方式:净值终点-1 = 1822.83%
- 正确收益:净值终点/起点 = 1813.07%
- 差异约10%
修复内容:
- strategies/rotation/engine.py
- 策略净值归一化:净值 = cumprod() / cumprod().iloc[0]
- 基准净值归一化:同样处理确保起点=1.0
- 消除第一行日收益率包含的前一天收益影响
修复效果:
- 策略净值起点:从1.0051 → 1.0000 ✅
- 基准净值起点:从1.0072 → 1.0000 ✅
- 策略累计收益:从1822.83% → 1813.07% ✅
- 基准累计收益:从48.21% → 47.15% ✅
影响:
- HTML报告中净值曲线起点标准化为1.0
- KPI指标中的累计收益计算正确
- 与其他回测系统的净值展示方式一致
2026-05-08 23:07:08 +08:00
9ecc796d36
fix(engine): 修复净值计算中NaN值导致的缺失问题
...
问题分析:
1. HSTECH.HK数据从2020-08-26才开始,早期数据缺失
2. 原净值计算使用iloc[0]作为基准,若首日价格是NaN则整列净值变成NaN
3. 原日收益率计算中,某品种日收益率NaN会导致mean()返回NaN
4. 导致策略净值62个缺失值(3.53%)
修复内容:
1. strategies/rotation/engine.py - 各品种净值计算
- 使用第一个有效价格作为基准(而非iloc[0])
- 若品种无有效数据则净值列全部为NaN
2. strategies/rotation/engine.py - 策略日收益率计算
- select_num=1时:若日收益率是NaN则返回0.0
- select_num>1时:忽略NaN值计算mean()
- 若所有品种日收益率都缺失则返回0.0
修复效果:
- 策略净值缺失:从62个(3.53%)降至0个(0%)
- HSTECH.HK净值缺失:从100%降至21.49%(377/1754)
- 其他品种净值:全部无缺失
说明:
- HSTECH.HK净值377个缺失是正常的(数据从2020-08-26才开始)
- 早期缺失日期(2019年)非HSTECH持仓期,缺失由其他原因导致
2026-05-08 22:52:36 +08:00
8f1d72d1d8
fix(report): HTML报告文件名固定为strategy_report.html
...
修改内容:
- visualization/report_generator/generate_report.py
- 移除日期时间后缀,固定输出文件名为 strategy_report.html
- 方便用户快速访问和更新报告
效果:
- 每次生成报告都覆盖同一文件
- 文件路径固定: reports/strategy_report.html
- 无需查找最新的时间戳文件
2026-05-08 22:38:16 +08:00
987cb38322
feat(report): 净值曲线数据统一来源,直接读取轮动策略输出
...
修改内容:
1. strategies/rotation/report.py
- 新增保存策略净值曲线到CSV文件的功能
- 保存字段:日期、策略净值、基准净值、各品种净值
- 输出路径: results/report_nav.csv
- 包含1754条净值记录
2. visualization/report_generator/generate_report.py
- 加载净值曲线CSV文件(优先)
- 直接使用轮动策略输出的净值数据,不再重新计算
- 保留备用计算逻辑(CSV不存在时)
- 新增 benchmark_values 用于显示基准净值
3. visualization/report_generator/template.html
- 净值曲线图表新增基准净值曲线(红色虚线)
- 添加图例显示(策略净值、基准净值)
- Tooltip 显示双线数据对比
效果:
- 净值曲线数据统一从轮动策略回测结果获取
- 避免重复计算导致的曲线不一致
- HTML报告显示策略vs基准对比曲线
- 数据来源清晰可追溯(1754条完整净值记录)
2026-05-08 22:33:41 +08:00
861e590441
feat(report): 策略KPI数据统一来源,避免重复计算
...
修改内容:
1. strategies/rotation/report.py
- 新增保存策略KPI到JSON文件的功能
- 保存指标:累计收益、年化收益、夏普比率、最大回撤、Calmar比率、日胜率
- 同时保存基准指标和回测区间信息
- 输出路径: results/report_metrics.json
2. visualization/report_generator/generate_report.py
- 加载策略KPI JSON文件(优先)
- 直接使用轮动策略输出的指标,不再重复计算
- 保留备用计算逻辑(JSON不存在时)
- 确保HTML报告与轮动策略结果完全一致
效果:
- KPI指标统一从轮动策略回测结果获取
- 避免重复计算导致的数据不一致
- 数据来源清晰可追溯
- HTML报告指标与终端输出完全一致
2026-05-08 22:25:22 +08:00
5c87bea4fc
fix(visualization): 修复净值计算逻辑,与轮动策略结果对齐
...
问题:
- HTML报告错误地将所有品种持仓收益简单累加
- 没有考虑仓位占比权重
- 导致净值曲线和KPI指标与策略实际结果不一致
修复:
- 使用出场净值和仓位占比计算每日组合净值
- 净值 = sum(出场净值 * 仓位占比)
- 总收益 = (最终净值 - 初始净值) / 初始净值 * 100
- 月度收益使用净值变化率计算
- 最大回撤基于真实净值曲线计算
- 胜率基于每日净值涨跌计算
- 修复pandas FutureWarning警告
现在HTML报告的净值曲线、收益指标与轮动策略完全一致
2026-05-08 22:17:47 +08:00
4d784f961a
feat(visualization): 添加策略报告生成器
...
- 创建 visualization/report_generator 模块
- 支持生成精美的 HTML 策略报告
- 包含8个 KPI 指标卡片(收益、胜率、夏普比等)
- 集成 ECharts 交互式图表(净值曲线、月度收益、盈亏分布)
- 支持按日期和品种筛选调仓记录
- 使用 Jinja2 模板引擎 + Bootstrap 5 样式
- 支持打印为 PDF
- 提供 CLI 和 Python API 两种使用方式
2026-05-08 22:06:40 +08:00
519a4144e6
chore: 移除 Streamlit 可视化应用
...
- 删除 streamlit_app.py
- 删除 dashboard_app.py
- 删除 requirements_streamlit.txt
- 删除 start_streamlit.sh
2026-05-08 21:20:48 +08:00
d47a29f09e
feat(viz): 添加 Streamlit 可视化应用
...
- 创建 streamlit_app.py: 交互式回测结果展示
- 支持4个标签页:策略概览、收益分析、调仓记录、品种详情
- 集成 Plotly 图表:收益对比、胜率散点图、月度收益、收益分布
- 支持数据筛选和导出功能
- 添加启动脚本和依赖文件
2026-05-08 20:56:38 +08:00
a539a7d096
fix(api): 修复缓存状态判断逻辑
...
- fetch_data_with_ttl 返回 (data, is_cached) 元组
- 修复 cached 字段始终为 false 的问题
- 批量接口适配新的返回格式
2026-05-07 23:57:19 +08:00
7cf20268cf
feat(api): 为美股/港股数据添加 stock info 信息
...
- 在 universal_fetcher._fetch_yfinance 中获取公司信息
- 包含 sector、industry、market_cap 字段
- 将信息存储在 DataFrame.attrs 中
- Flask API 自动提取并返回 info 字段
2026-05-07 23:45:00 +08:00
270f4fe7f4
fix(api): 修复 JSON 序列化错误
...
- 支持多种日期列名(date, Date, index, trade_date, datetime)
- 添加对 Timestamp 对象的递归转换
- 修复 yfinance 返回数据中的 Timestamp 序列化问题
2026-05-07 23:36:10 +08:00
be12686f13
config(cache): 将默认缓存TTL从5分钟调整为2小时
...
- CACHE_TTL_SECONDS 默认值从 300s (5分钟) 改为 7200s (2小时)
- 适合日线数据场景,减少重复请求
2026-05-07 23:30:47 +08:00
b4a45e479f
feat(api): 使用 functools.lru_cache 实现数据缓存
...
- 使用 Python 标准库 functools.lru_cache 实现 LRU 缓存
- 添加 TTL 机制实现缓存过期(默认5分钟)
- 双缓存机制:LRU + TTL 结合
- 支持环境变量配置:CACHE_MAXSIZE(默认128)、CACHE_TTL_SECONDS(默认300)
- 新增缓存管理端点:
- POST /api/v1/cache/clear - 清理缓存
- GET /api/v1/cache/stats - 查看缓存统计(hits/misses/maxsize/currsize)
- /api/v1/ohlcv 支持 nocache 参数跳过缓存
- 批量接口自动使用缓存
- 响应中包含 cached 字段标识缓存状态
- 更新 API 版本到 1.1.0
2026-05-07 23:23:06 +08:00
d703974c5b
feat(api): 为 Flask 服务添加内存缓存机制
...
- 添加内存缓存,默认TTL 5分钟(可通过 CACHE_TTL_SECONDS 环境变量配置)
- 新增缓存相关端点:
- POST /api/v1/cache/clear - 清理缓存
- GET /api/v1/cache/stats - 缓存统计信息
- /api/v1/ohlcv 支持 nocache 参数跳过缓存
- 响应中返回 cached 字段标识是否命中缓存
- 更新 API 文档和版本号到 1.1.0
- 删除不需要的 build-flask-and-push.sh 和 docker-compose.flask.yml
2026-05-07 23:12:32 +08:00
ae4cf5d3c8
build: 添加 Flask 服务构建脚本
...
- 新增 build-flask-and-push.sh:一键构建和推送 Flask API 镜像
- 支持自定义镜像名称和标签
- 自动检查基础镜像、构建、打标签、推送
- 提供运行示例和测试命令
2026-05-07 22:15:17 +08:00
18a1b2b01f
feat(docker): 添加 Flask API 服务容器化配置
...
- 更新 requirements.txt 添加 flask 和 flask-cors 依赖
- 新增 Dockerfile.flask:Flask API 服务专用镜像
- 新增 docker-compose.flask.yml:支持 docker-compose 部署
- 配置健康检查、资源限制、环境变量映射
- 支持 SSH 隧道配置通过环境变量注入
2026-05-07 22:15:10 +08:00
0e531a1876
docs: 添加完整项目文档
...
- universal_fetcher_README.md:统一数据获取接口完整文档
- universal_fetcher_QUICKSTART.md:5分钟快速上手指南
- universal_fetcher_ARCHITECTURE.md:架构设计说明
- universal_fetcher_TEST_REPORT.md:测试报告与修复记录
- flask_api_README.md:Flask API 完整文档
- FLASK_SERVICE_SUMMARY.md:项目实现总结
总计 2000+ 行文档,涵盖 API 说明、使用示例、架构设计
2026-05-07 21:20:03 +08:00
cc2f7cb6c8
docs(examples): 添加 Flask API 客户端示例
...
- 新增 flask_api_client.py:DataFetcherClient 类封装
- 提供健康检查、资产类型检测、单只/批量数据获取方法
- 包含命令行调用示例和 DataFrame 转换示例
- 新增 universal_fetcher_examples.py:7个完整使用示例
- 涵盖基础用法、资产检测、批量获取、跨市场分析、技术指标
2026-05-07 21:19:52 +08:00
fbaa3f9d73
test: 添加 UniversalDataFetcher 和 Flask API 测试
...
- 新增 test_universal_fetcher.py:资产类型检测、单只/批量获取、边界测试
- 新增 test_ssh_tunnel.py:SSH 隧道连接、港美股数据获取、混合市场测试
- 新增 test_flask_api.py:API 端点测试、健康检查、批量获取测试
- 所有测试已通过验证(A股100%,SSH隧道港美股正常)
2026-05-07 21:19:37 +08:00
8b2c2be6f3
feat(api): 实现 Flask RESTful API 数据服务
...
- 新增 Flask 服务提供统一 HTTP 接口
- 支持 6 个 API 端点:health、asset-type、ohlcv、batch、supported-codes
- 集成 SSH 隧道自动管理(环境变量配置)
- 提供一键启动脚本 start_flask_server.sh
- 支持 CORS 跨域访问
- 完善的错误处理和响应格式化
2026-05-07 21:19:29 +08:00
e319426c10
feat(datasource): 实现统一数据获取接口 UniversalDataFetcher
...
- 新增 AssetTypeDetector 自动识别8种资产类型
- 支持 A股指数/ETF/股票、港股、美股、期货、加密货币
- 自动路由到 Tushare/YFinance/CCXT 数据源
- 集成 SSH 隧道支持港美股数据获取
- 提供便捷函数 fetch_kline 和 detect_asset_type
- 修复资产类型检测边界情况(.CSI后缀、000001股票等)
2026-05-07 21:19:19 +08:00
9776ae7de0
test(experiments): add France CAC40 and SEA ETF experiments
...
- Add France CAC40 market test (004)
- Add SEA ETF limited test (005)
- Add France in EU category test (006)
- Update experiment README with new results
- Modify emerging market test description
2026-05-06 22:23:12 +08:00
17e806045f
experiment(rotation): 添加新兴市场大类(印度)影响验证
...
实验设计:
- A组:当前7大类配置(无新兴市场)
- B组:添加印度作为第8大类(EM = Emerging Market)
- 标的:^NSEI → 164824.SZ(工银瑞信印度市场LOF)
实验结果:
├─ 大类数量: 7 → 8 (+1) ✓ 跨类分散提升
├─ 累计收益: 1467.35% → 1261.83% (-205.52%)
├─ CAGR: 48.10% → 45.16% (-2.94%)
├─ Sharpe: 2.21 → 2.09 (-0.11)
├─ 日胜率: 56.45% → 57.25% (+0.80%) ✓
└─ 调仓次数: 459 → 451 (-8)
核心发现:
1. 大类数量增加确实提升跨类分散
2. 但收益反而下降205%(与预期相反)
3. 印度LOF流动性不足(日均~3000万)
4. 印度动量信号不如主流市场强
5. Top3权重被印度占用,错过其他机会
重要结论:添加新大类 ≠ 必然提升收益
- 标的本身表现能力比大类归属更重要
- 流动性、动量信号强度是关键因素
与001实验对比:
- 001(同大类添加):大类不变 → 收益-291%
- 003(新大类添加):大类+1 → 收益-205%
→ 标的质量比大类数量更重要
策略建议:
- 暂不添加印度(LOF流动性不足)
- 可测试东南亚科技ETF(513730.SH)
新增文件:
- tests/experiments/ab_test_emerging_market.py
- docs/experiments/003_emerging_market_india.md
2026-05-06 20:55:54 +08:00
6b59855c28
experiment(rotation): 同大类扩充与纳指vs标普替换对比实验
...
技术修复:
- SOCKS5代理IPv6问题:socks5:// → socks5h:// (hybrid_source.py, yfinance_source.py)
目录整理:
- scripts/ → 仅保留策略入口(daily_scheduler, run_rotation, run_cci_screener)
- 实验脚本移至 tests/experiments/
- 工具脚本移至 tests/utils/
- 实验记录新增 docs/experiments/
- results/ 添加到 gitignore
实验结果:
实验001 - 同大类扩充(添加标普500):
├─ 累计收益: 1467.35% → 1176.26% (-291%)
├─ CAGR: 48.10% → 43.82% (-4.28%)
├─ 调仓次数: 459 → 501 (+42次)
└─ 结论: 添加同大类标的不增加跨类分散,反而侵蚀收益
实验002 - 纳指vs标普替换对比:
├─ 累计收益: 1467.35% → 1118.77% (-348%)
├─ CAGR: 48.10% → 42.87% (-5.22%)
├─ Sharpe: 2.21 → 2.08 (-0.13)
├─ MaxDD: -17.33% → -15.14% (+2.18%)
└─ 结论: 纳指100优于标普500,成长风格更适合动量策略
策略建议:
- 保持纳指100作为美股大类代表
- 不添加同大类新标的(避免类内切换成本)
- 新增标的应优先考虑新大类(增加跨类分散)
2026-05-06 20:43:38 +08:00