【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】


目录

  • 【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】
  • 一、设计要求
  • 二、设计思路
    • 预测股票走势
    • 马科维茨资产组合理论
    • 时间序列分析
    • 配对交易
    • 回测三因子策略


一、设计要求

选三只股票2024年2月1日至2024年5月30日的数据进行如下分析:

1.分析三只股票的价格走势,并对未来价格走势进行预测。
(1)从公司、行业、宏观角度进行分析:
(2)从技术指标角度定性预测其走势并。

2.对所选数据,利用马科维茨资产组合理论求其最小方差前沿。
(1)对其收益率进行作图和相关系数分析;(5分)
(2)绘制最小方差前沿曲线;
(3)将数据分为测试集与训练集,用训练集的数据得到最优资产配比,利用测试集来验证最优资产配比是否有效并进行分析。

3.选取其中一只股票进行时间序列分析
(1)对股票数据进行分析,建立适合的模型
(2)对该股票未来一个月的价格进行预测

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

4.以上述股票进行配对交易
(1)设定形成期和交易期,在形成期对两只股票对数价格进行协整检验
(2)找出配对比例和配对价差,计算价差的平均值和标准差;
(3)设定阈值,构造开平仓区间;
(4)模拟交易并进行分析。

5.使用“聚宽”量化投资平台,回测三因子策略,并对回测结果进行分析。
(1)选取2024年2月1日至2024年5月30日为回测区间,展示三因子策略的回测收益图。
(2)分析三因子策略的回测收益,包含策略收益、策略阿尔法值、贝塔值、夏普比率、最大回撤等指标。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈


二、设计思路

预测股票走势

数据预处理

转换交易日期为datetime格式

df1['trade_date'] = pd.to_datetime(df1['trade_date'], format='%Y%m%d')
df2['trade_date'] = pd.to_datetime(df2['trade_date'], format='%Y%m%d')
df3['trade_date'] = pd.to_datetime(df3['trade_date'], format='%Y%m%d')

这里的pd.to_datetime函数将三只股票的交易日期字段从字符串格式转换为datetime格式。这一步非常重要,因为它将日期字符串转换为pandas可以理解和操作的日期时间对象,这对后续的时间序列分析非常有用。

设置交易日期为索引

df1.set_index('trade_date', inplace=True)
df2.set_index('trade_date', inplace=True)
df3.set_index('trade_date', inplace=True)

接着将交易日期设置为数据框的索引。这一步的目的是为了方便后续的时间序列操作,比如绘图和时间序列分析。通过将日期设为索引,可以更容易地按照时间顺序来处理和展示数据。

绘制股票收盘价格走势

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

plt.figure(figsize=(14, 7))
plt.plot(df1['close'], label='平安银行')
plt.plot(df2['close'], label='国农科技')
plt.plot(df3['close'], label='世纪星源')
plt.title('股票收盘价格走势')
plt.xlabel('日期')
plt.ylabel('收盘价格')
plt.legend()
plt.show()

在这里插入图片描述

绘制了三只股票的收盘价格走势图:

1.创建绘图窗口

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

   plt.figure(figsize=(14, 7))plt.figure函数创建一个新的绘图窗口,并设置图形的大小为14x7英寸。

2.绘制每只股票的收盘价格

   plt.plot(df1['close'], label='平安银行')plt.plot(df2['close'], label='国农科技')plt.plot(df3['close'], label='世纪星源')

plt.plot函数绘制三只股票的收盘价格曲线,并使用label参数为每条曲线添加标签。

3.设置图形标题和轴标签

   plt.title('股票收盘价格走势')plt.xlabel('日期')plt.ylabel('收盘价格')plt.title函数设置图形的标题,plt.xlabel和plt.ylabel函数分别设置X轴和Y轴的标签。

4.添加图例

   plt.legend()plt.legend函数显示图例,以便区分不同股票的价格走势。

5.显示图形

   plt.show()plt.show函数显示图形。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

马科维茨资产组合理论

收益率作图和相关系数分析

plt.figure(figsize=(14, 7))
plt.plot(returns)
plt.title('股票每日收益率')
plt.xlabel('日期')
plt.ylabel('收益率')
plt.legend(returns.columns)
plt.show()

这部分代码绘制了三只股票的每日收益率图表,以直观地展示不同股票在各个时间点上的收益变化情况。
在这里插入图片描述

计算相关系数矩阵

corr_matrix = returns.corr()
print('相关系数矩阵:')

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

在这里插入图片描述

2.2.3 最小方差组合

mean_returns = returns.mean()
cov_matrix = returns.cov()
num_assets = len(returns.columns)
args = (mean_returns, cov_matrix)def min_variance(weights):return portfolio_statistics(weights, mean_returns, cov_matrix)[1]# 略....
# 略....# 略....
# 略....opt_results = minimize(min_variance, init_weights, method='SLSQP', bounds=bounds, constraints=constraints)
min_var_weights = opt_results.xmin_var_return, min_var_volatility, _ = portfolio_statistics(min_var_weights, mean_returns, cov_matrix)

通过优化函数minimize求解最小方差组合的权重。设置约束条件保证权重和为1,设置权重边界在0到1之间。最终得到最小方差组合的权重、收益和波动率。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

2.2.4绘制最小方差前沿曲线

def efficient_frontier(mean_returns, cov_matrix, returns_range):efficient_results = []for ret in returns_range:constraints = ({'type': 'eq', 'fun': lambda x: portfolio_return(x, mean_returns) - ret},{'type': 'eq', 'fun': lambda x: np.sum(x) - 1})result = minimize(lambda w: portfolio_volatility(w, cov_matrix), init_weights, method='SLSQP', bounds=bounds, constraints=constraints)efficient_results.append(result)return efficient_results# 略....
# 略....plt.figure(figsize=(14, 7))
plt.scatter(efficient_volatilities, returns_range, c='blue', marker='o')
plt.scatter(min_var_volatility, min_var_return, c='red', marker='*', s=100)
plt.title('最小方差前沿曲线')
plt.xlabel('波动率')
plt.ylabel('收益率')
plt.show()

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

print(f'训练集最优资产配比: {train_min_var_weights}')
print(f'测试集投资组合的预期收益率: {test_portfolio_return}')
print(f'测试集投资组合的预期波动率: {test_portfolio_volatility}')

时间序列分析

代码的目的是绘制平安银行的收盘价格时间序列图。通过将交易日期作为横坐标,收盘价格作为纵坐标,直观展示了股票价格随时间的变化情况。这一步有助于初步了解股票价格的趋势和波动情况。
在这里插入图片描述

建立ARIMA模型
使用ARIMA模型对平安银行的股票价格进行拟合。ARIMA(df1[‘close’], order=(5, 1, 0)):指定ARIMA模型的参数(p, d, q),其中p=5表示自回归部分的阶数,d=1表示差分次数,q=0表示移动平均部分的阶数。

使用ARIMA模型进行拟合
model = ARIMA(df1['close'], order=(5, 1, 0))
model_fit = model.fit()

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

在这里插入图片描述

plt.figure(figsize=(14, 7))
plt.plot(df1['close'], label='原始数据')
plt.plot(model_fit.fittedvalues, color='red', label='拟合值')
plt.title('平安银行收盘价格与 ARIMA 模型拟合结果')
plt.xlabel('日期')
plt.ylabel('收盘价格')
plt.legend()
plt.show()

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

绘制了原始数据和ARIMA模型拟合值的对比图。通过可视化展示模型的拟合效果,可以直观地看到模型是否能够较好地捕捉股票价格的变化趋势。
在这里插入图片描述

预测未来价格

预测未来一个月的价格

forecast_steps = 30
forecast = model_fit.forecast(steps=forecast_steps)

在这里,使用ARIMA模型预测未来30天(一个月)的股票价格。

model_fit.forecast(steps=forecast_steps):生成未来30天的价格预测值。

绘制预测结果

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

plt.figure(figsize=(14, 7))
plt.plot(df1['close'], label='原始数据')
plt.plot(pd.date_range(start=df1.index[-1], periods=forecast_steps, freq='D'), forecast, color='red', label='预测值')
plt.title('平安银行未来一个月的价格预测')
plt.xlabel('日期')
plt.ylabel('收盘价格')
plt.legend()
plt.show()

在这里插入图片描述

绘制了原始数据和预测值的对比图。通过这张图,可以直观地看到模型对未来一个月股票价格的预测情况。

1.绘制时间序列图:直观展示平安银行股票收盘价格的历史变化情况。
2.建立ARIMA模型:对股票数据进行拟合,并评估模型的拟合效果。
3.预测未来价格:使用ARIMA模型预测未来一个月的股票价格,并绘制预测结果图。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

设计逻辑清晰,步骤完整,通过对股票价格进行时间序列分析和预测,为进一步的投资决策提供了科学依据。

配对交易

log_price1 = np.log(df1_formation)
log_price2 = np.log(df2_formation)

这里使用自然对数转换股票的收盘价格,以便进行协整检验。对数转换有助于平滑时间序列数据,并使得结果更具稳定性。

协整检验

score, pvalue, _ = coint(log_price1, log_price2)
print(f'协整检验 p-value: {pvalue}')

在这里插入图片描述
计算价差的平均值和标准差

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

mean_spread = spread.mean()
std_spread = spread.std()
print(f'配对比例: {hedge_ratio}')
print(f'价差平均值: {mean_spread}')
print(f'价差标准差: {std_spread}')

在这里插入图片描述
通过计算价差的平均值和标准差,可以得到价差的统计特性。这些统计特性在后续的开平仓决策中非常重要。

1.设定形成期和交易期:划分时间段用于计算配对比例和价差的统计特性,以及进行实际交易。
2.计算对数价格并进行协整检验:确定两只股票是否存在长期均衡关系。
3.找出配对比例和价差,计算价差的统计特性:通过线性回归计算配对比例,并得到价差的平均值和标准差。

这些步骤为后续的配对交易策略提供了坚实的基础,特别是在确定开平仓区间和进行模拟交易时,这些统计特性将发挥关键作用。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

回测三因子策略

合并收益率数据

returns = pd.concat([df1['returns'], df2['returns'], df3['returns']], axis=1)
returns.columns = ['平安银行', '国农科技', '世纪星源']
returns = returns.dropna()

合并了三只股票的收益率数据,并去掉了缺失值。这样可以得到一个包含所有股票收益率的完整数据框,方便后续的计算和分析。
2. 三因子策略回测

平等分配权重

weights = np.array([1/3, 1/3, 1/3])
returns['组合收益'] = returns.dot(weights)

这里三只股票在组合中的权重相等,每只股票的权重为1/3,并计算组合的收益率。展示三因子策略的回测收益图

在这里插入图片描述

这里使用平安银行作为市场基准,通过线性回归计算组合收益与市场收益之间的关系,得到阿尔法值和贝塔值。

add_constant函数为回归模型添加常数项。
OLS函数进行线性回归分析,得到回归模型。
alpha表示策略的超额收益,beta表示策略的市场风险。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

计算夏普比率

sharpe_ratio = returns['组合收益'].mean() / returns['组合收益'].std() * np.sqrt(252)

夏普比率用于衡量单位风险所获得的超额回报。这里使用年化收益率和标准差来计算夏普比

print(f'策略收益: {cumulative_returns[-1]}')
print(f'阿尔法值: {alpha}')
print(f'贝塔值: {beta}')
print(f'夏普比率: {sharpe_ratio}')
print(f'最大回撤: {max_drawdown}')

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 量化策略 ” 获取。👈👈👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/357825.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode】520. 检测大写字母

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如 “USA” 。单词中所有字母都不是大写,比如 “le…

【科普】半导体制造过程的步骤、技术、流程

在这篇文章中,我们将学习基本的半导体制造过程。为了将晶圆转化为半导体芯片,它需要经历一系列复杂的制造过程,包括氧化、光刻、刻蚀、沉积、离子注入、金属布线、电气检测和封装等。 基本的半导体制造过程 1.晶圆(Wafer&#xf…

LabVIEW电池管理系统测试平台

随着混合动力汽车技术的快速发展,对电池管理系统(BMS)的测试需求显著增加。利用LabVIEW软件开发了一款电池管理系统测试平台,通过模拟电池行为验证BMS的控制策略,从而降低成本、缩短开发周期,并提高整车的能…

一五三、MAC 安装MongoDB可视化工具连接

若没有安装brew包管理工具,在命令行输入安装命令 /bin/bash -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”上面步骤安装完成后,开始安装MongoDB,输入安装命令: brew tap mongodb/brewbrew u…

FFmpeg源码:ff_ctz / ff_ctz_c函数分析

一、ff_ctz函数的作用 ff_ctz定义在FFmpeg源码目录的libavutil/intmath.h 下: #ifndef ff_ctz #define ff_ctz ff_ctz_c /*** Trailing zero bit count.** param v input value. If v is 0, the result is undefined.* return the number of trailing 0-bits*/…

网络编程篇:HTTP协议

一.预备知识 在客户端访问服务端时,要用ipport,但是在日常用户访问服务端的时候,并不会直接使用ip,而是使用域名,比如:百度(www.baidu,com)。 …

图像数字化基础

一、像素 1、获取图像指定位置的像素 import cv2 image cv2.imread("E:\\images\\2.png") px image[291,218] print("坐标(291,218)上的像素的BGR值是:",px) (1)RGB色彩空间 R通道:红色通道 G通道&…

Altera的JTAG电路下载模块为何上下拉电阻,不可不知的秘密

一、FPGA背景信息 当前的FPGA市场上有国际和国产两大体系,国际排名,一直很稳定,国际上前三名Xilinx、Altera、Lattice,国内FPG厂商也在填补空白,低端、中低端市场上发力,替代潮流已在兴起,目前…

Chromium 开发指南2024 Mac篇-开始编译Chromium(五)

1.引言 在之前的指南中,我们已经详细介绍了在 macOS 上编译和开发 Chromium 的准备工作。您学会了如何安装和配置 Xcode,如何下载和配置 depot_tools,以及如何获取 Chromium 的源代码。通过这些步骤,您的开发环境已经搭建完毕&am…

MTANet: 多任务注意力网络,用于自动医学图像分割和分类| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 MTANet: Multi-Task Attention Network for Automatic Medical Image Segmentation and Classification MTANet: 多任务注意力网络,用于自动医学图像分割和分类 01 文献速递介绍 医学图像分割和分类是当前临床实践中的两个关键步骤,其准…

【会议征稿】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办,第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学…

超详细!想进华为od的请疯狂看我!

三分钟带你全面了解华为OD 【合同及管理】签约方为科锐国际/外企德科(人力服务公司),劳动合同期为4年,试用期6个月。员工关系合同管理、五险一金、考勤发薪由科锐国际/外企德科负责;定级定薪、员工培训、工作安排、绩…

【C++算法】——高精度(加,减,乘,除)

前言 高精度算法就是为了去解决一些比较大的数,这些数大到long long都存不下。,这里的主要思想就是用字符串来存。 下面的内容有很多用到c的容器,不明白的可以先去学习stl。 一 高精度加法 首先第一步就是去模拟我们自己写的加法&#xff…

基于TCAD与紧凑模型结合方法探究陷阱对AlGaN/GaN HEMTs功率附加效率及线性度的影响

来源:Investigation of Traps Impact on PAE and Linearity of AlGaN/GaN HEMTs Relying on a Combined TCAD–Compact Model Approach(TED 24年) 摘要 本文提出了一种新型建模方法,用于分析GaN HEMTs的微波功率性能。通过结合工…

Python 虚拟环境 requirements.txt 文件生成 ;pipenv导出pip安装文件

搜索关键词: Python 虚拟环境Pipenv requirements.txt 文件生成;Pipenv 导出 pip requirements.txt安装文件 本文基于python版本 >3.9 文章内容有效日期2023年01月开始(因为此方法从这个时间开始是完全ok的) 上述为pipenv的演示版本 使用以下命令可精准生成requirement…

深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理)

数据的预处理(Data Preprocessing) 2 Data Preprocessing数据的预处理 数据预处理的几种方法 2,1 数据的零点中心化 数据的零点中心化的目的就是为了把数据的整体分布拉回到原点附近,也就是让数据的整体均值变为0。 ​ 2,2 数据的标准化 数据…

TWM论文阅读笔记

这是ICLR2023的一篇world model论文,用transformer来做世界模型的sequence prediction。文章贡献是transformer-based world model(不同于以往的如transdreamer的world model,本文的transformer-based world model在inference 的时候可以丢掉…

【教学类65-01】20240622秘密花园涂色书01(通义万相)(A4横版2张,一大3小 38张纸76份)

背景需求: 用通义万相制作秘密花园涂色书 关键词(中文):秘密花园涂色书,简单笔画,卡通,黑白轮廓,未着色,幼儿插图,线条画,没有背景,没…

【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确解决方法与示例五、注意事项 已解决“‘ping’ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错 一、问题分析背景 在Windows操作系统中,ping 命令是一个常用的网络诊断…