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
a4e8a6050e
docs: 跨市场动量策略有效性度量与资产组合优化文献综述
...
核心内容:
- 相关性结构:资产相关性低(ρ≈0.3),但动量收益相关性较高(ρ≈0.5)
Moskowitz发现动量因子跨资产共同驱动
- 跨市场有效性度量框架(三层体系):
Layer1定性:地理差异+资产类别+周期敏感度(0-9分)
Layer2定量:分散化有效性指数DEI=(1-ρ)/(1+ρ)
Layer3组合:综合评分Σw_i w_j Q_ij D_ij
- 选择偏差风险:池选择偏差=基于后视信息选池
本策略恒生科技/铜存在中等偏差风险,建议随机池对照实验
- 高波动池机制:Conrad-Kaul风险补偿理论
高波动→高动量收益(部分补偿+部分异象)
- 业界最佳实践:
Bridgewater All Weather经济四季框架(增长/通胀四象限)
AQR Risk Parity波动率倒数加权(风险平衡而非市值权重)
- 分散化收益公式:DR=Σwσ/σ_p,本策略≈14%
- 改进建议:
增加债券标的(Risk Parity权重应高)
减少A股同类冗余(创业板vs红利低波DEI=0.18)
显式计算风险贡献而非等权
参考文献:
- Conrad & Kaul(1998)风险补偿理论
- Moskowitz et al.(2012)跨资产动量相关性
- AQR Risk Parity白皮书
- Bridgewater All Weather故事
- CFA资产配置原则
附录:5个核心公式+改进建议清单
2026-04-30 21:59:40 +08:00
336bceef92
docs: 基于动量因子的跨市场ETF轮动策略系统性文献综述
...
文献综述内容:
- 学术定位:资产定价、资产配置、量化投资、行为金融学、组合管理五大交叉领域
- 理论基础:Jegadeesh-Titman(1993)动量效应发现 + Barberis等(1998)行为金融解释
- 经典文献:截面动量、时间序列动量(Moskowitz 2012)、跨资产动量普遍性(Asness 2013)
- 实证证据:动量效应在股票/债券/商品/外汇等所有资产类别中显著
- 分散化依据:Markowitz(1952) MPT理论,跨大类资产低相关性降低组合波动
- 崩盘风险:Barroso-Santa-Clara(2015)动量崩盘现象与风险管理方法
- 待解决问题:动量起源之谜、因子标准化、动态窗口机制、因子衰减
- 中国A股:短期动量(1-3月)有效、行业轮动频繁、残差动量2024年表现优越
参考文献:
- 10篇经典学术论文(Jegadeesh-Titman, Moskowitz, Asness, Barberis等)
- 业界策略报告(AQR, QuantPedia, Robeco)
- 券商金工研报(华泰、东方、招商)
附录:动量因子公式对比 + 本策略V2配置摘要
2026-04-30 14:27:23 +08:00
48ff15d92a
docs: 新增轮动策略核心逻辑V2文档
...
V2相对于V1的核心升级:
- 候选池: 22只(以A股行业为主) → 11只(全球7大类精选)
- 因子类型: slope_r2(等权回归) → weighted_momentum(加权回归,近期权重2.0)
- 选股模式: 纯Top5 → 跨大类分散化(每大类Top1→全局Top3,等权33%)
- 崩盘过滤: 无 → 有(连续3天跌>5%得分清零)
- 商品信号源: 指数价格 → 期货价格(AU.SHF/CL.NYM/CU.SHF)
- 加密货币: 保留 → 移除(全部使用A股场内ETF交易)
V2实证数据(2019-02~2026-04):
累计收益1473%, CAGR 46.42%, Sharpe 2.22, MaxDD -17.33%, Calmar 2.68
diversified=true全面优于false(2022年差异+17.63%)
文档包含完整配置清单、因子计算公式、分散化选股机制、
调仓控制逻辑、溢价率控制、跨市场数据对齐方案、V1 vs V2对比表
2026-04-30 13:49:42 +08:00
5cf5bfc7d6
chore: 清理根目录已迁移到docs/的旧md文件
2026-04-30 13:41:13 +08:00
d0a9d66a11
feat(config): 添加CU.SHF有色金属期货信号源,移除冗余上证红利
...
讨论背景:
- 159980.SZ(有色ETF)是商品型基金,跟踪上期所有色金属期货价格指数
- 应使用期货价格(CU.SHF沪铜)作为信号源,与黄金(AU.SHF)/原油(CL.NYM)保持一致
- 上证红利(000015.SH)与中证红利低波(H30269.CSI)高度相关,同属A股大类
在diversified模式下只能选1个,保留两个无实际意义
配置变更:
- rotation.yaml: 新增CU.SHF→159980.SZ映射(market=COMMODITY)
- rotation.yaml: 移除000015.SH上证红利(与红利低波冗余)
- hybrid_source.py: FUTURES_CODE_MAP新增CU.SHF铜期货
- ab_test_iterations.py: 同步更新有色market为COMMODITY
实证结果 - CU.SHF加入前后对比(11只池,2019-2026):
无CU(11只): CAGR=47.37%, Sharpe=2.25, MaxDD=-17.86%, Calmar=2.65
含CU(12只): CAGR=46.16%, Sharpe=2.21, MaxDD=-17.86%, Calmar=2.58
影响: CAGR-1.2%, 商品大类内部竞争加剧(黄金/原油/有色三选一)
2020/2022铜价暴涨时有色贡献额外收益,整体影响很小
实证结果 - 移除上证红利后(11只,2019-2026):
含上证红利: CAGR=46.16%, Sharpe=2.21, MaxDD=-17.86%, Calmar=2.58
移除后: CAGR=46.42%, Sharpe=2.22, MaxDD=-17.33%, Calmar=2.68
所有指标均改善,消除冗余标的提升选择效率
实证结果 - diversified=true vs false(11只,select_num=3):
true(跨类分散): CAGR=46.45%, Sharpe=2.22, MaxDD=-17.33%, Calmar=2.68
false(纯Top3): CAGR=44.19%, Sharpe=2.13, MaxDD=-18.12%, Calmar=2.44
关键差异在2022年(+17.63%): false模式选3只商品同时回调
结论: diversified=true全面优于false,保持当前配置
最终候选池(11只,7大类):
A股: 创业板(399006.SZ), 红利低波(H30269.CSI)
美股: 纳指100(NDX) | 日本: 日经225(N225) | 欧洲: 德国DAX(GDAXI)
港股: 恒生指数(HSI), 恒生科技(HSTECH.HK)
商品: 黄金(AU.SHF), 原油(CL.NYM), 有色金属(CU.SHF)
固收: 30年国债(931862.CSI)
2026-04-30 13:37:46 +08:00
4df3ac4e31
chore(docs): reorganize documentation files into docs/ folder
...
Moved markdown documentation from root to docs/ directory to improve project structure.
2026-04-30 01:06:25 +08:00
c1fbd2c7db
feat(strategy): finalize global rotation system with advanced risk controls
...
Summary of updates:
1. Core Logic (engine.py): Added 'score > 0' filtering to support automatic cash positions during market downturns.
2. Experimental Analysis: Added scripts/analyze_negative_scores.py, scripts/test_select_num.py, and scripts/ab_test_iterations.py.
3. Documentation: Created docs/strategy_evolution_report.md detailing the evolution from benchmark to the final 47% CAGR version.
4. Configuration: Finalized rotation.yaml with 11 core assets and optimal risk parameters.
2026-04-30 00:56:20 +08:00
e946dbe804
docs(experiment): add experimental backtest script and pool analysis
...
实验与分析文档补充:
1. 脚本: scripts/full_pool_top3_backtest.py
- 用于快速测试不同标的池组合的脚本。
- 支持跨大类 Top 1 逻辑的独立验证。
2. 文档: data_logic_analysis.md
- 记录了从 43 只全市场池精简到 11 只核心池的逻辑推演。
- 详细对比了“相关性管理”对回撤的影响数据。
2026-04-30 00:15:21 +08:00
63a100cef0
feat(config): finalize 11-asset global pool with cross-market diversification
...
标的池优化与分散化配置更新:
1. 最终标的池确立 (11 只):
- 精选 9 只原始核心标的 + 恒生科技 + 恒生指数。
- 相比全市场 43 只池子,精简后的池子大幅减少了 A 股细分行业的噪声干扰。
2. 关键参数调整:
- 开启 'diversified: true':强制跨大类(美股、港股、A股、商品、固收)选择 Top 1 标的。
- 启用 'weighted_momentum' 因子与 'auto_day' 动态周期。
- 放宽溢价率阈值至 10%,以适应跨境资产的高溢价常态。
回测影响分析:
- 引入恒生双指后,2022年回撤得到显著对冲(22.6% 正收益)。
- 跨大类分散化逻辑将最大回撤从 43 只池子时的 -33% 压缩至 -14.5%。
- 该配置在保持 20%+ 稳健年化的同时,提供了 1.5 以上的顶级夏普比率。
2026-04-30 00:14:55 +08:00
48cd6dd524
docs(analysis): ETF轮动策略深度分析报告
...
包含:
- 收益归因分析: 高收益来源拆解、持仓分布、事件日历
- 选池偏差实验: 原始4只 vs 扩展9只 vs 反面池对比
- 后视镜偏差量化: 选池偏差仅贡献5-7% CAGR
- A股可交易全球资产完整候选池: 44个方向/5大类
- 关键结论: ETF价格优先于指数、未来预期CAGR区间
2026-04-29 22:51:15 +08:00
eb6a07548c
feat(全球市场): 迁移聚宽策略为Tushare独立回测版本
...
从聚宽平台迁移全球市场ETF轮动策略,复用动量.py核心模块。ETF池: 纳指100/日经225/德国DAX/黄金/有色金属/南方原油/30年国债/红利低波/创业板。回测(2019~2026): CAGR=44.29%, Sharpe=1.50, MaxDD=-16.93%, Calmar=2.62, 盈利年份8/8, 跑赢基准7/8
2026-04-29 22:20:13 +08:00
2829f80427
feat(backtest): 消除前视偏差,实现动态ETF池重建
...
消除回测前视偏差(Look-Ahead Bias):
- 新增 ETFDataCache 本地缓存系统,预下载全量ETF(含已退市)基础信息和日线数据
- 改造 ETFUniverseBuilder 支持纯历史模式,每个时间点只使用当时可获得的数据
- 动量.py 新增 dynamic 模式,回测中每60交易日动态重建ETF候选池
- momentum_experiment.py 同步支持动态重建
- 新增 ETF筛选引擎文档和动态池方案文档
无前视偏差实验结果(6组对比,2015-2026):
A: 全仓1只 CAGR=3.32%, MaxDD=-63.19%, Sharpe=0.26
B: 等权3只 CAGR=3.40%, MaxDD=-49.72%, Sharpe=0.30 ← 最优
C: 反波动率3只 CAGR=1.73%, MaxDD=-38.59%, Sharpe=0.21
D: 等权5只 CAGR=2.77%, MaxDD=-42.39%, Sharpe=0.29
E: 反波动率5只 CAGR=-0.37%, MaxDD=-19.56%, Sharpe=-0.03
F: 动量>0全选等权 CAGR=2.02%, MaxDD=-43.27%, Sharpe=0.24
最优方案: B(等权3只)夏普、Calmar、CAGR三项均最高
2026-04-29 22:15:01 +08:00
e301a08724
注释加密货币(BTC/ETH)并新增回测数据导出脚本
...
变更内容:
- rotation.yaml: 注释掉BTC和ETH加密货币配置,候选池从22只缩减为20只
- 新增 scripts/export_rotation_data.py: 导出回测原始数据到本地文件夹
回测结果 (2020-02-14 ~ 2026-04-28, 20只标的, 无加密货币):
- 累计收益: 171.36% (基准沪深300: 20.16%)
- CAGR(年化): 17.48% (基准: 2.89%)
- 年化夏普比率: 0.90 (基准: 0.26)
- 最大回撤: -30.85% (基准: -45.60%)
- Calmar比率: 0.57
- 日胜率: 52.49%
- 调仓次数: 478次 (年均80次, 平均持仓3.1天)
2026-04-28 20:28:35 +08:00
4a500ca5bf
feat(notify): 支持钉钉多群推送 & 添加轮动策略核心逻辑文档
...
- settings.py: 新增 get_all_dingtalk_configs() 自动扫描所有钉钉群配置
- notify.py: 新增 send_to_all_groups() 多群推送函数
- daily_scheduler.py: 报告和错误通知改用多群推送
- .env: 添加第二个钉钉群配置 (DINGTALK_WEBHOOK_2/SECRET_2)
- 轮动策略核心逻辑.md: 策略核心逻辑总结文档
2026-04-23 22:58:16 +08:00
3cca4d79c4
chore: 忽略知乎文章下载目录 zhihu-articles/
2026-04-09 11:45:40 +08:00
3530e05875
docs: 新增动量时间窗口选择调研报告
...
- 综合 arXiv 学术论文与 A 股实证研究,分析最优动量窗口
- 核心发现:25日窗口偏短,最优区间为60-240日
- 动态窗口选择(DMS)可提升Sharpe 52%,回撤减半
- 提供三阶段优化方案:多窗口等权 → 动态选择 → 经济周期自适应
2026-04-09 11:27:24 +08:00
9096d933a3
refactor(config): 更新创业板指中的红利ETF配置
...
- 将中证红利(000922.CSI)替换为上证红利(000015.SH)
- 更新对应的ETF代码为510880.SH,注释同步调整
- 保持市场标识为"A"不变
2026-03-27 22:46:01 +08:00
e7dca3fec8
fix(core): 修正中国A股指数判断逻辑及更新指数配置
...
- 在中国A股指数判断中增加对中证指数(.CSI)的支持
- 替换创业板指配置中的红利指数代码和对应ETF信息
- 更新中证银行ETF代码为最新的华宝银行ETF编码
2026-03-27 22:37:41 +08:00
70bb69fd98
fix(core): 修复计算与数据对齐等多处逻辑问题
...
- 修正CAGR计算,去除NaN并检查起始值有效性以避免异常结果
- 优化混合数据源的数据对齐逻辑,使用配置结束日期与A股最新数据日期的较早者
- 计算因子时对齐A股交易日历,重新基于对齐价格计算日收益率,改进因子对齐准确度
- 轮动策略中跳过空信号,避免空信号影响持仓和调仓逻辑
- 调整信号处理,过滤空字符串和NaN,保证轮动信号数据有效性
- 多品种轮动持仓中加入空信号判断,避免无效信号导致错误
- 调整调仓明细和品种汇总保存逻辑,增加空文件创建以保证输出路径文件稳定生成
- 完善多处打印信息和注释,增强代码可读性与调试便利性
2026-03-26 22:21:38 +08:00
2faea1517f
chore(deps): 更新HTTP请求相关依赖
...
- 在requests依赖中添加对socks的支持
- 新增pysocks依赖以支持socks代理
- 保持了requests和urllib3的最低版本要求不变
2026-03-26 22:21:15 +08:00
57939ce677
fix(rotation): 修正报告图表操作列的索引错误
...
- 将操作列索引从第8列调整为第11列(索引10)
- 保持不同操作对应的行背景色不变
- 修复因操作列索引错误导致的行着色问题
2026-03-26 21:23:55 +08:00
4b8e1dbec6
fix(build): 修复基础镜像存在性检查及构建逻辑
...
- 使用docker images --format精确匹配镜像名称和标签
- 修正基础镜像检查条件,确保检测index-base:latest
- 添加未找到Dockerfile_base时的脚本退出逻辑
- 优化基础镜像构建流程提示信息
2026-03-26 21:23:21 +08:00
091ee05e58
chore(docker): 优化Dockerfile_base镜像构建配置
...
- 更换阿里云镜像源提升apt-get安装速度
- 新增openssh-client和autossh系统依赖
- 所有apt-get操作后统一清理缓存
- Playwright依赖安装使用阿里云源镜像
- 安装中文字体时允许失败不影响构建
- 保持时区配置为Asia/Shanghai
- 安装Playwright chromium浏览器版本一致
2026-03-26 21:21:59 +08:00
49acca7414
chore(deps): 添加ccxt依赖
...
- 在requirements.txt中增加ccxt库,版本不低于4.0.0
- 保持其它依赖项版本不变
- 支持后续集成加密货币交易相关功能
2026-03-26 19:01:58 +08:00
b7bf8c1eb4
fix(report): 修正溢价率计算逻辑为使用ETF收盘价替代净值
...
- 修改生成性能报告时溢价率计算逻辑,改用信号日期的ETF收盘价
- 溢价率仅在当天净值数据存在时计算,避免使用前一日数据
- 更新打印最新调仓信号函数,支持显示ETF收盘价而非净值
- 修改报告图表部分,显示ETF收盘价和对应溢价率
- 优化时间基准日期计算,使用信号日期或前一交易日作为数据基准
- 保持对跨市场ETF映射的兼容性和显示一致性
2026-03-26 01:27:04 +08:00
5f4470d53e
fix(datasource): 修正数据日期对齐与复权问题
...
- 修改yfinance获取历史数据时end_date加一天,auto_adjust设置为False,以获取不复权价格
- 调整ETF净值数据获取时end_date加一天,解决净值数据滞后问题
- 数据对齐策略改为以A股最新数据日期为基准,调整交易日历范围
- 移除对非A股数据的前向/后向填充,保持原始价格数据不填充
- ETF净值数据重新索引到A股交易日但不做缺失值填充,保持NaN以表示无数据
- 增加打印输出辅助调试数据日期及交易日信息
2026-03-26 01:26:43 +08:00
ec9c808e6c
refactor(momentum): 优化因子计算流程并对齐A股交易日历
...
- 添加辅助函数判断是否为A股指数
- 调整compute_factors函数结构,分别计算每个标的技术指标
- 严格实现T+1规则,确保信号只用T日及以前数据
- 对齐所有数据到A股交易日历,使用前向填充避免未来数据泄漏
- 增加有效代码有效性检查,剔除数据不足或缺失率过高的标的
- 完善函数注释,明确输入输出及核心逻辑说明
- 优化打印信息,清晰展示因子类型、窗口、有效标的及时间范围
2026-03-26 01:26:14 +08:00
e4f87b7212
feat(tests): 添加多个数据获取脚本测试示例
...
- 新增获取3033.HK复权与不复权价格对比脚本,支持代理配置
- 新增使用Tushare获取AU9999黄金现货数据脚本,支持日期范围查询和CSV保存
- 新增从OKX通过CCXT库获取BTC/USDT日线数据脚本,支持HTTP代理和时间范围过滤
- 所有脚本均包含打印数据显示的格式化输出
- 各脚本提供主函数入口,易于独立运行和调试
2026-03-26 00:08:01 +08:00
e4a5845916
feat(datasource): 添加期货数据支持及优化数据对齐逻辑
...
- 新增期货代码映射及判断函数,支持上海期货交易所黄金主力合约
- 实现通过Tushare接口获取期货日线数据,包含夜盘数据处理
- fetch_single方法新增期货数据的调用逻辑
- 细化标的分类,将期货单独列出用于数据处理和日志输出
- 强制从Tushare获取A股交易日历,确保数据对齐的准确性
- 优化各类标的对齐逻辑,区别处理港股美股、加密货币与期货的前后向填充
- 统一ETF和基准数据对齐到A股交易日,改进数据一致性和完整性
2026-03-26 00:06:26 +08:00
2dde3c89c5
fix(config): 修正市场代码及市场类型定义
...
- 将恒生科技市场代码从"HSTECH"改为"HSTECH.HK"
- 更正黄金市场代码从"GC=F"为"AU.SHF"
- 调整黄金市场类型标签,由"COMMODITY"改为"FUTURES"
- 期货合约的交易时间包含夜盘,数据逻辑调整为类似加密货币处理
2026-03-26 00:06:09 +08:00
b7478bf2ef
fix(datasource): 修正非A股指数前向填充逻辑
...
- 将前向填充范围扩大至所有非A股指数
- 说明所有市场(港股、美股、黄金、加密货币)在T+1日09:00前已收盘
- 保障数据针对多市场的时效性和完整性
2026-03-25 22:25:48 +08:00
c196e33648
fix(report): 修复调仓信号报告中ETF代码显示与表格布局
...
- 在调仓信号表格中添加ETF代码列,完善持仓数据展示
- 处理ETF代码缺失情况,显示为“直接交易”
- 调整表格列宽,优化整体排版宽度
- 完善调入和调出持仓部分的ETF信息获取逻辑
2026-03-25 22:16:04 +08:00
e6ddea518c
feat(report): 支持ETF净值和溢价率的绩效报告展示
...
- 在生成绩效报告接口中新增code_config、index_data、etf_price_data和etf_nav_data_raw参数
- 计算溢价率并基于信号前一日数据进行校验和计算
- 打印最新调仓信号时增加ETF代码、ETF净值、溢价率及高溢价警告显示
- 调整信号数据基准日期展示,更准确反映信号计算依据
- 报告图表支持显示ETF净值和溢价率列,完善调仓信息视觉效果
- 统一处理跨市场ETF映射和特殊市场(如加密货币)情况,避免溢价率误报
- 完善打印表格和图表的列宽和格式,增强可读性
2026-03-25 22:02:05 +08:00