当前位置: 首页 > news >正文

程序员量化交易实战 28:把价格输入抽象成价格源

到目前为止,每日流程里的价格都是调用方传进来的last_prices字典。

这对测试很方便,但对系统边界还不够清楚。第 28 篇新增价格源抽象,把“需要哪些价格”和“从哪里取价格”分开。

价格源要解决什么

模拟盘至少需要两类股票价格:

  • 当前持仓里的股票。
  • 目标权重里准备买入或继续观察的股票。

如果缺了任何一个,调仓和快照都可能失真。

这里的价格不是逐笔成交价,也不是盘口五档,而是每日流程用来估算账户权益和目标仓位的“最近可用价格”。在日频模拟盘里,它通常可以是收盘价、复权收盘价或经过清洗后的最新价。关键是口径要稳定,不能今天用收盘价、明天又混入盘中价。

价格快照

第 28 章新增app/price_providers.py

@dataclass(frozen=True) class PriceSnapshot: trade_date: date prices: dict[str, float] missing_symbols: tuple[str, ...]

缺失价格被明确放进missing_symbols,而不是悄悄忽略。

静态价格提供者

provider = StaticPriceProvider({"000001.SZ": 10.0}) snapshot = provider.get_last_prices(["000001.SZ", "600000.SH"], trade_date=today)

静态实现只服务于测试和文章演示。后续真实行情接入时,可以实现同一个协议,不影响每日流程的上层结构。

当前联动运行结果

paper-notify命令会先合并当前持仓和目标权重里的 symbol,再向StaticPriceProvider请求价格:

uv run python -m scripts.chapter_examples paper-notify

这次运行需要000001.SZ600519.SH两个价格,静态价格源都返回了,所以missing_symbols=()。如果真实价格源缺失某只股票,后续生产检查和健康报告就能把问题显式暴露出来。

本章更新与代码仓库

本章更新内容:

  • 新增app/price_providers.py
  • 定义PriceProvider协议和PriceSnapshot
  • 实现StaticPriceProvider
  • 新增collect_required_price_symbols(),合并持仓和目标权重所需价格。
  • 增加paper-notify联动示例,展示价格需求合并、静态取价和缺失价格检查。
  • 补充日频模拟盘里价格口径稳定性的背景说明。
  • 新增tests/test_price_providers.py,覆盖价格命中、缺失和 symbol 合并。

代码仓库:

https://github.com/ax2/zi-quant-platform

本章代码:

git clone https://github.com/ax2/zi-quant-platform.git cd zi-quant-platform git checkout chapter-28 uv sync --extra dev uv run pytest tests/test_price_providers.py

第 28 章提交为985e045,tag 为chapter-28

本篇小结

价格输入不能一直散落在调用方。

第 28 篇把价格源抽象出来,让缺失价格成为可检查状态。下一篇会继续补目标权重策略,让每日流程不再只靠手写权重字典。

http://www.jsqmd.com/news/1108501/

相关文章:

  • auto 关键字
  • 千屏千面,第一眼不能砸:登录场景的“适配“与“防闪“之道
  • 工业瑕疵检测项目启动要多久?
  • 3PEAK思瑞浦 TPA158B5-S5TR-S SOT23-5 电流信号检测放大器
  • std::thread
  • 收藏这份大模型应用开发学习路线图,小白也能半年入门并解决实际问题!
  • XUnity.AutoTranslator:打破语言壁垒的Unity游戏实时翻译架构
  • 2026年AI写论文软件怎么选?从选题到答辩的全流程攻略
  • 当 MCP 把工具接入变成标准动作,科研 Agent 为什么更需要“可调用文档对象”而不只是 Loader
  • vSphere 7.0+虚拟机性能优化终极指南(ESXi底层调度机制深度解密)
  • 2026最权威AI论文工具榜单:这些被高校和导师悄悄推荐的软件你用对了吗
  • 中兴光猫工厂模式破解:5分钟开启永久Telnet访问权限
  • Blender MMD Tools终极指南:跨平台3D动画数据转换完整解决方案
  • 【紧急避坑】VMware Workstation 17.5全屏模式突然失灵?这3个注册表键值必须立即校验!
  • 计算机毕业设计之jsp计算机系统平台
  • 本地部署AI大模型:隐私保护与高效实践指南
  • 2026景德镇黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • paperxie 学术创作工具箱|分模块论文智能撰写方案,适配全学段学术撰稿需求
  • 3步实现B站视频转文字:你的免费语音识别终极解决方案
  • 5家公司标书同一人制作,3.23亿项目被吊销执照:标书查重为什么是投标企业的生死线?
  • Linux 【05- scp命令超详细教程】
  • Agent Runtime 层重构:会话即事件日志的工程实践与生产落地
  • 遇阻回弹+保温防尘:工业厂房大门优选提升门核心优势解析
  • KMX63与PIC18LF47K40在HMI手势交互中的应用
  • paperxie 学术写作实操指南|对照平台原生界面拆解论文创作全配套功能
  • 分享我的开源项目: 基于Go开发的微服务即时通讯与社交平台
  • SEO 进阶:如何利用 sitemap 在线生成器提升 30% 索引率
  • 三菱Q系列以太网通讯架构赋能城市排水管网智能调度管理系统
  • 收藏!AI时代如何选择值得加入的公司?毕业生必看!
  • Sunshine游戏串流主机:打造你的个人游戏云服务器终极指南