使用Python分析股价波动周期

2024-03-31 18:48

本文主要是介绍使用Python分析股价波动周期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本思路是获取股价收盘信息后,使用希尔伯特黄变换将股价波动数据拆解为不同周期的波动曲线。再本别利用频谱分析计算每一个曲线的频率。目标是将股价波动数据拆解为不同周期波动的叠加态。

1.获取收盘价

富途有很好的API接口,给我这种小散送了每个月的使用次数也够了。

富途openAPI官网

2.希尔伯特黄变换

利用pyhht包,官方的文档磕磕绊绊看懂。

 

合起来

import pyhht
from pyhht.visualization import plot_imfs
import numpy as np
import random
from futu import *
import pandas as pd
import sys
import re
def likaiHHT_savefig_imfs(filepath,xlabel,title,signal, imfs, time_samples=None, fignum=None):if time_samples is None:time_samples = np.arange(signal.shape[0])n_imfs = imfs.shape[0]plt.figure(num=fignum)axis_extent = max(np.max(np.abs(imfs[:-1, :]), axis=0))# Plot original signalax = plt.subplot(n_imfs + 1, 1, 1)ax.plot(time_samples, signal)ax.axis([time_samples[0], time_samples[-1], signal.min(), signal.max()])ax.tick_params(which='both', left=True, bottom=False, labelleft=True,labelbottom=False)ax.grid(False)ax.set_ylabel('signal')ax.set_title(title)# Plot the IMFsfor i in range(n_imfs - 1):print(i + 2)ax = plt.subplot(n_imfs + 1, 1, i + 2)ax.plot(time_samples, imfs[i, :])ax.axis([time_samples[0], time_samples[-1], -axis_extent, axis_extent])ax.tick_params(which='both', left=True, bottom=False, labelleft=True,labelbottom=False)ax.grid(False)ax.set_ylabel('imf' + str(i + 1))# Plot the residueax = plt.subplot(n_imfs + 1, 1, n_imfs + 1)ax.plot(time_samples, imfs[-1, :], 'r')ax.axis('auto')#ax.tick_params(which='both', left=False, bottom=False, labelleft=False,labelbottom=False)ax.grid(False)ax.set_ylabel('res.')ax.set_xlabel(xlabel)plt.savefig(filepath)return 
def imfs_max_freq(imfs,sample_rate,fft_size):
#计算每一个imfs频谱中最高的那个频率n_imfs=imfs.shape[0]max_freq=[]for i in range(n_imfs-1):xs=imfs[i,:][:fft_size]xf=np.fft.rfft(xs)/fft_sizefreqs=np.linspace(0,sample_rate/2,fft_size//2+1)xfp=20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))max_freq.append(freqs[np.argmax(xfp)])return max_freq
def HHTstock(stockid,begindate,enddate):closelist=[]quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)  # 创建行情对象ret, data, page_req_key = quote_ctx.request_history_kline(stockid, start=begindate, end=enddate, max_count=5)  # 每页5个,请求第一页if ret == RET_OK:#print(data)#print(data['code'][0])    # 取第一条的股票代码#print(data['close'].values.tolist())   # 第一页收盘价转为listcloselist=data['close'].values.tolist()else:print('error:', data)while page_req_key != None:  # 请求后面的所有结果#print('*************************************')ret, data, page_req_key = quote_ctx.request_history_kline(stockid, start=begindate, end=enddate, max_count=5, page_req_key=page_req_key) # 请求翻页后的数据if ret == RET_OK:#print(data)closelist.extend(data['close'].values.tolist())else:print('error:', data)print('All pages are finished!')quote_ctx.close() # 关闭对象,防止连接条数用尽trading_day_num=len(closelist)t=np.linspace(0,trading_day_num,trading_day_num)np_close=np.array(closelist)decomposer=pyhht.EMD(np_close)imfs=decomposer.decompose()#plot_imfs(np_close,imfs,t)likaiHHT_savefig_imfs('./'+stockid+'.png','t/day',stockid,np_close,imfs,t)ls=imfs_max_freq(imfs,1,1000)#算每一段曲线的频率print(ls)return;
def main():HHTstock('HK.01816','2012-9-11','2020-9-18')
if __name__ == '__main__':main()

计算结果

 

这篇关于使用Python分析股价波动周期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865051

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核