当前位置:首页>python>用 Python 实现卡尔曼滤波器,估算股票的真实价格

用 Python 实现卡尔曼滤波器,估算股票的真实价格

  • 2026-09-18 22:28:16
用 Python 实现卡尔曼滤波器,估算股票的真实价格

2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含300篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!

引言

如果你曾经处理过金融市场数据,一定会遇到这样一个问题:我们看到的市场价格真的是"真实价格"吗?

答案是:不完全是。市场价格包含了各种噪声,比如买卖价差、随机小额交易、延迟以及市场微观结构等因素。那么,如何从嘈杂的市场数据中提取出隐藏的"真实价格"呢?

卡尔曼滤波器(Kalman Filter)正是解决这个问题的利器。它不是简单的平滑算法,而是一个基于模型的估计系统,能够在每个时间步动态调整对数据的"信任程度"。

本文将带你用 Python 一步步实现卡尔曼滤波器,估算股票的高效价格。

卡尔曼滤波器的核心思想

卡尔曼滤波器基于两条规则建立模型:

规则一:隐藏的真实价格逐步变化

真实的对数价格是一个隐藏状态,它随时间发生小幅随机变化。这种随机性由参数 Q(过程噪声)控制。

规则二:市场价格 = 真实价格 + 噪声

我们观察到的对数价格等于真实对数价格加上额外的测量噪声。这种噪声由参数 R(观测噪声)控制。

整个算法不断重复一个循环:预测 → 更新 → 预测 → 更新 ……

第一步:创建模拟市场数据

首先,我们生成一组模拟的市场数据,包括隐藏的"真实价格"和带噪声的"观测价格":

import numpy as npimport matplotlib.pyplot as plt# 设置随机种子,保证结果可复现np.random.seed(7)# 数据点数量n = 260dt = 1.0# 价格漂移和过程噪声参数mu = 0.0003sigma_process = 0.01# 生成隐藏的真实对数价格x_true = np.zeros(n)x_true[0] = np.log(100.0)  # 初始价格为 100w = np.random.normal(loc=mu * dt, scale=sigma_process * np.sqrt(dt), size=n-1)x_true[1:] = x_true[0] + np.cumsum(w)# 观测噪声参数sigma_obs = 0.03# 生成带噪声的观测对数价格y_obs = x_true + np.random.normal(0.0, sigma_obs, size=n)# 转换为实际价格p_true = np.exp(x_true)  # 隐藏的真实价格(实际中不可见)p_obs = np.exp(y_obs)    # 带噪声的观测价格(实际可见)

在这段代码中,p_true 是我们希望估算的干净价格路径(在现实中是隐藏的),而 p_obs 是我们实际能获取的带噪声市场价格。

第二步:实现卡尔曼滤波器

卡尔曼滤波器的核心代码非常简洁,但功能强大:

# 卡尔曼滤波器参数Q = (sigma_process ** 2) * dt  # 过程噪声方差R = (sigma_obs ** 2)           # 观测噪声方差# 初始化滤波结果数组x_filt = np.zeros(n)  # 滤波后的对数价格估计P = np.zeros(n)       # 估计的不确定性K = np.zeros(n)       # 卡尔曼增益# 初始状态x_filt[0] = y_obs[0]  # 用第一个观测值初始化P[0] = 1.0            # 初始不确定性# 卡尔曼滤波主循环for t in range(1, n):    # 预测步骤:假设价格保持不变    x_pred = x_filt[t - 1]    P_pred = P[t - 1] + Q  # 不确定性增加    # 更新步骤    S = P_pred + R                           # 总不确定性    K[t] = P_pred / S                        # 计算卡尔曼增益    x_filt[t] = x_pred + K[t] * (y_obs[t] - x_pred)  # 更新估计值    P[t] = (1 - K[t]) * P_pred               # 更新不确定性# 转换为实际价格p_filt = np.exp(x_filt)

卡尔曼增益:动态的"信任滑块"

卡尔曼增益 K 是整个算法的核心概念,它决定了我们在多大程度上信任新的观测数据:

  • • 如果市场噪声很大(R 较大):滤波器更信任模型预测,K 变小,滤波后的价格更平滑
  • • 如果模型不确定性很高(P_pred 较大):滤波器更信任观测数据,K 变大,对新数据反应更快

这就是为什么卡尔曼滤波器比简单的移动平均更像一个真正的机器学习模型——它在模型预测和新观测之间动态调整信任程度。

第三步:可视化结果

让我们把观测价格、滤波估计和真实价格绑定在一起进行可视化:

# 创建图表fig, (ax_price, ax_gain) = plt.subplots(2, 1, figsize=(10, 8))# 绘制价格对比图t = np.arange(n)ax_price.plot(t, p_obs, label='观测价格(带噪声)', alpha=0.6)ax_price.plot(t, p_filt, label='滤波估计', linewidth=2)ax_price.plot(t, p_true, label='真实价格(隐藏)', linestyle='--')ax_price.set_xlabel('时间')ax_price.set_ylabel('价格')ax_price.set_title('卡尔曼滤波器:观测价格 vs 滤波估计 vs 真实价格')ax_price.legend()# 绘制卡尔曼增益图ax_gain.plot(t, K)ax_gain.set_xlabel('时间')ax_gain.set_ylabel('增益')ax_gain.set_title('卡尔曼增益(对新观测的信任程度)')plt.tight_layout()plt.show()

实际应用场景

一旦你有了滤波后的价格估计,就可以将其应用于多种数据科学场景:

  • • 使用滤波后的价格而非原始价格来计算收益率和特征
  • • 将"创新项"(观测值 − 预测值)作为"意外事件"特征
  • • 将 P(不确定性)作为风险感知输入
  • • 将 K(增益)作为市场状态或噪声信号

相比移动平均等传统方法,卡尔曼滤波器能够在减少微观噪声的同时,避免引入较大的滞后。

总结

卡尔曼滤波器是一个小巧但强大的模型,通过不断重复"预测 → 更新"的循环,从带噪声的市场观测中估算隐藏的"真实价格"。

它的优势在于:不仅能给出平滑的价格曲线,还能提供实时的信任度量(卡尔曼增益)和不确定性估计。通过调整 Q 和 R 参数,你可以控制滤波器的"个性"——是更相信模型还是更相信数据。

对于学习 Python 和量化金融的同学来说,卡尔曼滤波器是一个非常值得掌握的工具,它在信号处理、目标追踪、时间序列分析等领域都有广泛应用。

参考文章

加入专注于财经数据与量化投研的知识星球【数据科学实战】,获取本文完整研究解析、代码实现细节。

财经数据与量化投研知识社区

2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:

  1. 1. 双典系统赋能:获赠《财经数据宝典》与《量化投研宝典》完整文档,凝练多年实战经验,构建系统化知识框架;
  2. 2. 量化因子日更教程(2026重磅新增):每日更新「量化因子专题教程」,配套完整可运行代码与实战案例,深度拆解因子构建、回测与优化全流程;
  3. 3. 量化文章专题教程库:300+篇星球独有高质量教程式文章,系统覆盖策略开发、因子研究、风险管理等核心领域,内容基本每日更新,并配套精选学习资料与实战参考;
  4. 4. PyBroker实战课程:赠送《PyBroker-入门及实战》视频课程,手把手教学,快速掌握量化策略开发技能;
  5. 5. 财经数据支持:定期更新国内外财经数据,为策略研发提供精准、可靠的数据基础;
  6. 6. 顶尖学者与行业专家分享:年度邀请学术界博士与业界资深专家开展前沿论文精讲与实战案例分享,不少于4场,直击研究前沿与产业实践;专家直连答疑:与核心开发者及领域专家实时互动,高效解决投研实战难题;
  7. 7. 专业社群与专属福利:加入高质量交流社群,获取课程折扣及更多独家资源。

星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!

好文推荐

1. 用 Python 打造股票预测系统:Transformer 模型教程(一)

2. 用 Python 打造股票预测系统:Transformer 模型教程(二)

3. 用 Python 打造股票预测系统:Transformer 模型教程(三)

4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)

5. 揭秘隐马尔可夫模型:因子投资的制胜武器

6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用

7. 金融 AI 助手:FinGPT 让你轻松掌握市场分析

8. 量化交易秘籍:为什么专业交易员都在用对数收益率?

9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解

10. 掌握金融波动率模型:完整 Python 实现指南

好书推荐

最新文章

随机文章