具体程序:

Ind.py
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 27 13:46:50 2020
@author: nuoyanli
"""
import pandas as pd
import numpy as np# 移动平均线指标的计算
def MA(data, N1, N2, N3):MAN1 = pd.Series(data['Clsprc'].values).rolling(N1).mean()MAN2 = pd.Series(data['Clsprc'].values).rolling(N2).mean()MAN3 = pd.Series(data['Clsprc'].values).rolling(N3).mean()return (MAN1, MAN2, MAN3)# 指数平滑异同平均线的计算
def MACD(data):EMA12 = pd.Series(data['Clsprc'].values).ewm(halflife=12).mean()EMA26 = pd.Series(data['Clsprc'].values).ewm(halflife=26).mean()DIF = EMA12 - EMA26DEA = np.zeros((len(DIF)))MACD = np.zeros((len(DIF)))for t in range(len(DIF)):if t == 0:DEA[t] = DIF[t]if t > 0:DEA[t] = (2 * DIF[t] + 8 * DEA[t - 1]) / 10MACD[t] = 2 * (DIF[t] - DEA[t])return MACD# 随机指标KDJ的计算
def KDJ(data, N):# Lmin=pd.rolling_min(data['Loprc'].values,N)Lmin = pd.Series(data['Loprc'].values).rolling(N).min()Lmax = pd.Series(data['Hiprc'].values).rolling(N).max()RSV = (data['Clsprc'].values - Lmin) / (Lmax - Lmin)K = np.zeros((len(RSV)))D = np.zeros((len(RSV)))J = np.zeros((len(RSV)))for t in range(N, len(data)):if t == 0:K[t] = RSV[t]D[t] = RSV[t]if t > 0:K[t] = 2 / 3 * K[t - 1] + 1 / 3 * RSV[t]D[t] = 2 / 3 * D[t - 1] + 1 / 3 * K[t]J[t] = 3 * D[t] - 2 * K[t]return (K, D, J)# 相对强弱指标的计算
def RSI(data, N):z = np.zeros(len(data) - 1)z[data.iloc[1:, 2].values - data.iloc[0:-1, 2].values >= 0] = 1z[data.iloc[1:, 2].values - data.iloc[0:-1, 2].values < 0] = -1z1 = pd.Series(z == 1).rolling(N).sum()z2 = pd.Series(z == -1).rolling(N).sum()rsi = np.zeros((len(data)))for t in range(N - 1, len(data) - 1):rsi[t] = z1[t] / (z1[t] + z2[t])return rsi# 乖离率指标
def BIAS(data, N):bias = np.zeros((len(data)))man = pd.Series(data.iloc[:, 2].values).rolling(N).mean()for t in range(N - 1, len(data)):bias[t] = (data.iloc[t, 2] - man[t]) / man[t]return bias# 能量潮指标的计算
def OBV(data):obv = np.zeros((len(data)))for t in range(len(data)):if t == 0:obv[t] = data['Dnshrtrd'].values[t]if t > 0:if data['Clsprc'].values[t] >= data['Clsprc'].values[t - 1]:obv[t] = obv[t - 1] + data['Dnshrtrd'].values[t]if data['Clsprc'].values[t] < data['Clsprc'].values[t - 1]:obv[t] = obv[t - 1] - data['Dnshrtrd'].values[t]return obv# 涨跌趋势(分类指标/预测指标)的计算
def cla(data):y = np.zeros(len(data))z = np.zeros(len(y) - 1)for i in range(len(z)):z[data.iloc[1:, 2].values - data.iloc[0:1, 2].values > 0] = 1z[data.iloc[1:, 2].values - data.iloc[0:-1, 2].values == 0] = 0z[data.iloc[1:, 2].values - data.iloc[0:-1, 2].values < 0] = -1y[i] = z[i]return y

理解:

  • Series:是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。 例如: 从结果可以看出Series的字符串表现形式为:索引在左边,值在右边。 在上面的例子中我并没有为数据指定具体索引,它会自动创建一个0到N-1(N为数据的长度)的整数型索引。
  • series rolling:移动窗口,​​为了提升数据的准确性,将某个点的取值扩大到包含这个点的一段区间,用区间来进行判断,对于pd.Series(s).rolling(window=3).mean()就是每次往后移动一位计算3位的平均值代替当前位置。

benefit.py

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 27 13:43:56 2020
@author: nuoyanli
"""
from predict import result1
import pandas as pddata = pd.read_excel('./数据/data.xlsx')
r_list = []  # 存放收益率
r_trd = []  # 存放交易日期
for t in range(len(result1) - 1):# 如果预测结果为1,执行投资策略if result1['预测结果'].values[t] == 1:p1 = data.loc[data['Trddt'].values == result1['交易日期'].values[t], 'Clsprc'].valuesdt = data.loc[data['Trddt'].values > result1['交易日期'].values[t], ['Trddt', 'Clsprc']]dt = dt.sort_values('Trddt')p2 = dt['Clsprc'].values[0]r = (p2 - p1) / p1r_list.append(r)r_trd.append(result1['交易日期'].values[t])
r_total = sum(r_list)
print(r_total)
trd_r = {'交易日期': r_trd, '收益率': r_list}
trd_r = pd.DataFrame(trd_r)
print(trd_r)
predict.py
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 27 14:23:52 2020
@author: nuoyanli
"""
from main import Data
import pandas as pd
from sklearn.preprocessing import StandardScaler# 提取训练和测试数据
x1 = Data['交易日期'] >= '2017-01-01'
x2 = Data['交易日期'] <= '2017-11-30'
xx = x1 & x2
index = xx.values == True
index1 = xx.values == False
x_train = Data.iloc[index, 1:15]
y_train = Data.iloc[index, [15]]
x_test = Data.iloc[index1, 1:15]
y_test = Data.iloc[index1, [15]]# 数据标准化
scaler = StandardScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
##支持向量机模型
from sklearn import svmclf = svm.SVC()
clf.fit(x_train, y_train)
result = clf.predict(x_test)
sc = clf.score(x_train, y_train)
# print(sc)print(sc)result = pd.DataFrame(result)
# 提取预测样本的交易日期
ff = Data.iloc[index1, 0]
# 将预测结果与实践结果整合在一起,进行比较
pm1 = {'交易日期': ff.values, '预测结果': result.iloc[:, 0].values, '实际结果': y_test.iloc[:, 0].values}
result1 = pd.DataFrame(pm1)
z = result1['预测结果'].values - result1['实际结果'].values
R = len(z[z == 0]) / len(z)
# 预测的准确率
print(R)
print(result1)
list1 = result1['交易日期']
list2 = result1['预测结果']
list3 = result1['实际结果']
D = {'time': list1, 'predict': list2, 'true': list3}
D = pd.DataFrame(D)
D.to_excel('DD.xlsx')

main.py

# -*- coding: utf-8 -*-
"""
Created on Wed Nov 27 14:03:16 2020
@author: nuoyanli
"""import Ind
import pandas as pddata = pd.read_excel('./数据/data.xlsx')
MA = Ind.MA(data, 5, 10, 20)
macd = Ind.MACD(data)
kdj = Ind.KDJ(data, 9)
rsi6 = Ind.RSI(data, 6)
rsi12 = Ind.RSI(data, 12)
rsi24 = Ind.RSI(data, 24)
bias5 = Ind.BIAS(data, 5)
bias10 = Ind.BIAS(data, 10)
bias20 = Ind.BIAS(data, 20)
obv = Ind.OBV(data)
y = Ind.cla(data)
# 将计算出的技术指标与交易日期以及股价的涨跌趋势利用字典整合在一起
pm = {'交易日期': data['Trddt'].values}
PM = pd.DataFrame(pm)
DF = {'MA5': MA[0], 'MA10': MA[1], 'MA20': MA[2], 'MACD': macd,'K': kdj[0], 'D': kdj[1], 'J': kdj[2], 'RSI6': rsi6, 'RSI12': rsi12,'RSI24': rsi24, 'BIAS5': bias5, 'BIAS10': bias10, 'BIAS20': bias20, 'OBV': obv}
DF = pd.DataFrame(DF)
s1 = PM.join(DF)
y1 = {'涨跌趋势': y}
ZZ = pd.DataFrame(y1)
s2 = s1.join(ZZ)
# 去掉空值
ss = s2.dropna()
# 将ss中第6列不为0的值提取出来,存放到Data中
Data = ss[ss.iloc[:, 6].values != 0]
print(Data)
Data.to_excel('res.xlsx')

数据融合课程设计——案例二 股票价格涨跌趋势预测相关推荐

  1. 机器人(ROS)理实融合课程设计与开展

    机器人(ROS)理实融合课程设计与开展 参赛信息表 姓名 *** 性别 男 教龄 5年 电话 *************** 邮箱 ***************** 单位 常熟理工学院 院系/部门 ...

  2. 机电一体化PLC毕业设计、课程设计案例分享/液压、电梯、洗衣机、送料控制、步进电动机、装瓶流水线、大小球分拣传送、饮料罐装、自动售货机、立体车库、洗衣机、喷泉、机械手、卧式镗床、温度控制、供水系统……

    机电一体化PLC毕业设计.课程设计案例共有1000多套,部分目录如下: 双缸四柱液压机的液压系统设计和PLC控制[说明书(论文)+CAD (PLC控制框图+PLC输入输出接线图+液压系统原理图 机电一 ...

  3. Java课程设计题目二:保存计算过程的计算器

    Java课程设计题目二:保存计算过程的计算器 1 设计要求 参考Windows 操作系统提供的计算器设计一个实用的计算器,要求除了具有普通的计算功能外,还具有保存计算过程的功能. ①单击计算器上的数字 ...

  4. 弹性方法计算内力例题_长江大学土木工程专业2008年钢筋混凝土楼盖课程设计案例...

    长江大学土木工程专业2008年钢筋混凝土楼盖课程设计案例 钢筋混凝土楼盖课 程 设 计 指 导 书长江大学2008 年 8 月目 录第 1 节 设计任务书一.设计任务二.设计内容三.设计条件四.进度安 ...

  5. c语言课程设计作业五子棋,c语言课程设计案例-五子棋.ppt

    <c语言课程设计案例-五子棋.ppt>由会员分享,可在线阅读,更多相关<c语言课程设计案例-五子棋.ppt(25页珍藏版)>请在人人文库网上搜索. 1.C语言综合编程训练,C程 ...

  6. 数据可视化课程设计——北京新发地官网数据分析与可视化展示【内容在jupyter notebook里面展示】包含数据爬取与可视化分析详解

    目录 一.课题说明 1.1.设计原因: 1.2.设计目标: 1.3.开发环境: 1.4.爬取网站链接 二.准备工作 2.1.数据获取: 2.2.爬取的数据说明: 2.3.爬虫程序设计的思路: 三.详细 ...

  7. 桂林电子科技大学操作系统课程设计(二)

    桂林电子科技大学操作系统课程设计(project1) 一.项目设计目的 熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的可执行程序装入到内存,建立内核进程并运行的实现技术. 二.项目设计要求 ...

  8. 计算机组成课程设计之二——微程序控制的存储器读写系统设计

    如果部分电路图显示不清楚可放大页面后查看 设计要求 课程设计平台为设计环境提供了容量为256×8的随机存储器.在此基础上,设计相应的外围电路和时序对随机存储器进行读写操作.结构框图如下图所示,设计完成 ...

  9. 大学机械专业减速器毕业设计、课程设计案例/说明书(论文) CAD图纸 三维图 开题报告 任务书 外文翻译…

    单级圆柱齿轮减速器和一级带传动(课设)说明书 CAD图纸 中英 一级减速器课程设计(说明书+CAD装配图.零件图) 一级涡轮蜗杆减速器装配图全套含三维图  说明书 二级圆柱斜齿轮减速器设计(论文+CA ...

最新文章

  1. 和12岁小同志搞创客开发:手撕代码,做一款遥控灯
  2. linux中创建本地yum库,轻松安装Linux软件
  3. document 文挡对象 - JavaScript脚本语言描述
  4. Multiple markers at this line
  5. Python Django 打印执行过的查询语句
  6. 【若依(ruoyi)】Swagger 上传接口
  7. 基于华为云的Django网站部署
  8. Poj 1556 The Doors 计算几何+最短路
  9. (转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询
  10. mysql 解释 游标赋值_Mysql_游标
  11. scala Ordering
  12. spring mvc对异步请求的处理
  13. linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理
  14. 图解大数据 | Hive与HBase详解@海量数据库查询
  15. 小榕flash管理器xp 是什么
  16. matlab怎么截图清晰度,matlab截图到期刊论文中如何保持清晰度的方法
  17. 前端谷歌浏览器显示海康rtsp视频
  18. Typora自定义主题
  19. 一夜黑白——互联网人的悼念方式
  20. c_predicted_api调用模型,初始化创建mxnet预测器不成功,句柄始终等于0

热门文章

  1. JavaWeb实现短信验证
  2. 10、Win下,Qt更改电脑IP、子网掩码和网关
  3. t420i升级固态硬盘提升_给自己的办公设备大升级:购入雷克沙固态移动硬盘,享受高速...
  4. tailWindCSS
  5. Material studio 2017R2生成的模型文件导入WIN10中lammps遇到的小问题
  6. C++习题06(01)函数模板
  7. 移动端区分安卓系统和ios系统
  8. C++ 实现磁盘初始化
  9. 史上最详细LRW数据集、LRW-1000数据集、LRS2数据集、LRS3-TED数据集、OuluVS2数据集介绍
  10. 计算机一级选择题计算题,计算机一级选择题计算一级选择题.doc