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

利用傅立叶变换(FFT)预测股价

一、数学原理假设股价的对数收益率为什么用对数收益率呢是因为对数收益率更能满足平稳性要求是随时间周期变化的函数用表示根据傅立叶变换的原理可以表示成如下形式为复数欧拉公式傅立叶变换一般用复数表示因为复数表示更简洁。上式中是从变化到也就是说由无穷多个线性组合而成实际中不可能无穷而是由数据集大小而定若为奇数(odd)则的取值限定为若为偶数(even)则的取值限定为其中序号为的系数项实际为。即股票的连续N个对数收益率可以看成是N个的函数值即注上面连加号中的范围按为奇数时写的为偶数时替换成为偶数时的下标范围即可。由上面的个方程可以唯一解出N个的值记为。有了这N个就得到了的近似表示根据这个近似表示就可以预测接下来时间点上的对数收益率取二、代码import numpy as np import pandas as pd import matplotlib.pyplot as plt # 原始收盘价数据 df pd.DataFrame({close: [41660, 40680.9, 36445.3, 35071.4, 36244.6, 36660.4, 36958.3, 36809.3, 37160.1, 37716.6, 38166.8, 37881.8, 38466.9, 38694.6, 36896.4, 37311.6, 41574.2, 41382.6, 42380.9, 43840, 44043, 44372.7, 43495.4, 42373.7, 42217.9, 42053.7, 42535.9, 44544.9, 43873.6, 40515.7, 39974.4, 40079.2, 38386.9, 37008.2, 38230.3, 37250, 38327.2, 39219.2, 39116.7, 37699.1, 43160, 44421.2, 43893, 42454, 39148.7, 39398, 38420.8, 37988, 38730.6, 41941.7, 39422, 38729.6, 38807.4, 37777.3, 39671.4, 39280.3, 41114, 40917.9, 41757.5, 42201.1, 41262.1, 41002.2, 42364.1, 42882.8, 43991.5, 44313.2, 44511.3, 46827.8, 47122.2, 47434.8, 47068, 45510.3, 46283.5, 45811, 46407.4, 46580.5, 45497.6, 43170.5, 43444.2, 42252, 42754, 42158.9, 39530.4, 40074.9, 41147.8, 39942.4, 40551.9, 40378.7, 39678.1, 40801.1, 41493.2, 41358.2, 40480, 39709.2, 39441.6, 39450.1, 40426.1, 38112.6, 39235.7, 39742.1, 38596.1, 37630.8, 38468.4, 38525.2, 37728.9, 39690, 36553, 36013.8, 35472.4, 34038.4, 30076.3, 31017.1, 29103.9, 29029.8, 29287.1, 30086.7, 31328.9, 29874, 30444.9, 28715.3, 30319.2, 29201, 29445.1, 30293.9, 29109.2, 29654.6, 29542.2, 29201.3, 28629.8, 29031.3, 29468.1, 31734.2, 31801, 29805.8, 30452.6, 29700.2, 29864, 29919.2, 31373.1, 31125.3, 30204.8, 30109.9, 29091.9, 28424.7, 26574.5, 22487.4, 22136.4, 22583.7, 20401.3, 20468.8]}) # 计算对数收益率 df[log_return] np.log(df[close]).diff() df df.dropna().reset_index(dropTrue) # 选取前N个数据来计算傅立叶变换的系数训练数据 N int(len(df) * 0.95) df_train df.iloc[0 : N].copy() # 傅立叶变换 coefficients np.fft.fft(df_train[log_return].values) coefficients / N frequances np.fft.fftfreq(coefficients.size, d1) # 选取主要频率这里根据振幅大小选取可以试验不同阀值的效果也可以试验其他选取条件 amplitude np.sqrt(coefficients.real**2 coefficients.imag**2) amplitude_mean amplitude.mean() amplitude_stdev amplitude.std() dominant_frequance_flags amplitude (amplitude_mean - 3.0*amplitude_stdev) # 由频域数据生成时域数据包括前N个训练数据和后续的预测数据 ret np.zeros(len(df), dtypenp.complex_) for k in range(coefficients.size): if dominant_frequance_flags[k]: ret np.array([coefficients[k] * complex(np.cos(frequances[k] * 2.0 * np.pi * n), np.sin(frequances[k] * 2.0 * np.pi * n)) for n in range(len(df))]) ret_recovered np.real(ret) # 可视化 fig plt.figure(numfLog Return, figsize(17, 6)) plt.plot(df[log_return].values, b, labelOriginal) plt.plot(ret_recovered, r--, labelRecovered) plt.vlines(N - 1, ymindf[log_return].min(), ymaxdf[log_return].max(), colorpurple, linewidth1, linestyle--) plt.legend() plt.show()三、解释1、代码中np.fft.fft函数的返回值与傅立叶变换公式中的相差了倍所以需要coefficients / N这样代码中的coefficients[k]就是。2、np.fft.fftfreq函数的返回值是与对应的频率即代码中的frequances[k]的值为。四、可视化结果五、参考资料1、关于傅立叶变换的知识可以参考mazonex的系列视频2、numpy中傅立叶变换相关的函数可以参考官方文档

相关文章:

利用傅立叶变换(FFT)预测股价

一、数学原理 假设股价的对数收益率(为什么用对数收益率呢?是因为对数收益率更能满足平稳性要求)是随时间周期变化的函数,用表示,根据傅立叶变换的原理,可以表示成如下形式: 为复数&#xff0c…...

云原生基础工具:Docker入门:容器化的第一步

云原生基础工具:Docker入门:容器化的第一步📚 本章学习目标:深入理解Docker入门的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《云原生、云边端一体化与算力基建&#xff1…...

面试官灵魂一问:MySQL 深度分页如何优化?(修订版)

在线 Java 面试刷题(持续更新):https://www.quanxiaoha.com/java-interview面试考察点问题识别能力:面试官不仅仅是想知道优化方案,更是想看你能否识别出深度分页的性能瓶颈——为什么 LIMIT 1000000, 10 会慢&#xf…...

微电网黑科技】两台三电平逆变器如何玩转线路阻抗差异?手把手拆解下垂控制核心代码

下垂功率均分-两台T型三电平逆变器在不同阻感性线路阻抗下实现有功均分与无功均分,采用积分改进法(阻抗相消法),电压电流双闭环控制,中点电位平衡控制,SPWM调制。 1.下垂,电压电流双闭环控制 2.…...

小程序容器技术方案分析:选型决策框架

本文不推荐任何特定产品,仅提供技术维度对比和决策框架,帮助读者根据自身需求做出判断。 一、技术原理回顾 小程序容器的核心价值在于双线程架构,将业务逻辑与UI渲染隔离: 方案类型 架构特点 性能表现 适用场景 H5 单线程,UI与逻辑互阻塞 启动慢,滑动掉帧 简单展示类页面…...

光伏板在直流母线上抖着腿晒太阳的时候,蓄电池和超级电容这对“储能兄弟“正在后台疯狂抢活。咱们今天要聊的这个光储并网系统,本质上就是个大型动态功率分配现场

光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出。 储能由蓄电池和超级电容构成的混合储能系统。 为了确保微网并网时电能质量,采用二阶低通滤波法对光伏输出功率进行抑制,通过设置不同截止频率将高频功率给超级电容响应&a…...

Spring Boot 3 + Vue 3 全栈开发课程指南:从零到独立开发通用管理系统,一篇看懂学什么、怎么学

如果你是一名Java后端开发者,你一定听过这样的声音:“后端程序员也要会前端了。” “毕设要做Web项目,Spring Boot Vue到底怎么学?” “网上课程要么只讲后端接口,要么源码堆砌脱离实际,学完还是不会做项目…...

CH32X035 RISC-V USB游戏手柄固件设计与HID协议实现

1. 项目概述CH32X035_USBGamepad 是一款面向沁恒半导体(WCH)CH32X035 系列 RISC-V 架构微控制器的高性能 USB HID 游戏手柄固件库。该库并非通用 HID 抽象层封装,而是深度耦合 CH32X035 特定硬件资源的嵌入式驱动实现,其核心目标是…...

ILI9341 LCD驱动库:新旧芯片版本兼容与确定性初始化

1. 项目概述Bonezegei ILI9341 是一款面向嵌入式系统的轻量级、高兼容性 LCD 驱动库,专为广泛使用的 ILI9341 显示控制器设计。该库不依赖 HAL 或 CMSIS-RTOS 抽象层,采用纯 C 实现,直接操作 GPIO 和 SPI 外设寄存器(或通过标准外…...

面试官问‘JS 和 DOM 啥关系’,我答‘人和房子’,当场发 offer!

这是一个很关键的问题。很多人学前端时,会把 JavaScript 和 DOM 混为一谈,觉得“JS就是用来操作网页元素的”,但实际上,它们是完全不同的两个东西,只是配合得特别紧密。 我用对比的方式来帮你理清。 文章目录一、它们…...

从静态建模到动态建模:仓储空间认知能力的关键跃迁路径—— 基于镜像视界多视角视频融合、无感定位与行为认知的三维空间计算框架

从静态建模到动态建模:仓储空间认知能力的关键跃迁路径—— 基于镜像视界多视角视频融合、无感定位与行为认知的三维空间计算框架一、引言:仓储空间认知的代际跃迁在仓储信息化发展过程中,空间建模技术经历了从二维图纸到三维模型的演进&…...

Git-RSCLIP零样本迁移实战:将预训练能力迁移到极地/海洋等特殊遥感场景

Git-RSCLIP零样本迁移实战:将预训练能力迁移到极地/海洋等特殊遥感场景 1. 引言:当通用模型遇见特殊场景 想象一下,你拿到一张北极冰盖融化的卫星图,或者一片深海珊瑚礁的遥感影像。你想让AI模型告诉你,这张图里到底…...

霜儿-汉服-造相Z-Turbo团队协作开发:使用GitHub进行模型版本管理与代码协作

霜儿-汉服-造相Z-Turbo团队协作开发:使用GitHub进行模型版本管理与代码协作 你是不是也遇到过这样的情况?和几个朋友一起捣鼓“霜儿-汉服-造相Z-Turbo”这个AI模型,想加点新功能或者修个bug。结果,你改的代码发给我,我…...

用过才敢说!千笔AI,风靡全网的AI论文软件

你是否曾为论文选题发愁,绞尽脑汁却找不到方向?是否在深夜面对空白文档无从下笔,反复修改却仍不满意?论文写作不仅是知识的较量,更是时间与耐心的挑战。面对查重率、格式规范、文献检索等重重难题,很多学生…...

CreativeRobotix教育机器人Arduino库深度解析

1. Creative Robotix 教育机器人平台 Arduino 库深度解析Creative Robotix 是由 Creative Science Foundation 发起的开源教育机器人平台,其核心设计理念是“可定制、低成本、全年龄友好”。该平台采用模块化机械结构设计,所有主体部件(如躯干…...

保姆级教程:Windows10修改Users文件夹名称后如何同步注册表设置

Windows10用户文件夹重命名后的注册表同步全指南 1. 为什么修改Users文件夹名称后需要同步注册表? 在Windows操作系统中,用户文件夹名称与注册表中的配置项紧密关联。当你直接重命名C盘下的用户文件夹时,系统并不会自动更新注册表中的相关路径…...

STM32定时器实战:用TIM2实现精准1ms延时(标准库版)

STM32定时器实战:用TIM2实现精准1ms延时(标准库版) 在嵌入式开发中,精准的延时控制往往是项目成败的关键。无论是传感器数据采集、电机控制还是通信协议处理,毫秒级的时序偏差都可能导致整个系统失效。而STM32的通用定…...

手把手用C++实现一个基于Protobuf的简易聊天程序(附完整源码)

从零构建基于Protobuf的C聊天程序:完整实现与深度解析 在分布式系统开发中,高效的数据序列化与网络通信是核心挑战。本文将带您完整实现一个基于Protobuf的聊天程序,涵盖协议设计、网络通信模型到实际部署的全流程。不同于简单的代码示例&…...

LoRa_AT库:面向AT指令型LoRa模块的轻量Arduino驱动

1. LoRa_AT 库概述:面向 AT 指令型 LoRa 模块的轻量级 Arduino 驱动框架LoRa_AT 是一个专为基于 AT 指令通信的 LoRa 模块设计的轻量级 Arduino C 类库。其核心定位并非通用蜂窝通信(如 GSM/LTE),而是聚焦于一类广泛应用于低功耗广…...

Cadence原理图模块化避坑指南:从‘电气检查报错’到‘一键同步更新’的完整流程

Cadence原理图模块化避坑指南:从‘电气检查报错’到‘一键同步更新’的完整流程 在电子设计自动化(EDA)领域,Cadence作为行业标杆工具链,其原理图模块化功能能显著提升复杂电路设计的可维护性。但许多工程师在从单体设…...

LTC230x I²C高精度ADC驱动深度解析与嵌入式实践

1. LTC230x系列ADC库深度解析:面向嵌入式工程师的IC高精度模数转换实践指南Linear Technology(现为Analog Devices)LTC230x系列是工业级12位逐次逼近型(SAR)模数转换器,专为低功耗、高精度、多通道模拟信号…...

5G NR PBCH处理流程详解:从MIB到天线映射的完整指南

5G NR PBCH处理流程详解:从MIB到天线映射的完整指南 在5G通信系统中,物理广播信道(PBCH)承载着网络最基本的配置信息,是终端设备(UE)接入网络的第一道"钥匙"。作为同步信号块(SSB)的核心组成部分,PBCH的处理流程涉及多个…...

5分钟搞懂多项式不可约性:从复数域到有限域的实战指南

5分钟搞懂多项式不可约性:从复数域到有限域的实战指南 多项式不可约性是代数学中的核心概念,也是密码学、编码理论等领域的数学基础。本文将带你快速理解不同数域下的不可约多项式判定方法,并通过Python和SageMath代码示例展示实际操作技巧。…...

FRCRN语音降噪工具实战案例:会议室录音去空调/键盘/人声交叠噪声效果展示

FRCRN语音降噪工具实战案例:会议室录音去空调/键盘/人声交叠噪声效果展示 1. 项目背景与价值 在现代办公环境中,会议录音质量往往受到各种环境噪声的严重影响。空调的低频嗡嗡声、键盘敲击的咔嗒声、多人同时发言的语音交叠,这些噪声不仅影…...

老设备激活指南:使用OpenCore Legacy Patcher实现Mac系统兼容性突破

老设备激活指南:使用OpenCore Legacy Patcher实现Mac系统兼容性突破 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款专为Intel架…...

香橙派5 NPU性能实测:yolov5在RK3588上的推理速度到底有多快?

香橙派5 NPU实战:RK3588芯片如何实现yolov5百帧级实时推理 当我在工作室第一次用香橙派5运行yolov5模型时,监控画面中的人流检测框像被施了魔法般流畅滑动——这完全颠覆了我对单板计算机AI性能的认知。作为RK3588芯片的招牌特性,那颗6TOPS算…...

PHP7.4性能优化:在银河麒麟V10 SP2系统上开启OPcache的完整配置指南

PHP7.4性能优化:在银河麒麟V10 SP2系统上开启OPcache的完整配置指南 对于运行在银河麒麟V10 SP2系统上的PHP应用来说,性能优化是一个永恒的话题。作为国产操作系统的代表,银河麒麟V10 SP2在x86架构上表现出色,而PHP7.4则是目前许多…...

电赛硬件手记:实测TLV3501高速比较器,从芯片手册到100MHz方波生成(附PCB设计避坑点)

电赛实战:TLV3501高速比较器从设计到100MHz方波生成的完整指南 引言:为什么TLV3501是电赛选手的秘密武器? 去年省赛现场,我看到至少三支队伍因为比较器电路不稳定而痛失测量分——他们的方波边缘抖动得像心电图,频率计…...

FPGA工程师的日常:用Verilog和QuartusⅡ快速验证一个加法器IP核的设计思路

FPGA加法器IP核实战:从Verilog设计到QuartusⅡ高效验证 早上九点,咖啡的香气弥漫在工位周围。作为FPGA工程师,今天要完成一个看似简单却至关重要的任务——为图像处理流水线设计一个可复用的加法器IP核。这个基础模块将成为后续卷积运算加速的…...

CiteSpace关键词共现图实战指南:从数据清洗到可视化优化

最近在帮实验室的师弟处理文献数据,他抱怨说用 CiteSpace 做关键词共现图时,导出的 Web of Science 数据经常格式错乱,节点标签挤成一团根本看不清,调整参数又特别耗时。这让我想起自己以前也踩过同样的坑。其实,用 Py…...