广州大学–企业实训–金融分析


Part_1

  • 获取股票数据
  • 数据清洗以及格式化
  • 绘制股票k日均线以及利用双均线进行股票模拟交易

准备工作

1、通过链接获取股票数据:五粮液股票数据
2、将股票数据保存到本地,并存为csv格式。
3、修改文件名称(便于后续代码读取文件)
ps:链接中code可以自行替换成想要的代码编号,同时start和end表示开始日期和结束日期,可自行调整。

主要思想

  • 短期均线和长期均线交会地方为交易时机。

  • 短期曲线从下方突破长期曲线为黄金交叉,适合买入;

  • 短期曲线从上方突破长期曲线为死亡交叉,适合卖出。

代码

import pandas as pd
import datetime# 读取文件数据
def read(file_name):# 读取文件数据array = pd.read_csv(file_name, sep=',')# 创建list存储数据data = [[] for _ in range(len(array))]# 依次存储到list中for i in range(len(data)):data[i].append(change_data(array['日期'][i]))data[i].append(array["开盘价"][i])data[i].append(array["收盘价"][i])data[i].append(array["涨跌幅"][i])data[i].append(array["涨跌百分比"][i])data[i].append(array["最低价"][i])data[i].append(array["最高价"][i])data[i].append(array["成交手数"][i])return data# 将字符类型的时间转换成time类型
def change_data(data):time = datetime.datetime.strptime(data, '%Y/%m/%d').date()return time# k日均线
# 参数为()
def k(index, data, k):# 切片当前天数前k天temp = data[index - k - 1:index - 1]# t存储k天的开盘价t = []# 计算类和s = 0# 添加前k天的开盘价for i in range(k):t.append(temp[i][1])s += t[i]# 返回均值return s / k# 输出当天的数据
def rec_day(index, data, short, long):print(data[index][0])print("当天开盘价:", data[index][1])print("前", short, "天均值为:", k(index, data, short))print("前", long, "天均值为:", k(index, data, long))if __name__ == '__main__':# 读取文件数据shares = read('000858(2).csv')# 初始资金first_money = 10000000# 当前账户余额money = 10000000# 当前持有股票数量num = 0# 判断是否买flag = 0# 记录最后一天的价格last_price = 0# 炒股天数for i in range(1250):# 短期曲线日期short = 5# 长期曲线日期long = 100# 设置开始日期# 如果考虑10日曲线和月曲线,则开始日期要设置得大一点start_day = long + 1# 输出今天的信息rec_day(i + start_day, shares, short, long)# 今天的开盘价recent = shares[i + start_day][1]# 记录最后一天的价格last_price = recent# 前5日均值day_5 = k(i + short + 1, shares, short)day_10 = k(i + long + 1, shares, long)# 此时短期曲线从下方突破长期曲线,为黄金交叉if day_10 > day_5 and flag == 0:# num表示持有股票数num += int(money / recent / 100)# money表示当前余额money -= num * recent * 100flag = 1print("价格合适,冲了", num, "股")# 此时短期曲线从上方向下突破长期曲线,为死亡交叉elif day_10 < day_5 and flag == 1:print("跌了跌了,快卖出!")money += num * recent * 100# 全部卖出num = 0flag = 0else:passprint("账户余额:", int(money))print("持有股数:", num)print('\n')print("最后一天,以当天开盘价出了")money += num * last_price * 100num = 0print("账户余额:", int(money))print("利润:", int(money - first_money))print("利润率:", (((money - first_money) / first_money) * 100), "%")print("持有股数:", num)

结果展示


Part_2

  • 选择一支股票绘制k线图

原理

股市及期货市场中的K线图的画法包含四个数据,即开盘价、最高价、最低价、收盘价,所有的k线都是围绕这四个数据展开,反映大势的状况和价格信息。如果把每日的K线图放在一张纸上,就能得到日K线图,同样也可画出周K线图、月K线图。

步骤

1、.利用tushare工具对股票数据信息进行采集。
2、处理采集的股票数据信息,new_data=开盘价、收盘价、日最低价、日最高价,ma5、ma10、ma20分别表示五日、十日、二十日移动平均线,v_data=当日成交量、五日、十日、二十日平均成交量。
3、绘制K线。
4、绘制MA线,对不同的移动平均线给予不同的颜色。
5、绘制成交量,当天的股价上涨时,成交量柱状图为红色,当天的股价下跌时,成交量柱状图为绿色。
6、将K线、成交量图添加入图表中。
7、将图标保存到本地,打开本地数据页面。

代码_1

import tushare as ts
from pyecharts import options as opts
from pyecharts.charts import Bar, Kline, Line, Grid
from pyecharts.globals import ThemeType
import webbrowser as wb# 股票代码
stock_code = '000858'
# 开始日期
start_date = '2018-07-10'
# 截止日期
end_date = '2018-12-31'# 获取股票交易历史数据
df = ts.get_hist_data(stock_code,start=start_date,end=end_date)
df = df.iloc[::-1]# 开盘价、收盘价、日最低价、日最高价
mount_data = df[['open', 'close', 'low', 'high']]# 取日期
date = list(mount_data._stat_axis.values)new_data = []# 取k线图所需数据,第一个为开盘价,第二个为收盘价,第三为最小值,第四为最大值
for i in range(len(date)):temp_data = []# temp_data保存每日开盘、收盘、最小值、最大值数据for j in mount_data.columns.values:temp_data.append(mount_data.iloc[i][j])# new_data保存temp_datanew_data.append(temp_data)# 当日成交量、5日平均成交量、10日平均成交量、20日平均成交量
v_data = df[['volume', 'v_ma5', 'v_ma10', 'v_ma20']]
ma5 = list(df['ma5'])
ma10 = list(df['ma10'])
ma20 = list(df['ma20'])# 绘制K线
kline = (Kline().add_xaxis(xaxis_data=date)  # 显示x轴日期.add_yaxis("k_线图", y_axis=new_data,# 自定义颜色itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"), )  # y轴展示股票价格.set_global_opts(# 提示框tooltip_opts=opts.TooltipOpts(trigger="axis",axis_pointer_type="cross",background_color="rgba(245, 245, 245, 0.8)",  # rgb表示颜色选择border_width=1,  # 边框宽度选择border_color="#ccc",  # 边框颜色textstyle_opts=opts.TextStyleOpts(color="#000"),  # 文字颜色设置),# 区域缩放datazoom_opts=[  # 设置zoom参数后即可缩放opts.DataZoomOpts(# 调节是否显示组件is_show=False,type_="inside",# 设置两个轴同时缩放xaxis_index=[0, 1],# 范围range_start=0,range_end=100,),opts.DataZoomOpts(is_show=True,xaxis_index=[0, 1],type_="slider",# 基于顶部进行百分比对齐pos_top="90%",range_start=0,range_end=100,),],# 视觉映射配置项visualmap_opts=opts.VisualMapOpts(is_show=False,dimension=2,series_index=[4, 5, 6, 7],is_piecewise=True,pieces=[{"value": 1, "color": "#ec0000"},{"value": -1, "color": "#00da3c"},  # 颜色选择-1:绿色,1:亮红色],),# y轴起始坐标可自动调整yaxis_opts=opts.AxisOpts(is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=0.5)),),# 坐标轴指示器配置项axispointer_opts=opts.AxisPointerOpts(is_show=True,link=[{"xAxisIndex": "all"}],label=opts.LabelOpts(background_color="#777"),  # 轴颜色),# 区域选择组件配置项brush_opts=opts.BrushOpts(x_axis_index="all",brush_link="all", # "all" 表示所有 series 都进行brushLink联动out_of_brush={"colorAlpha": 0.1}, # 图元的颜色的透明度brush_type="lineX",  # 刷子类型),xaxis_opts=opts.AxisOpts(is_scale=True),# 标题title_opts=opts.TitleOpts(title="000858股票2018下半年k线图"),)
)line = (Line().add_xaxis(xaxis_data=date)  # 显示x轴日期.add_yaxis(  # 显示五日均线series_name="MA5",y_axis=ma5,is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=0.5, opacity=0.5), # 宽度和透明度itemstyle_opts=opts.ItemStyleOpts(color="#0004a1"), # 图形的颜色label_opts=opts.LabelOpts(is_show=False),).add_yaxis(  # 显示十日均线# 参数部分同MA5series_name="MA10",y_axis=ma10,is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=0.5, opacity=0.5),itemstyle_opts=opts.ItemStyleOpts(color="#fff401"),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(  # 显示二十日均线# 参数部分同MA5series_name="MA20",y_axis=ma20,is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=0.5, opacity=0.5),itemstyle_opts=opts.ItemStyleOpts(color="#71f401"),label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
)# 绘制成交量图
a = Bar()# 成交量图x轴表示日期
a.add_xaxis(date)for i in v_data.columns.values:data_volume = list(v_data[i])bar = (a.add_yaxis(i,[[j, data_volume[j],-1 if new_data[j][0] > new_data[j][1]  # 根据开盘价与收盘价的比较,跌:-1,涨:1else 1] for j inrange(len(data_volume))],  # 颜色选择-1:绿色,1:亮红色label_opts=opts.LabelOpts(is_show=False),xaxis_index=1,yaxis_index=1).set_global_opts(# 取消x轴的显示xaxis_opts=opts.AxisOpts(type_="category",is_scale=True,grid_index=1,boundary_gap=False,axisline_opts=opts.AxisLineOpts(is_on_zero=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),axislabel_opts=opts.LabelOpts(is_show=False),split_number=20,min_="dataMin",max_="dataMax",),legend_opts=opts.LegendOpts(selected_mode="single", pos_right="30%", pos_top="70%")))overlap_kline_line = kline.overlap(line)grid_chart = Grid(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))# 将K线添加进图标中
grid_chart.add(overlap_kline_line,# 设置位置grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%"),
)# 将成交量图添加进下半部分
grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="75%", height="16%"),
)# 保存到本地
grid_chart.render("kline_test.html")
# 打开本地数据页面
wb.open("kline_test.html")

结果展示_1

  • K线图【[000858]2018-07-16~2018-12-27】完整图:

  • K线图【[000858]2018-07-16~2018-12-27】仅K线图:

  • K线图【[000858]2018-07-16~2018-12-27】仅MA5与成交量MA5图:

  • 单日成交量、开盘价、收盘价、最低价、最高价、MA5、MA10、MA20信息显示:

代码_2

# -*- coding: utf-8 -*-
# @Time    : 2021/1/7 10:34
# @Author  : Joker
# @Site    :
# @File    : window.py
# @Software: PyCharm
# coding: utf-8import requests
import pandas as pd
import matplotlib.pyplot as plt
from pyecharts.charts import Kline, Bar, Grid, Line
from pyecharts import options as opts
import webbrowser as wb# 股票代码
stock_code = '1000858'
# 开始日期
start_date = '20150815'
# 截止日期
end_date = '20210105'# 设置数据url
url = 'http://quotes.money.163.com/service/chddata.html?code={}&start={}&end={}'.format(stock_code, start_date,end_date)# 从网上获取股票交易历史数据
online_data = requests.get(url)# 根据股票代码设置csv文件名称
csv_file_name = 'stock_{}.csv'.format(stock_code)# 将数据保存到本地csv文件
with open(csv_file_name, "wb") as f:f.write(online_data.content)# 读取股票数据
stock_data = pd.read_csv(csv_file_name, encoding='gb2312')# 将股票数据按照日期进行排序
stock_data = stock_data.sort_values(by=["日期"], ascending=[True], inplace=False)# 清洗掉收盘价<0的股票数据
stock_data_cleared = stock_data[stock_data['收盘价'] > 0]# 获取掉股票名称
stock_name = '五粮液'# 计算股票数据长度
row_count = stock_data_cleared.shape[0]
# 计算股票数据行数
x_tick_interval = int(row_count / 20)
x_tick_index = range(0, row_count, x_tick_interval)# 设置窗口尺寸
plt.figure(figsize=(12, 6))# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 上半部分图片
plt.subplot(211)
# 绘制收盘价的线条
plt.plot(range(row_count), stock_data_cleared['收盘价'], color="red", linewidth=0.2)
plt.plot(range(row_count), stock_data_cleared['开盘价'], color="blue", linewidth=0.2)
# 展示横轴时间
plt.xticks(x_tick_index, "")
# 收盘价范围
plt.yticks(range(0, 360, 20))
plt.xlabel("时间")
plt.ylabel("收盘价")
# 设置背景网格
plt.grid(linewidth=0.5, color="black", alpha=0.5)
# 展示股票名称和代码
plt.title(stock_name + "\n\n股票代码" + stock_code)# 下半部分图片
plt.subplot(212)
# 绘制成交量的柱状图
plt.bar(range(row_count), stock_data_cleared["成交量"], color="#008080")
# 显示x轴坐标
plt.xticks(x_tick_index, stock_data_cleared.iloc[x_tick_index, 0], rotation=70)
# 背景网格线
plt.grid(linewidth=0.5, color="#008080", alpha=0.5)
# 调整子图布局
plt.subplots_adjust(hspace=0.1)
# y轴注释
plt.ylabel("成交量")
# 展示图片
# plt.show()stock_data_extracted = stock_data_cleared[["开盘价", "收盘价", "最低价", "最高价", "成交量", "日期"]]# 计算日均线
# 参数为(数据源,天数)
def moving_average(data, day_count):# 截取数据源的时间列data = data.values[:, 0]result = []for i in range(len(data)):start_day_index = i - day_count + 1# 检测开始日期小于0的情况if start_day_index <= 0:start_day_index = 0# 调整后的日期即准确的天数justified_day_count = i - start_day_index + 1# 求均值mean = data[start_day_index:i + 1].sum() / justified_day_countresult.append(round(mean, 2))return result# 绘制k线
kline = (Kline().add_xaxis(stock_data_extracted["日期"].values.tolist())  # 展示x轴日期.add_yaxis("", stock_data_extracted.iloc[:, :4].values.tolist(),itemstyle_opts=opts.ItemStyleOpts(# 自定义颜色color="#ec0000",color0="#00da3c",border_color="#8A0000",border_color0="#008F28", ))  # 展示y轴成交量.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True, is_show=False),# axis_opts=opts.AxisOpts(is_scale=True,min_=0), #y轴起始坐标可以设为0yaxis_opts=opts.AxisOpts(is_scale=True),  # y轴起始坐标可自动调整# 绘制上半部分价格的图# 左边注释title_opts=opts.TitleOpts(title="价格", subtitle=stock_name + "\n" + stock_code, pos_top="20%"),axispointer_opts=opts.AxisPointerOpts(is_show=True,link=[{"xAxisIndex": "all"}],label=opts.LabelOpts(background_color="#777"),),# 设置缩放datazoom_opts=[  # 设置zoom参数后即可缩放opts.DataZoomOpts(# 显示组件is_show=True,type_="inside",# 设置两个轴同时缩放xaxis_index=[0, 1],# 范围range_start=0,range_end=100,),opts.DataZoomOpts(is_show=True,xaxis_index=[0, 1],type_="slider",# 基于顶部进行百分比对齐pos_top="90%",range_start=0,range_end=100,),],# 视觉映射配置项visualmap_opts=opts.VisualMapOpts(is_show=False, type_='color', dimension=None, series_index=[3, 5],is_piecewise=False,pieces=[{"value": 1, "color": "#ec0000"},{"value": -1, "color": "#00da3c"}, ], ),)
)# 绘制开盘线、收盘线等
line = (Line()# 5日均线# 横轴为日期.add_xaxis(xaxis_data=stock_data_extracted["日期"].values.tolist())# 纵轴为收盘价.add_yaxis(series_name="MA5",y_axis=moving_average(stock_data_extracted[["收盘价"]], 5),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='blue'),)# 30日均线.add_yaxis(series_name="MA30",y_axis=moving_average(stock_data_extracted[["收盘价"]], 30),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='pink'))# 60日均线.add_yaxis(series_name="MA60",y_axis=moving_average(stock_data_extracted[["收盘价"]], 60),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='green'),)# 120日均线.add_yaxis(series_name="MA120",y_axis=moving_average(stock_data_extracted[["收盘价"]], 120),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color='black'),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
)# 将K线图和移动平均线显示在一个图内
kline.overlap(line)# 成交量的数据
x = stock_data_extracted[["日期"]].values[:, 0].tolist()
y = stock_data_extracted[["成交量"]].values[:, 0].tolist()data_volume = []y_open = []
y_close = []
x_open = []
x_close = []for i in range(len(stock_data_extracted)):open_price = stock_data_extracted[["开盘价"]].values[i]close_price = stock_data_extracted[["收盘价"]].values[i]c = []if open_price > close_price:y_open.append(stock_data_extracted[["成交量"]].values[i])x_open.append(i)else:y_close.append(stock_data_extracted[["成交量"]].values[i])x_close.append(i)bar = (Bar()# 格式参数同上半部分.add_xaxis(x).add_yaxis("成交量", y, label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="#ec0000")).set_global_opts(title_opts=opts.TitleOpts(title="成交量", pos_top="70%"),legend_opts=opts.LegendOpts(is_show=False), )
)# 使用网格将多张图标组合到一起显示
grid_chart = Grid()# 将k线添加进图表中
grid_chart.add(kline,grid_opts=opts.GridOpts(pos_left="15%", pos_right="8%", height="55%"),
)# 将成交量图添加进下半部分
grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="15%", pos_right="8%", pos_top="70%", height="20%"),
)# 保存到本地
grid_chart.render("d:/kline_test.html")
# 打开本地数据页面
wb.open("d:/kline_test.html")

结果展示_2


ps:代码功能类似,展现主题不一样


Part_3

  • 对股票数据进行分析,得到股票的特征值
  • 对数据集进行训练集、测试集划分,并用感知机算法进行股票涨跌预测

步骤

  1. 打标签:
    股票当天的涨跌幅表示了该股票在当天是涨还是跌。如果该股票当天的涨跌幅大于0,则该股票在当天为涨,否则为跌。所以我们根据每天的涨跌幅来进行打标签,如果涨跌幅大于0则打标签1,否则打标签0。
  2. 寻找特征变量
    我们将前一天的收盘价和当天的开盘价作为特征变量。所以我们从第2天的数据开始,将前一天的收盘价和当天的开盘价作为两维的数据集x,将对应的标签值作为标签集y。
  3. 训练集、测试集划分
    我们使用train_test_split()函数将数据集x,和标签集y划分为训练数据集X_train、训练标签值Y_train、测试数据集X_test和测试标签集Y_test。
  4. 运行感知机算法
    使用sklearn里的Perceptron算法库进行预测。预测结果为y_pred,y_pred是预测的标签值,最后将y_pred与真实的y_test进行比对,得出正确率。

代码

from sklearn.linear_model import Perceptron
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as npdata = pd.read_csv("000858.csv")
data['label'] = None# 打标签
for i in range(len(data)):if data.loc[i, '涨跌幅'] > 0:data.loc[i, 'label'] = 1else:data.loc[i, 'label'] = 0# 以前一天的收盘价、今天的开盘价作为特征变量
x = []
y = []
for i in range(1, len(data)):x.append(np.array([data.loc[i - 1, '收盘价'], data.loc[i, '开盘价']]))y.append(np.array(data.loc[i, 'label']))# 划分训练集与测试集
X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, stratify=None, shuffle=False)# 调用感知机算法
ppn = Perceptron()
ppn.fit(X_train, Y_train)
# 预测涨跌
y_pred = ppn.predict(X_test)
# 正确预测个数
true_classified_sum = 0
for i in range(len(Y_test)):if y_pred[i] == Y_test[i]:true_classified_sum += 1Accuracy = round(true_classified_sum / len(Y_test), 4)
# 输出正确率
print("Accuracy: ", Accuracy * 100, "%")

结果展示

ps:训练前需要自行打标签得到数据文件


Part_4

构建神经网络模型,对股票数据进行训练,将训练后的模型用于预测后续股票行情。

步骤

1、 读取文件数据,并按照列顺序进行整理
2、 将源数据分割为训练集、测试集
3、 建立训练模型,对模型进行训练
4、 拟合训练集的数据,对测试集数据进行预测
5、 计算几个误差参数,如mse、mae、rmse等
6、 绘制训练集、测试集的图像

代码

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import Adam
from sklearn.model_selection import train_test_split# 读取股票数据文件
def read(file_name):file = pd.read_csv(file_name)stock = file[["开盘价", "涨跌幅", "最高价", "最低价", "涨跌百分比", "收盘价"]]return stockdef train(x, y):# 分割训练集和测试集 8:2x_train, x_test, y_train, y_test = train_test_split(np.array(x), np.array(y), shuffle=False,test_size=0.3)# 建立训练模型model = Sequential()# 中间层:20model.add(Dense(20, input_dim=5, init='uniform', activation='relu'))# 输出层: 1model.add(Dense(1))# 定义损失函、优化器model.compile(loss='mean_squared_error', optimizer='Adam')# 训练模型10000次model.fit(x_train, y_train, nb_epoch=10000, batch_size=50)# 预测训练集的数据y_train_predict = model.predict(x_train)# 预测测试集的数据y_test_predict = model.predict(x_test)return y_train, y_train_predict, y_test, y_test_predict# 绘制训练数据图
def draw_train(y_train, y_train_predict):# 绘图:拟合训练集的数据data = pd.concat([pd.DataFrame(y_train), pd.DataFrame(y_train_predict)], axis=1)data.iloc[:, 0].plot(figsize=(18, 9))data.iloc[:, 1].plot(figsize=(18, 9))plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.legend(('真实数据', '拟合数据'), loc='upper right', fontsize='20')plt.title("训练拟合", fontsize='30')  # 添加标题plt.ylabel('收盘价')plt.show()# 绘制测试数据图
def draw_test(y_test, y_test_predict):# 绘图:预测测试集的数据data = pd.concat([pd.DataFrame(y_test), pd.DataFrame(y_test_predict)], axis=1)data.iloc[:, 0].plot(figsize=(18, 9))data.iloc[:, 1].plot(figsize=(18, 9))plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.legend(('真实数据', '预测数据'), loc='upper right', fontsize='20')plt.title("五粮液预测", fontsize='30')plt.ylabel('收盘价')plt.show()def cal(y_test, y_test_predict):# 计算差值sub = y_test_predict - y_test# 根据公式计算三个参数y_rmse = np.sqrt(np.sum(sub ** 2) / y_test.shape[0])y_mse = np.sum(sub ** 2) / y_test.shape[0]y_mae = np.sum(abs(sub)) / y_test.shape[0]# 更新delsub = y_test_predict - y_test.mean()# 计算平方和y_get_SSR = np.sum(sub ** 2)# 更新delsub = y_test - y_test.mean()# 计算平方和y_get_SST = np.sum(sub ** 2)# 计算R_squareR2 = y_get_SSR / y_get_SSTprint("R2:", R2)print("均方根误差rmse:", y_rmse)print("绝对误差mae:", y_mae)print("均方误差mse:", y_mse)if __name__ == '__main__':# 读取文件stock = read("000858.csv")# 归一化# stock = (stock - stock.min()) / (stock.max() - stock.min())# 特征列,(0,n-1)相当于昨天的X = stock.iloc[:-1, :-1]# 标签列,(1,n)相当于今天的Y = stock.iloc[1:, -1]# 训练y_train, y_train_predict, y_test, y_test_predict = train(X, Y)# 计算三个参数cal(y_test, y_test_predict)# 画训练拟合图draw_train(y_train, y_train_predict)# 画预测图draw_test(y_test, y_test_predict)

结果展示

训练结果:

训练集拟合图:

预测测试集:

广州大学--金融股票数据分析相关推荐

  1. Python金融股票和量化分析三方库汇总

    在公众号「python风控模型」里回复关键字:学习资料,免费领取. 这篇文章为定量金融(Quants Finance)收集一份完整的python第三方包列表. 数据源Data Sources yfin ...

  2. 金融科技、算法交易、量化金融必读书:Python金融大数据分析第2版

    银行本质上是技术公司. --胡戈•班齐格 近来,Python无疑是金融业的重要策略性技术平台之一.到2018年底,这已经不再是个问题:全世界的金融机构现在都尽最大努力利用Python及其强大的数据分析 ...

  3. Python项目实战:数据可视化与股票数据分析-关东升-专题视频课程

    Python项目实战:数据可视化与股票数据分析-333人已学习 课程介绍         本视频内容包括使用Matplotlib绘制图表.MySQL数据库.Python访问数据库和Lambda表达式. ...

  4. 分析mysql股票数据_股票数据分析(一)数据获取

    前段时间开始做股票数据分析的业余项目,希望能提高自己对大型数据量的处理能力.目前大致的想法是用python的tushare模块获取数据,用Java的框架做发布. 1.Tushare模块的说明 tush ...

  5. python金融大数据分析笔记----第十章 2(风险测量)

    10.4 风险测量 VaR CVaR 10.4.1. 风险价值(Var) VaR(Value at Risk,风险价值或风险溢价)是度量一项投资或投资组合可能产生的下跌风险的方法,它描述的是在一定的概 ...

  6. 我的Python心路历程 第十期 (10.3 雅虎金融股票day数据转化为csv)

    我的Python心路历程 第十期 (10.3 雅虎金融股票day数据转化为csv) 上期实践了如何获取通信达数据,但先天不足是无法获取Adj Close的取值,今天这一实践课堂可以解决这个忧虑. 首先 ...

  7. 基于Python实现成交量的股票数据分析系统【100010993】

    基于成交量的股票数据分析系统 1. 数据获取 1.1. 实验环境搭建 系统及使用的语言: Windows 10 专业版 1903 操作系统版本: 18362.356 Python 3.7.3 64-b ...

  8. 计算机编程书籍-Python金融大数据分析

    Python金融大数据分析 [德] 伊夫·希尔皮斯科(Yves Hilpisch) 著,姚军 译 ISBN:9787115521330 包装:平装 开本:16开 正文语种:中文 出版社:人民邮电出版社 ...

  9. python金融大数据分析视频_Python金融大数据分析 PDF 全书超清版

    给大家带来的一篇关于Python相关的电子书资源,介绍了关于Python金融.大数据分析方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小47.8 MB,希尔皮斯科编写,目前豆瓣.亚马逊. ...

  10. python金融数据分析电子版_python 金融大数据分析 pdf

    书籍:Python金融大数据分析 Python for Finance_ Mastering Data-Driven Finance 2nd - 2019.pdf 简介 金融业最近以极高的速度采用了P ...

最新文章

  1. CISSP考前总复习
  2. python设计模式整理
  3. c语言pID程序怎么设计,51单片机PID的算法实现程序C语言
  4. Python基础——正则2(0503)
  5. rabbitmq如何保证消息不被重复消费_RabbitMQ保证消息可靠投递与消费的正确使用姿势...
  6. Hive系列(一)metastore的认证和授权
  7. python 打印皮卡丘_Python干掉了97%的办公软件?
  8. 自主品牌语音交互性能测评,荣威RX5反应更快,博越变暖男
  9. mysql个人记账系统_个人记账系统
  10. js 返回值提示框不提示
  11. PS基础全讲和使用技巧(二)
  12. Power query (Power BI)一步到位傻瓜式合并工作簿,史上最好用
  13. 介绍5款非常棒的移动自动化测试工具
  14. super oj p528
  15. python二手房价格预测_分析香港2万6千套在售二手房数据,1000万的居然有那么多...
  16. 恶意网站可利用浏览器扩展 API,窃取浏览器数据
  17. stata自变量滞后
  18. win10+GPU安装-UHD Graphics 630驱动安装
  19. android 外置sd卡,安卓手机,让你的外置sd卡瞬间变成内置sd卡!
  20. hadoop下计算机网络安全设计与实现,基于PKI技术的网络安全平台设计研究

热门文章

  1. 针对win2003服务器的恶意代码攻击
  2. SGE(集群任务管理系统)常用操作命令
  3. 【Axure高保真原型】拖拉拽元件库
  4. php收付同分账,php微信分账功能 —— app支付
  5. 第三方自动投票软件制作教程
  6. php判断某天星期几,php怎么判断指定日期是星期几?
  7. 【线性代数】A为方阵,当存在B使得 AB=E ,证明BA=E
  8. 红外焦平面阵列调试传递函数测试方法
  9. 【DX12】DirectX Math库 Vector和Matrix类型 XMVECTOR、XMMATRIX
  10. 连续没有空格英文或数字换行解决方案