本文是《以AI量化为生》系列的第17篇,记录ATMQuant系统的一次架构升级。
今天花了一天时间重构了指标系统,主要解决了目录结构混乱、扩展困难和macOS崩溃三个问题。一共做了6次提交,下面直接说改了什么。
以前core/charts/目录里既有图表容器(enhanced_chart_widget.py、dual_chart_widget.py),又有指标实现(boll_item.py、rsi_item.py),混在一起不好管理。
现在拆成两个目录:
core/
├── charts/ # 图表容器和UI组件
└── indicators/ # 技术指标实现
职责清晰了,找代码也快了。涉及15个文件的导入路径调整。
新的core/indicators/__init__.py分两部分:
# 基础指标 - 直接导入
from .boll_item import BollItem
from .rsi_item import RsiItem
# ...
# 扩展指标 - try-except
try:
from .enhanced_volume_item import EnhancedVolumeItem
__all__.append("EnhancedVolumeItem")
except ImportError:
pass
这样基础版用户不会因为缺少扩展指标文件而报错,高级版用户有文件就自动导入。
用否定模式管理指标文件:
core/indicators/* # 忽略所有
!core/indicators/__init__.py # 保留基础文件
!core/indicators/boll_item.py
# ... 其他基础指标
以后新增的指标自动被忽略,不用手动维护列表。
在enhanced_chart_widget.py里用配置字典管理扩展指标:
EXTENDED_INDICATORS_CONFIG = {
"fibonacci": {
"module": "fibonacci_entry_bands_item",
"class": "FibonacciEntryBandsItem",
"type": "main",
"default_visible": False,
},
"zlema": {...},
"adaptive_macd": {...},
# 共8个扩展指标
}
启动时自动尝试加载,文件存在就注册到图表,不存在就跳过。用户只需复制文件,不用改代码。
try:
from core.indicators.enhanced_volume_item import EnhancedVolumeItem
VolumeItem = EnhancedVolumeItem
except ImportError:
from vnpy.chart import VolumeItem
优先用增强版(带买卖量分解),没有就降级到基础版。
macOS平台打开K线图会bus error,排查发现是Qt渲染emoji字符的问题。
批量替换:
⚠️ → [ALERT]▲ → [BUY]▼ → [SELL]涉及zlema_item.py、supertrend_item.py等指标文件,还有widget.py的注释。测试代码保留了emoji用于复现问题。
这次重构的核心是:
本文是《以AI量化为生》系列文章的第17篇,完整代码已开源至GitHub:https://github.com/seasonstar/atmquant
本文内容仅供学习交流,不构成任何投资建议。交易有风险,投资需谨慎。
想系统性掌握策略研发、指标可视化与回测优化?加入我的知识星球,获得持续、体系化的成长支持:
《以AI量化为生》系列
《量化指标解码》系列