2020年数维杯国际大学生数学建模B题股票价格的混沌模型求解全过程文档及程序

article/2025/3/15 15:42:07

2020年数维杯国际大学生数学建模

B题 股票价格的混沌模型

原题再现:

  上市公司股价的变化可以直接反映上市公司的经营状况和市场的认可度。股票价格的建模和预测一直是一个难题。最重要的因素是股票价格既有趋势因素又有随机因素。因此,股票市场是一个非常典型的非线性复杂系统。在解决非线性复杂系统建模方面,实践证明混沌理论是一种有效的理论,并在电力、通信等领域取得了一定的理论和应用效果。由于股票市场也是一个非线性的复杂系统,我们能否利用混沌理论的思想和理论来建立股票价格模型?请利用所提供的三只股票的交易数据,使用数学建模方法解决以下问题:
  ①分析每日、每周和每月的趋势三个股票,和定性或定量分析股票的趋势(包括混沌特征的测试),并给出相关的分析结果(注意:每周和月度数据可以由股票价格的日常数据)。
  ②根据不同股票价格的趋势,我们尝试建立股票价格趋势和随机性的数学模型,并使用过去的20天的数据来评估模型的预测结果。
  ③有一个反向现象在股票价格的趋势,也就是说,如果它上升太多,它会下降,如果它下降太多,它将上升,显示一定的周期性变化。请利用问题2的研究结果建立股票价格反转判断模型,并用数据进行检验。
  提交的文件应包括:
  页表
  目录
  1—2页的文章
  您的解决方案不超过20页,最多24页的摘要,目录,文章
  注意:参考列表和任何附录不计入页面限制,应该出现在您的完整解决方案之后。您不应该使用未经授权的图像和材料,其使用受到版权法的限制。确保你在报告中引用了你的想法和材料的来源。

整体求解过程概述(摘要)

  本文验证了三只股票的混沌特征,并预测了它们的涨跌走势。首先,基于混沌理论计算李雅普诺夫指数,验证股票数据的混沌特征;然后建立隐马尔可夫模型(HMM)来预测股票的涨跌趋势。最后,针对股市价格波动的随机性,引入弹性反馈算法提高模型的预测精度。

  对于第一个问题,一开始,根据这三只股票近五年的日线、周线和月线图发现,这三只股票总体上都呈现非线性波动上升趋势。然后,测试了三只股票的混沌特征。对库存数据进行对数预处理后,采用自相关数据处理方法确定最佳延迟时间,结合G-P算法得到嵌入维数。最后,采用Wolf方法计算李雅普诺夫指数,验证了股票数据的混沌性。

  对于第二个问题,首先,我们建立了HMM,使用正向-后向算法、鲍姆-韦尔奇算法和维特比算法求解HMM所需的参数。其次,我们测试隐藏状态的敏感性。研究发现,不同隐藏状态下的结果无显著差异。最后,我们用近20天的数据对其进行了测试。

  对于第三个问题,一开始,在问题2建立的HMM的基础上,采用弹性反馈算法,其中HMM用于预测隐藏状态,弹性反馈算法用于预测分类状态。因此,两者的线性组合可用于进一步预测股票的趋势。之后,再次对模型进行测试,结果表明,三只股票的预测准确率分别提高了15%、10%和5%。

  本文的创新之处在于HMM和弹性反馈算法的结合,从而得到了复合态。基于此,可以预测股票的涨跌趋势,进一步提高了模型的预测精度。

模型假设:

  假设1:在预测过程中,不考虑市场本身的波动性,只用基本面数据来预测模型。

  假设2:在分析过程中,股票涨跌的计算方法与目前常用的方法相同。

  假设3:数据在分析过程中可靠;

  假设4:建立的模型在可接受的误差范围内有效。

  假设5:马尔可夫链在任何时刻的状态只与前一时刻的状态有关,与其他时刻的状态无关。

  假设6:观察到的状态仅取决于当前时刻隐马尔可夫链的状态,与其他状态无关。

问题分析:

  对问题一的分析
  对于第一个问题,我们需要定性分析股票并测试其混沌特征。首先,我们使用Matlab绘制这三只股票从2016年1月到2020年10月的日K线图、周K线图和月度K线图,并在图表中绘制相应的60天平均线和10天平均线。通过分析图表得出,这三只股票都具有非线性波动趋势,其中股票600519近五年增长了730.8%。其次,我们使用李雅普诺夫指数模型运行股票开盘价的相关数据,得出股票开盘价数据混乱的结论;同时,还对其他股票数据进行了测试,结果表明其他五类股票数据也具有混沌特征。

  对问题二的分析
  对于第二个问题,需要建立库存涨跌的预测模型,用最近二十天的数据来检验。首先,基于混沌理论,主要利用HMM建立库存涨跌预测模型,利用提供的3只股票的数据训练模型的状态转移参数,最后得到HMM所需的参数。然后,根据训练模型,使用最近20天的数据进行回溯测试,并分析模型的预测精度。最后,根据模型精度,分析了HMM存在的问题。

  对问题三的分析
  对于第三个问题,我们需要考虑股市中的反向现象,从而进一步提高模型的预测精度。因此,首先,根据问题2中建立的模型,使用股票的趋势,将股票的状态分为三类。然后,结合HMM的状态分类结果,采用线性组合建立弹性反馈算法;最后,对模型的预测结果进行了更准确的分析。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分Matlab程序如下:

1. %% 清空工作区
2. clc
3. clear
4. close all
5. %% 读取数据
6. data1 = xlsread('000400.SZ.SZ.xls');
7. data2 = xlsread('002281.SZ.SZ.xls');
8. data3 = xlsread('600519.SH.SH.xls');
9. %% 混沌因子分析
10. data1=data3;
11. %% 箱线图
12. %箱线图
13. set(0,'defaultfigurecolor','w')
14. opengl hardwarebasic
15. opengl software
16. Date=[];
17. i=1;
18. while i<size(data1,1)
19. Date(i,1)=i;
20. i=i+1;
21. end
22. OpenPrice=data1(:,1); %开盘
23. HighPrice=data1(:,4); %收盘
24. LowPrice=data1(:,3); %最低
25. ClosePrice=data1(:,2); %最高
26. Vol=data1(:,5); %成交量
27. % save Data Date OpenPrice HighPrice LowPrice ClosePrice Vol; %存储mat文件方便下次使用
28. candle(HighPrice,LowPrice,ClosePrice,OpenPrice,'r')%高 低 收 开 红色 时间 时间格式
29. hold on
30. h1=plot(data1(:,7),'Color',[124/255,187/255,0/255]);
31. h2=plot(data1(:,8),'Color',[62/255,43/255,109/255]);
32. h=legend([h1,h2],'M10','M60');
33. legend('boxoff')
34. dates = { '2016-1' '2016-10' '2017-8' '2018-4' '2019-2' '2019-12' '2020-10' }';
35. set(gca,'xtick',0:200:1200) ;%y 轴的增长幅度
36. set(gca,'xticklabel',dates(1:7));
37. set(gca,'fontname','Times New Roman','FontSize',10);
38. xlabel('Time','fontname','Times New Roman','Color','k','FontSize',15)
39. ylabel('Price','fontname','Times New Roman','Color','k','FontSize',15)
40. title('Stock 600519.SH.SH prices change','fontname','Times New Roman','Color','k','FontSize',20);%图形的标题
41. print('3-year','-djpeg','-r1000')
1. function T_mean=period_mean_fft(data)
2. %该函数使用快速傅里叶变换 FFT 计算序列平均周期
3. %data:时间序列
4. %T_mean:返回快速傅里叶变换 FFT 计算出的序列平均周期
5. Y = fft(data); %快速 FFT 变换
6. N = length(Y); %FFT 变换后数据长度
7. Y(1) = [];%去掉 Y 的第一个数据,它是 data 所有数据的和
8. power = abs(Y(1:N/2)).^2;%求功率谱
9. nyquist = 1/2;
10. freq = (1:N/2)/(N/2)*nyquist; %求频率
11. period = 1./freq; %计算周期
12. [mp,index] = max(power);%求最高谱线所对应的下标
13. T_mean=period(index);%由下标求出平均周期

部分Python程序如下:

1. from hmmlearn import hmm
2. import numpy as np
3. from matplotlib import pyplot as plt
4. import pandas as pd
5. n = 2 # 6 个隐藏状态
6.
7. data = pd.read_csv('6.csv', index_col=0)
8. volume = data['volume']
9. close = data['close']
10.
11. logDel = np.log(np.array(data['high'])) - np.log(np.array(data['low']))
12. logRet_1 = np.array(np.diff(np.log(close)))
13. logRet_5 = np.log(np.array(close[20:])) - np.log(np.array(close[:-20]))
14. logVol_5 = np.log(np.array(volume[20:])) - np.log(np.array(volume[:-20]))
15.
16. # 保持所有的数据长度相同
17. logDel = logDel[20:]
18. logRet_1 = logRet_1[19:]
19. close = close[20:]
20.
21. Date = pd.to_datetime(data.index[20:])
22. A = np.column_stack([logDel, logRet_5, logVol_5])
23. #print(A)
24. model = hmm.GaussianHMM(n_components=n, covariance_type="full", n_iter=2000).fit(A)
25. hidden_states = model.predict(A)
26.
27. fig1=plt.figure(figsize=(20, 15))
28. ax = plt.subplot(111)
29. ax.set_title(..., fontsize=30)
30. ax.set_xlabel(..., fontsize=30)
31. ax.set_ylabel(..., fontsize=30) # 设置轴标题字体大小
32. for i in range(n):
33. pos = (hidden_states == i)
34. plt.plot_date(Date[pos], close[pos], 'o', label='hidden state %d' % i, lw=2)
35. plt.xticks(fontsize=30)
36. plt.yticks(fontsize=30) # 设置坐标标签字体大小
37. plt.title('Six implicit state distributions 002281.SZ.SZ stock price ')
38. plt.legend(loc='upper left')
39. plt.rcParams.update({'font.size': 20}) #设置图例字体大小
40. #plt.grid(True) #是否要显示网格线
41. plt.xlabel('Time')
42. plt.ylabel('The implicit state of a stock')
43. plt.show()
44. fig1.savefig("C:/Users/19766/Desktop/third/stocks.jpg")
45.
46. res = pd.DataFrame({'Date': Date, 'logReg_1': logRet_1, 'state': hidden_states}).set
_index('Date')
47. series = res.logReg_1
48.
49. templist = []
50. fig2=plt.figure(figsize=(20, 15))
51. ax = plt.subplot(111)
52. ax.set_title(..., fontsize=30)
53. ax.set_xlabel(..., fontsize=30)
54. ax.set_ylabel(..., fontsize=30) # 设置轴标题字体大小
55. for i in range(n):
56. pos = (hidden_states == i)
57. pos = np.append(1, pos[:-1])
58. res['state_ret%d' % i] = series.multiply(pos)
59. data_i = np.exp(res['state_ret%d' % i].cumsum())
60. templist.append(data_i[-1])
61. plt.plot_date(Date, data_i, '-', label='hidden state %d' % i)
62. plt.xticks(fontsize=30)
63. plt.yticks(fontsize=30) # 设置坐标标签字体大小
64. plt.title('Six categories of 002281.SZ.SZ hidden states')
65. plt.legend(loc='upper left')
66. plt.rcParams.update({'font.size': 20}) #设置图例字体大小
67. #plt.grid(True) #是否要显示网格线
68. plt.xlabel('Time')
69. plt.ylabel('The implicit state of a stock')
70. plt.show()
71. fig2.savefig("C:/Users/19766/Desktop/third/predict.jpg")
72.
73.
74. templist = np.array(templist).argsort()
75. long = (hidden_states == templist[-1]) + (hidden_states == templist[-2]) # 买入
76. short = (hidden_states == templist[0]) + (hidden_states == templist[1]) # 卖出
77. long = np.append(0, long[:-1])
78. short = np.append(0, short[:-1])
79.
80. plt.figure(figsize=(20, 15))
81. res['ret'] = series.multiply(long) - series.multiply(short)
82. plt.plot_date(Date, np.exp(res['ret'].cumsum()), 'r-')
83. plt.show()
程序量太大了 余下的问题程序不在这里给出了
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

http://chatgpt.dhexx.cn/article/p7Wx57la.shtml

相关文章

ugpost_tcl文件

########################## TCL Event Handlers ########################## b.tcl - 3_axis_mill 这是 3 轴铣床。 Created by dp Wednesday, November 06, 2019 8:52:33 AM China Standard Time with Post Builder version 10.0.3. #####################################…

数据结构课设 (快餐店 POS 机计费系统、成绩分析、算术表达式)

目录 快餐店 POS 机计费系统 学生成绩分析系统 算术表达式 参考文献 快餐店 POS 机计费系统 【任务描述】 校园快餐店一共出售三大类食品&#xff1a;饮料&#xff0c;主食&#xff0c;小食品。设计一个快餐店的 POS 机计费系统&#xff0c; 对快餐店的食品信息、销售信息…

linux文件系统-文件的写与读

只有打开可文件以后&#xff0c;或者建立起进程与文件之间的连接之后&#xff0c;才能对文件进行读写。文件的读写主要是通过系统调用read和write来完成的&#xff0c;对于读写的进程&#xff0c;目标文件由一个打开文件号代表。 为了提高效率&#xff0c;稍微复杂一点的操作系…

数学模型——泊车模型(2022年Mathorcup数学建模挑战赛C题,含Matlab代码)

写在前面 之前做了一个2022年Mathorcup数学建模挑战赛C题的比赛心得&#xff0c;上一篇文章主要讲了A*算法的改进以及A*算法如何在C题的第3问的应用。本文主要介绍C题的第2问&#xff0c;即三种泊车模型如何建立&#xff0c;因此部分并非我写&#xff0c;在比赛期间&#xff0…

Python小白的数学建模课-16.最短路径算法

最短路径问题是图论研究中的经典算法问题&#xff0c;用于计算图中一个顶点到另一个顶点的最短路径。在图论中&#xff0c;最短路径长度与最短路径距离却是不同的概念和问题&#xff0c;经常会被混淆。求最短路径长度的常用算法是 Dijkstra 算法、Bellman-Ford 算法和Floyd 算法…

数学建模有关DNA序列k-mer index的问题

原问题是这样的&#xff1a; 给定一个DNA序列&#xff0c;这个系列只含有4个字母ATCG&#xff0c;如 S “CTGTACTGTAT”。给定一个整数值k&#xff0c;从S的第一个位置开始&#xff0c;取一连续k个字母的短串&#xff0c;称之为k-mer&#xff08;如k 5&#xff0c;则此短串为CT…

数学建模暑期集训26:遗传算法

遗传算法是优化类问题的经典智能算法。本篇将介绍遗传算法的基本概念以及利用遗传算法来求解单目标规划模型。 达尔文进化论的基本思想 遗传算法的设计是受到达尔文进化论的启发。先看下面这张图的几个基本概念。 一些花构成一个种群。 每朵花被称为个体。 每个个体内有染色…

2021年亚太杯三等奖选手C题思路

文章目录 亚太杯C题第一小问亚太杯C题第二小问亚太杯C题第三小问亚太杯C题第四小问亚太杯C题第五小问 昨天晚上刚出了亚太杯的成绩&#xff0c;获得了三等奖&#xff0c;毕竟是第一次参加数学建模比赛&#xff0c;不是成功参与奖就很高兴了&#xff0c;结束了之后&#xff0c;还…

python使用networks读取txt文件画一个有权有向图

class demo():def __init__(self):self.file_pathtest.txt#图文件 def draw_graph(self):G2 nx.DiGraph() # 创建&#xff1a;空的 有向图f open(self.file_path)lines [l.split() for l in f.readlines() if l.strip()]# print(lines)for i in lines:G2.add_edge(i[0],…

数学建模常用功能

目录 pandas读取数据 查看数据异常 提取指定列 将dataframe数据以numpy形式提取 数据划分 随机森林回归 GBDT回归 特征重要性可视化 输出&#xff1a; ​ 绘制3D散点图 导入自定义包且.py文件修改时jupyter notebook自动同步 dataframe删除某列中重复字段并删除对应行…

c语言文件操作

文件操作读写 1 文件处理原理及基本概念 C语言的文件处理功能&#xff0c;大体上分为两种&#xff1a;一种是设置缓冲区&#xff0c;另一种是不设置缓冲区。因为不设置缓冲区的方法直接对磁盘进行操作&#xff0c;速度较慢&#xff0c;并且由于不是C的标准函数&#xff0c;跨…

无人机视角展示(无人机图像定位 )--某数学建模A题MATLAB代码

近期没啥空&#xff0c;水个简单的。。。。 目前只写了第一问&#xff0c;有空再写。。。。。 问题描述 无人驾驶飞机简称“无人机”&#xff0c;是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机。搭载图像设备的无人机在高空航拍、区域巡视、军事侦查等方面有广泛…

2020 全国大学生数学建模竞赛C题思路+代码

题目链接&#xff1a;天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享 前言 又是一年数据挖掘题型&#xff0c;第一次接触这种题型还是在去年的mathorcup上&#xff0c;这种题的难度就在于指标的建立和数据的处理上。后面会出一份关于数据挖掘题型&#xff0c;我的相关经…

PU learning半监督学习

半监督学习 Positive-unlabeled learning 什么是半监督学习 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能&#xff0c;就是半监督学习&#xff08;semi-supervised learning&#xff09;。 要利用未标记样本&#xff0c;必然要做一些将未标记样本所揭示的数…

详解基于图卷积的半监督学习

Kipf和Welling最近发表的一篇论文提出&#xff0c;使用谱传播规则&#xff08;spectral propagation&#xff09;快速近似spectral Graph Convolution。 和之前讨论的求和规则和平均规则相比&#xff0c;谱传播规则的不同之处在于聚合函数。它使用提升到负幂的度矩阵D对聚合进行…

【半监督医学图像分割 2023】RCPS

文章目录 【半监督医学图像分割 2023 】RCPS摘要1. 介绍2. 相关工作2.1 医学图像分割2.1 半监督学习2.3 对比学习 3. 方法3.1 整体概述3.2 纠正伪监督3.3 双向Voxel对比学习。 4. 实验 【半监督医学图像分割 2023 】RCPS 论文题目&#xff1a;RCPS: Rectified Contrastive Pseu…

半监督之数据增强

目录 前言 传统常见的 Free Lunch for Few-shot Learning: Distribution Calibration Learning to Augment for Data-Scarce Domain BERT Knowledge Distillation MixText: Linguistically-Informed Interpolation of Hidden Space for Semi-Supervised Text Classificati…

半监督的语义分割

现阶段传统的语义分割已经逐渐走向瓶颈&#xff0c;你设计一个网络&#xff0c;修改一下U-Net增加一个模块&#xff0c;现在已经很难再出优秀的成果&#xff0c;大家对你的创新程度认可度也越来越低。所以现在大家在进行语义分割的时候往往需要自行创造出一些需求&#xff0c;比…

半监督学习介绍

转载地址 https://blog.csdn.net/ice110956/article/details/13775071 什么是半监督学习? 传统的机器学习技术分为两类&#xff0c;一类是无监督学习&#xff0c;一类是监督学习。 无监督学习只利用未标记的样本集&#xff0c;而监督学习则只利用标记的样本集进行学习。 但…

半监督目标检测相关方法总结

戳我&#xff0c;查看GAN的系列专辑~&#xff01; 等你着陆&#xff01;【GAN生成对抗网络】知识星球&#xff01; 作者丨kinredon知乎 编辑丨极市平台 来源丨https://zhuanlan.zhihu.com/p/404160115 近期阅读了一些半监督目标检测&#xff08;Semi-Supervised Object Detecti…