从历史 K 线到技术指标:iTick 数据计算 RSI/MACD/均线(Python)

从历史 K 线到技术指标:iTick 数据计算 RSI/MACD/均线(Python)

2026年4月19日9 分钟阅读9,958 次阅读
#iTick#K线#RSI#MACD#均线

一、目标:把 K 线指标做成可复用流水线,而不是一次性脚本

RSI、MACD、均线这些指标人人都会算,但真正会让回测与实盘分道扬镳的往往不是公式,而是数据口径与工程细节:时区、交易日历、复权、缺口、窗口边界与重算规则。本文的目标是把“拉 K 线 → 清洗 → 计算指标 → 输出信号”做成稳定流水线,后续你写任何策略都能复用同一套数据与口径。

这条流水线的验收标准也很明确:同一段数据重复运行得到相同结果;增量更新不会改变历史已确认数据;指标计算对缺口与异常点的处理可解释、可对账。

二、数据口径先写死:时区、交易日历、复权与 bar 边界

K 线指标的第一坑是“同名不同义”。日线是按交易日还是自然日切分;收盘价是交易所收盘还是某个时区的日终;复权是前复权还是后复权;盘前盘后是否纳入。只要口径不统一,同一套参数会在不同数据源上算出不同 RSI/MACD。

建议把这些口径写成配置并版本化:一旦策略上线,口径变更必须像代码变更一样被审查与回放验收,否则你会在不知不觉中把历史信号改写。

三、拉取历史 K 线:用 iTick 做数据源,但把拉取做成模块

历史拉取不是一次性请求,而是数据产品的一部分。你需要定义:拉取区间、重试与退避、缺失行为(是否允许空洞)、以及幂等更新(重复拉取是否覆盖一致)。拉取完成后先做基础验收:时间戳是否严格递增、是否存在重复、是否存在不合理跳变。

只要基础验收不过关,不要进入指标计算阶段。指标对数据质量非常敏感,坏数据会被指标平滑“掩盖”,让错误更难被发现。

四、清洗与对齐:缺口、重复、离群点的三类处理

清洗阶段建议分三类问题处理。缺口:记录缺口长度与位置,决定是补齐(用更高频数据聚合)还是直接标记不可用。重复:按 ts 去重并保留最新版本,确保幂等。离群点:区分明显错误(负价、极端异常)与可能真实跳价(重大事件),前者隔离,后者保留但标记质量等级。

清洗的产物不是“更干净的数据”,而是“可解释的数据”:每一次修正都能被追溯到规则与原因。

五、均线(SMA/EMA):最简单但最容易在边界时刻出错

均线看似简单,但边界决定成败:窗口是固定 N 根 bar 还是固定 N 天;遇到缺口是否缩短窗口;增量更新时是否只重算尾部窗口。尤其是 EMA,初始值选择不同会导致前段数值差异,你必须写清楚初始化规则,否则回测与实盘很难完全对齐。

建议把均线实现做成纯函数:输入为已清洗的 bar 序列与参数,输出为指标序列,并在输出里保留“有效样本数”或质量标记,避免在样本不足时误用指标。

六、RSI:公式统一不难,难在输入价格与平滑方法

RSI 的差异常见于两点:使用 close 还是使用典型价格(HLCC/均价),以及使用 Wilder 平滑还是普通 EMA/SMA。只要这两点不同,RSI 曲线的拐点与阈值穿越时刻就会不同,策略触发也会随之变化。

最稳健的做法是把 RSI 计算拆成可配置组件:价格源可配置、平滑方法可配置、窗口可配置,并把配置快照写入回测报告与实盘日志,确保可复盘。

七、MACD:快慢线之外,还有“信号线与柱状图”的一致性

MACD 的工程坑在于一致性:快线、慢线、信号线通常都是 EMA 体系,任何一个环节的初始化或缺口处理不同,柱状图会出现系统性偏差。策略里常用的“柱状图由负转正”对这些偏差非常敏感。

建议在流水线里把 MACD 的每个中间产物都保留(快线、慢线、DIF、DEA、hist),并在回测与实盘中对同一段数据做抽样对账,确认差异不来自实现细节。

八、从指标到信号:先写规则,再写触发与冷却

指标不是策略,信号才是策略。把指标转成信号时要写清楚:阈值触发是否需要收盘确认、是否允许当根触发、是否有冷却期、是否限制连续交易次数。很多“胜率下降”并不是指标失效,而是震荡期反复触发导致换手吞噬优势。

因此建议把信号层写成状态机:趋势成立、趋势破坏、观察期、冷却期。状态机比“if else 触发”更可控,也更容易复盘。

九、回测一致性验收:重复运行一致、增量更新一致、抽样对账一致

把指标流水线做成资产,必须有验收。建议至少做三条:同一段历史重复运行结果一致;只追加新数据的增量计算不会改变历史已确认部分;抽样对账(随机日期点)能在日志里复现该点的输入 bar、指标值与信号状态。

当验收通过,你的策略开发会明显变快:你不再需要每次都怀疑“是不是数据或实现错了”。

十、结语:指标的竞争力来自口径与工程,而不是公式

RSI、MACD 与均线的公式人人都能背出来,但真正能长期跑的系统靠的是口径统一、清洗可解释、计算可验收、结果可对账。把指标链路做成稳定流水线后,你写的每一个策略都能站在同一套可靠输入之上,回测与实盘差距也会显著缩小。

十一、常见回测陷阱:重算、回填与“未来函数”的隐蔽形式

指标类回测最隐蔽的坑往往来自“数据在未来被修正”。例如历史 K 线回填、复权口径调整、或你在增量更新时把历史窗口重算范围写得太大,导致旧信号被悄悄改写。表面上看策略在进步,实际上是数据口径在漂移。

另一个常见陷阱是未来函数的隐蔽形式:用当根未收盘的数据计算收盘指标、用未来成交量确认当下信号、或在缺口处理时用未来数据补齐当前窗口。解决办法很朴素:把“可用数据的时间边界”写进流水线,任何计算都只能使用边界之前的数据,并在日志里输出边界与重算范围,保证每一次回放都能复现同一结果。