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

news2025/2/25 0:10:11

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈: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.x

min_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.coloradmin.cn/o/1854534.html

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

相关文章

机器学习基础:与Python关系和未来发展

目录 初识Python Python的由来 自由软件运动 编译方式的演进 Python语言的特点 语法简单,易于理解 语法结构清晰,快速上手 丰富的第三方库 机器学习 监督学习 无监督学习 半监督学习 欢迎回到我们的神经网络与深度学习Tensorflow实战学习&am…

算法学习014 0-1背包问题 c++动态规划算法实现 中小学算法思维学习 信奥算法解析

目录 C0-1背包 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C0-1背包 一、题目要求 1、编程实现 有 N 件物品和一个容量为 M的背包,每件物品有各自的价值且只能被选择一次,要求…

【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render

常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render();类组件 this.setState();函数组件 useState useEffect; 我们希望实现一套统一的更新机制,他的特点是: 兼容上述触发更新的方式方便后续…

Vienna 整流器的基本原理及数学模型

2.1 Vienna 整流器基本工作原理 2.1.1 主电路拓扑结构分析 Vienna 整流器系统的主电路包含用于升压的三相电感、三相桥臂和两个直流侧均压电容。通过有规律的对双向开关进行控制不仅能实现功率双向流动,还能使网侧电流时刻跟踪电网电压,使系统运行在高…

【ajax实战01】数据管理网站总述

一:功能实现 登录和权限判断查看文章内容列表(筛选和分页)编辑文章(数据回显)删除文章发布文章(图片上传,富文本编辑器) 该网站最终实现:登录后台管理系统,…

【Linux进程】进程的 切换 与 调度(图形化解析,小白一看就懂!!!)

目录 🔥前言🔥 💧进程切换💧 💧进程调度💧 🔥总结与提炼🔥 🔥共勉🔥 🔥前言🔥 在 Linux 操作系统中,进程的 调度 与 …

Git使用过程中涉及的几个区域

一. 简介 Git 是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理,也是 Linus Torvalds 为了帮助管理 Linux内核开发而开发的一个开放源码的版本控制软件。 本文简单了解一下 git涉及的几个部分,以及git 常…

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

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

leetcode 二分查找·系统掌握 搜索二维矩阵

题目: 题解: 一个可行的思路是使用~01~泛型对每一行的最后一个元素进行查找找到第一个大于等于target的那一行,判断查找结果如果“失败”返回false否则继续在改行进行常规二分查找target的值根据查找结果返回即可。 bool searchMatrix(vec…

基于Quartus Prime18.1的安装与FPGA的基础仿真(联合Modelsim)教程

Quartus是一种美国科技公司Intel(英特尔)公司开发的FPGA(现场可编辑门阵列)设计编译软件,用作设计、仿真、综合和布局、支持多种编程语言,包括VHDL、Verilog等,并具有丰富的功能和工具库&#x…

【Python机器学习】NMF——将NMF应用于模拟信号数据

假设我们对一个信号感兴趣,它是由三个不同信号源合成的: import matplotlib.pyplot as plt import mglearnSmglearn.datasets.make_signals() plt.figure(figsize(6,1)) plt.plot(S,-) plt.xlabel(Time) plt.ylabel(Signal) plt.show()不幸的是&#xff…

基于imx6ull开发板 移植opencv4.7.0

一、概述 本章节是针对opencv-4.7.0移植到Linux系统,运行在正点原子-I.MX6U ALPHA开发板 上,详细的移植流程如下。 二、环境要求 2.1 硬件环境 正点原子-I.MX6U ALPHA开发板虚拟机:VMware 2.2 软件环境 Ubuntu系统要求:20.0…

[SAP ABAP] 排序内表数据

语法格式 整表排序 SORT <itab> [ASCENDING|DESCENDING]. 按指定字段排序 SORT <itab> BY f1 [ASCENDING|DESCENDING] f2 [ASCENDING|DESCENDING] ... fn [ASCENDING|DESCENDING].<itab>&#xff1a;代表内表 不指定排序方式则默认升序排序 示例1 结果显…

Posix多线程编程总结

Posix在线文档&#xff1a; The Single UNIX Specification, Version 2 (opengroup.org) 本文主要参考这位大神的文章&#xff1a; Posix多线程编程学习笔记 - 凌峰布衣 - 博客园 (cnblogs.com) 线程安全问题 多线程编程中&#xff0c;经常遇到的就是线程安全问题&#xff0c;或…

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

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

STM32学习 修改系统主频

前面时钟树的学习说明单片机的主频是可以修改的&#xff0c;那么怎么更改系统的主频&#xff0c;这里做一个简单的介绍。首先要明白&#xff0c;单片机的程序是如何运行&#xff0c;这里简单说明一下。 对应的代码在startup_stm32....文件里面&#xff0c;这里是复位程序的汇编…

第T2周:彩色图片分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 &#x1f449; 要求&#xff1a; 学习如何编写一个完整的深度学习程序了解分类彩色图片会灰度图片有什么区别测试集accuracy到达72% &#x1f9be;我的环境&am…

QT事件处理系统之五:自定义事件的发送案例 sendEvent和postEvent接口

1、案例 双击窗口,会发送 自定义事件,然后在事件过滤中心进行拦截处理自定义事件。 2、核心代码 /*解释:双击窗口时,将产生双击事件,然后该事件被包裹成一个对象,随后将会被发往event事件中心,然后进行事件的处理(Widget对象);因为m_lineEdit开启了事件过滤机制,所…

【UML用户指南】-21-对基本行为建模-活动图

目录 1、概念 2、组成结构 2.1、动作 2.2、活动节点 2.3、控制流 2.4、分支 2.5、分岔和汇合 2.6、泳道 2.7、对象流 2.8、扩展区域 3、一般用法 3.1、对工作流建模 3.2、对操作建模 一个活动图从本质上说是一个流程图&#xff0c;展现从活动到活动的控制流 活动图…

图像编辑技术的新篇章:基于扩散模型的综述

在人工智能的浪潮中&#xff0c;图像编辑技术正经历着前所未有的变革。随着数字媒体、广告、娱乐和科学研究等领域对高质量图像编辑需求的不断增长&#xff0c;传统的图像编辑方法已逐渐无法满足日益复杂的视觉内容创作需求。尤其是在AI生成内容&#xff08;AIGC&#xff09;的…