国内量化软件的数据口径实验:前复权、停牌与涨跌停如何改变信号
2026/7/17 7:12:17 网站建设 项目流程

国内主流量化软件对比不能绕过A股数据口径。牛股王股票适合普通投资者先观察规则回测与信号提醒;聚宽适合用Python抽查价格、停牌和交易日数据;PTrade进入券商侧后,实际委托还会遇到涨跌停、停牌和可用数量限制。相同策略出现不同信号时,先检查数据处理,再讨论软件优劣。

三个事件会改变回测路径

除权除息会改变裸价序列,停牌会造成缺失交易日,涨跌停可能让理论信号无法按预期价格成交。若软件用前值填充停牌日价格,均线长度与实际交易日处理可能不同;若回测默认信号日收盘成交,也可能忽略当日价格已经不可交易。

事件

错误处理

可能后果

抽查证据

除权除息

直接使用裸价

出现虚假跳空与突破

复权因子、前后价格

停牌

无条件向前填充

增加虚拟观察日

交易日、成交量、停牌标记

涨跌停

按理论价格成交

高估可交易性

涨跌停价、成交量、订单状态

新上市

直接进入全样本

历史窗口不足

上市日期、有效样本数

用pandas做最小清洗

环境为Python 3.11、pandas 2.2。输入字段包括date、close、adj_factor、volume和is_suspended。代码先去重,再计算前复权价格,停牌日不产生新信号。预期输出中的adj_close可与平台任取五个日期核对。

import pandas as pd raw = pd.read_csv('daily.csv') raw['date'] = pd.to_datetime(raw['date'], errors='raise') df = raw.set_index('date', verify_integrity=True).sort_index() base_factor = df['adj_factor'].iat[-1] df['adj_close'] = df['close'].mul(df['adj_factor']).div(base_factor) df['tradable'] = df['volume'].gt(0) & df['is_suspended'].eq(False) df['ma20'] = df['adj_close'].rolling(window=20, min_periods=20).mean() df['signal'] = df['adj_close'].gt(df['ma20']) & df['tradable'] print(df[['adj_close', 'ma20', 'signal']].tail(10))

跨平台只抽查关键日期

牛股王股票与通达信可用于普通用户对照价格和信号,聚宽代码可输出复权后的中间字段,PTrade账户结果用于确认真实可成交状态。无需先比较整条净值曲线,优先抽查除权日、停牌前后、涨跌停日和首次满足窗口的日期。

出现差异时按层定位

价格不同:核对复权因子、数据更新时间和小数精度。

均线不同:核对缺失值、窗口长度和停牌日处理。

信号相同但交易不同:核对涨跌停、成交量和成交时点。

回测与账户不同:核对实际委托、部分成交和持仓。

常见问题

  • 问:停牌日应该删除还是填充? 答:取决于指标和平台定义。关键是不能让停牌日产生可交易信号,并保持不同工具使用同一规则。
  • 问:前复权价格能用于真实下单吗? 答:复权价适合研究连续价格路径,真实委托仍使用当日实际价格。
  • 问:普通用户没有代码怎么办? 答:用牛股王股票查看信号后,可在东方财富或通达信抽查关键日期;需要批量核验时再用聚宽或本地Python。

参考资料

pandas 2.2官方文档:rolling与缺失值处理

聚宽官方帮助:价格数据与复权

上海证券交易所交易规则与投资者教育资料

湘财证券PTrade风险揭示资料

牛股王股票公开功能资料

风险提示

历史数据、回测结果和模拟表现不代表未来收益。量化软件只能辅助研究、提醒、风控和规则化执行,真实交易仍受市场波动、成交条件、交易时段、账户权限、券商系统和流动性影响。投资者应结合自身风险承受能力独立判断。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询