【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.mzph.cn/news/858378.shtml

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

相关文章

【fastapi+mongodb】使用motor操作mongodb(三)

本篇文章介绍mongodb的删和改,下面是前两篇文章的链接: 【fastapimongodb】使用motor操作mongodb 【fastapimongodb】使用motor操作mongodb(二) delete delete 的用法基本和查找一致,包括delete_one(删除…

借助AI快速提高英语听力:如何获得适合自己的听力材料?

英语听力是英语学习中的一个重要组成部分,它对于提高语言理解和交流能力至关重要。可理解性学习(comprehensible input)是语言习得理论中的一个概念,由语言学家Stephen Krashen提出,指的是学习者在理解语言输入的同时&…

时空预测 | 基于深度学习的碳排放时空预测模型

时空预测 模型描述 数据收集和准备:收集与碳排放相关的数据,包括历史碳排放数据、气象数据、人口密度数据等。确保数据的质量和完整性,并进行必要的数据清洗和预处理。 特征工程:根据问题的需求和领域知识,对数据进行…

Canvas绘制图片和区域

如何使用Canvas在图片上绘制区域? 一. 首先,我们需要初始化三个canvas画布(初始化Canvas) initCanvas() {// 初始化canvas画布let canvasWrap document.getElementsByClassName("canvas-wrap");this.wrapWidth canva…

Android中如何动态的调整Dialog的背景深暗

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在 Android 开发中,当你使用 Dialog 或 DialogFragment 时,可以通过设置 Window 的背景变暗来突出它的可见性。这个效果…

【密码学】分组密码

文章目录 分组密码的模式分组密码与流密码模式明文分组与密文分组 ECB模式ECB定义ECB特点对ECB模式的攻击改变分组顺序攻击 CBC模式CBC定义初始化向量IVCBC特点对CBC模式的攻击对初始向量进行反转攻击填充提示攻击 CFB模式CFB定义对CFB模式的攻击重放攻击 OFB模式OFB定义CFB模式…

【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下

最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…

PriorityQueue详解(含动画演示)

目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的?☆利用数组存储完全二叉树的好处? 4、PriorityQueu…

React AntDesign Layout组件布局刷新页面错乱闪动

大家最近在使用React AntDesign Layout组件布局后刷新页面时,页面布局错乱闪动 经过组件属性的研究才发现,设置 hasSider 为 true 就能解决上面的问题,耽搁了半天的时间,接着踩坑接着加油!!! …

pytorch实现的面部表情识别

一、绪论 1.1 研究背景 面部表情识别 (Facial Expression Recognition ) 在日常工作和生活中,人们情感的表达方式主要有:语言、声音、肢体行为(如手势)、以及面部表情等。在这些行为方式中,面部表情所携带的表达人类…

SQL找出所有员工当前薪水salary情况

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一个薪水表…

Debian Linux安装minikubekubectl

minikube&kubectl minkube用于在本地开发环境中快速搭建一个单节点的Kubernetes集群,还有k3s,k3d,kind都是轻量级的k8skubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具 这里使用Debian Linux演示,其他系统安装见官网,首先…

使用SpringCache实现Redis缓存

目录 一 什么是Spring Cache 二 Spring Cache 各注解作用 ①EnableCaching ②Cacheable ③CachePut ④CacheEvict 三实现步骤 ①导入spring cache依赖和Redis依赖 ②配置Redis连接信息 ③在启动类上加上开启spring cache的注解 ④ 在对应的方法上加上需要的注解 一 什么…

green bamboo snake

green bamboo snake 【竹叶青蛇】 为什么写这个呢,因为回县城听说邻居有人被蛇咬伤,虽然不足以危及生命,严重的送去市里了。 1)这种经常都是一动不动,会躲在草地、菜地的菜叶里面、果树上、有时候会到民房大厅休息&a…

Qt——系统

目录 概述 事件 鼠标事件 进入、离开事件 按下事件 释放事件 双击事件 移动事件 滚轮事件 按键事件 单个按键 组合按键 定时器 QTimerEvent QTimer 窗口事件 文件 输入输出设备 文件读写类 文件和目录信息类 多线程 常用API 线程安全 互斥锁 条件变量…

光纤传感器十大品牌

十大光纤传感器品牌-光纤光栅传感器厂家哪家好-Maigoo品牌榜

【chatgpt】train_split_test的random_state

在使用train_test_split函数划分数据集时,random_state参数用于控制随机数生成器的种子,以确保划分结果的可重复性。这样,无论你运行多少次代码,只要使用相同的random_state值,得到的训练集和测试集划分就会是一样的。…

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了

使用Flink CDC实时监控MySQL数据库变更

在现代数据架构中,实时数据处理变得越来越重要。Flink CDC(Change Data Capture)是一种强大的工具,可以帮助我们实时捕获数据库的变更,并进行处理。本文将介绍如何使用Flink CDC从MySQL数据库中读取变更数据&#xff0…

端到端自动驾驶的基础概念

欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.端到端自动驾驶的定义 1.1特斯拉FSD 1.2端到端架构演进 1.3大模型 1.4世界模型 1.5纯视觉传感器 2.落地的挑战 1.端到端自动驾驶的定…