【大数据】—量化交易实战案例双均线策略(移动平均线)

声明:股市有风险,投资需谨慎!本人没有系统学过金融知识,对股票有敬畏之心没有踏入其大门,今天用另外一种方法模拟炒股,后面的模拟的实战全部用同样的数据,最后比较哪种方法赚的钱多。

量化交易,也被称为算法交易,是一种使用数学模型和计算机算法来分析市场数据、识别交易机会并自动执行交易的交易方式。这种交易方法依赖于统计学、数学和计算机科学,以减少人为情绪和主观判断的影响,提高交易效率和精确度。下面是量化交易的一些关键点:

  • 数据驱动:量化交易依赖于大量的历史和实时市场数据,包括价格、成交量、财务报告等。

  • 模型构建:交易者使用统计和机器学习技术来构建预测模型,这些模型可以识别市场趋势、价格模式或异常事件。

  • 策略开发:基于模型的预测,开发交易策略,这些策略可以是趋势跟踪、均值回归、套利等。

  • 自动化执行:一旦策略确定,交易可以完全自动化,由计算机程序执行,无需人工干预。

  • 风险管理:量化交易还包括风险管理算法,以确保交易在可接受的风险水平内进行。

  • 高频交易(HFT):一种特殊的量化交易,特点是交易频率极高,可能在几毫秒内完成数百甚至数千笔交易。

  • 成本和效率:由于减少了交易中的人工环节,量化交易可以降低交易成本并提高执行速度。

  • 监管合规:量化交易需要遵守金融市场的监管规定,包括交易规则和数据保护法规。

优势: 量化交易的优势在于其能够快速处理大量数据,发现人类难以察觉的模式和机会。
挑战: 模型可能过于依赖历史数据而无法准确预测未来市场变化,或者在市场极端波动时可能失效。

import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams ['font.sans-serif'] ='SimHei'      #显示中文
plt.rcParams ['axes.unicode_minus']=False       #显示负号
zgpa = pd.read_csv('history_k_data.csv')
zgpa = zgpa.set_index('date')
zgpa.head()

导入之前获取的数据:
在这里插入图片描述
典型的“美国线”数据,open代表当日开盘价格,high代表当日最高价格,low代表当日最低价格,close代表当日收盘价格。我们还需要增加几个维度来分析,为了不影响原表,我们构建一个新表。

新建一个表单,命名为strategy(策略),计算交易的信号和下单数量:

#序号保持和原始数据一致
strategy = pd.DataFrame(index = zgpa.index)
#添加一个signal字段,用来存储交易信号
strategy['signal'] = 0
#将5日均价保存到avg_5这个字段
strategy['avg_5'] = zgpa['close'].rolling(5).mean()
#同样,将10日均价保存到avg_10
strategy['avg_10'] = zgpa['close'].rolling(10).mean()
#当5日均价大于10日均价时,标记为1
#反之标记为0
strategy['signal'] = np.where(strategy['avg_5']>strategy['avg_10'], 1,0)
#根据交易信号的变化下单,当交易信号从0变成1时买入
#交易信号从1变成0时卖出
#交易信号不变时不下单
strategy['order'] = strategy['signal'].diff()
#查看数据表后10行
strategy.tail(10)

在这里插入图片描述
先介绍今天的移动平均线追踪策略:在这种策略中,一般采用5天均值和10天均值,如果5日均线上穿突破了10日均线,说明股价在最近的涨势很猛,买入信号。若下穿了10日均线,说明最近的跌幅较大,应该卖出。

表格情况:
signal列用于存储交易信号0变成1是买入,1变成0时卖出。
avg_5列采用窗口移动计算5日均值。
avg_10列采用窗口移动计算10日均值。
order列表示交易信号变时下单。

在这里插入图片描述窗口移动计算如上图如示,只不过上图是计算7列,我只计算5列和10列。

数据可视化:

#创建尺寸为10*5的画布
plt.figure(figsize=(10,5))
#使用实线绘制股价
plt.plot(zgpa['close'],lw=2,label='price')
#使用虚线绘制5日均线
plt.plot(strategy['avg_5'],lw=2,ls='--',label='avg5')
#使用-.风格绘制10日均线
plt.plot(strategy['avg_10'],lw=2,ls='-.',label='avg10')
#将买入信号用正三角进行标示
plt.scatter(strategy.loc[strategy.order==1].index,zgpa['close'][strategy.order==1],marker = '^', s=80,color='r',label='Buy')
#将卖出信号用倒三角进行标示
plt.scatter(strategy.loc[strategy.order==-1].index,zgpa['close'][strategy.order==-1],marker = 'v', s=80,color='g',label='Sell')
#添加图注
plt.legend()
plt.xticks([0,12,24,36,48,60,72,84,96,108])
#添加网格以便于观察
plt.grid()
#显示图像
plt.show()

在这里插入图片描述
上图买入信号用正三角进行标注,卖出信号用倒三角进行标注。

模拟实战炒股

依旧是20000元的本金,不交手续费。

initial_cash = 20000
#新建一个数据表positions,序号保持和strategy数据表一致
#用0将空值进行替换
positions = pd.DataFrame(index = strategy.index).fillna(0)
#因为A股买卖都是最低100股
#因此设置stock字段为交易信号的100倍
positions['stock'] = strategy['signal'] * 100
#创建投资组合数据表,用持仓的股票数量乘股价得出持仓的股票市值
portfolio = pd.DataFrame(index = strategy.index)
portfolio['stock value'] = positions.multiply(zgpa['close'], axis=0)
#同样仓位的变化就是下单的数量
#用初始资金减去下单金额的总和就是剩余的资金
portfolio['cash'] = initial_cash - positions['stock'].diff().multiply(zgpa['close'],axis=0).cumsum()
#剩余的资金+持仓股票市值即为总资产
portfolio['total'] = portfolio['cash'] + portfolio['stock value']
#检查一下后10行
portfolio.tail(20)

在这里插入图片描述

创建投资组合数据表,序号和strategy表一致:
stock value代表用持仓的股票数量乘股价得出持仓的股票市值。
cash代表用初始资金减去下单金额的总和就是剩余的资金。
total剩余的资金+持仓股票市值即为总资产。

我们查看最后20行数据,总资产为20502元,比原始资金20000元赚了502元。

数据可视化:

#创建10*5的画布
plt.figure(figsize=(10,5))
#绘制总资产曲线
plt.plot(portfolio['total'], lw=2, label='总资产')
#绘制持仓股票市值曲线
plt.plot(portfolio['stock value'],lw=2,ls='--', label='交易现金流')
#添加图注
plt.legend()
#添加网格
plt.grid()
plt.xticks([0,12,24,36,48,60,72,84,96,108])
#展示图像
plt.show()

在这里插入图片描述

下期我们会带来更多的量化交易策略。

不转发,你至少要点个赞,收藏一下吧!

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

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

相关文章

Android 添加自己的时钟小部件

小部件,也叫微件, 它的介绍参考官网 应用 widget 概览 https://developer.android.google.cn/develop/ui/views/appwidgets/overview?hlzh-cn 直接上图,原生系统上,时钟应用的小部件效果。 我也整一个。 1.创建小部件布局文…

基于Python+Flask+MySQL+HTML的B站数据可视化分析系统

FlaskMySQLVue 基于PythonFlaskMySQLHTML的B站数据可视化分析系统 项目采用前后端分离技术,项目包含完整的前端HTML,以及Flask构成完整的前后端分离系统 爬虫文件基于selenium,需要配合登录账号 简介 主页 登录页面,用户打开浏…

如何在线上快速定位bug(干货)

想必有许多人都想我刚进公司一样不会快速定位线上bug吧,不会快速定位bug会大大降低我们的开发效率,随之而来的就是工作质量下降、业绩下滑。 我总结了一些我常用的线上定位技巧,希望能帮助到大家! 我这里以使用阿里云日志分析作…

[Linux] 文件/目录命令

pwd print working directory cd change directory cd #返回主目录 cd ..返回上级目录 cd . 不动 cd ~ 用户名 进入某用户的主目录 mkdir mkdir 目录名 mkdir -p xx/yy/zz #一次创建多重目录 rmdir remove directory 删除空目录,只能删除空目录,别的不能…

2021年12月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(选择题)

2021年12月Python编程等级考试三级真题解析 选择题(共25题,每题2分,共50分) 1、小明在学习计算机时,学习到了一个十六进制数101,这个十六进制数对应的十进制数的数值是 A、65 B、66 C、256 D、257 答案&#xff…

Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程

方法一:PHP_diseval_extension禁用 Linux CentOS 禁用php的eval函数详细图文教程_centos php 禁用 eval-CSDN博客 这个方法make报错,懒得费时间处理,直接用第二种 方法二:suhosin禁用 不支持PHP8,官方只支持PHP7以下…

# bash: chkconfig: command not found 解决方法

bash: chkconfig: command not found 解决方法 一、chkconfig 错误描述: 这个错误表明在 Bash 环境下,尝试执行 chkconfig 命令,但是系统找不到这个命令。chkconfig 命令是一个用于管理 Linux 系统中服务的启动和停止的工具,通常…

MySQL周内训参照4、触发器-插入-修改-删除

触发器 1、用户购买商品时,要求库存表中的库存数量自动修改 详细示例 delimiter $$ create trigger stock_change after -- 事件触发在 下订单之后 insert -- 监视插入事件 on stock -- 监视 order订单表 for each row begin update stock set stockstock-new.st…

2024年6月27日 (周四) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 喜马拉雅下载工具: 字面意思 Steam国产“类8番”游戏《永恒逃脱:暗影城堡》…

多路h265监控录放开发-(14)通过PaintCell自定义日历控件继承QCalendarWidget的XCalendar类

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

C#udpClient组播

一、0udpClient 控件&#xff1a; button&#xff08;打开&#xff0c;关闭&#xff0c;发送&#xff09;&#xff0c;textbox&#xff0c;richTextBox 打开UDP&#xff1a; UdpClient udp: namespace _01udpClient {public partial class Form1 : Form{public Form1(){Initi…

最新Adobe2024全家桶下载,PS/PR/AE/AI/AU/LR/ID详细安装教程

如大家所熟悉的&#xff0c;Adobe全家桶系列常用的软件有Photoshop&#xff08;PS&#xff09;、Premiere&#xff08;PR&#xff09;、After Effects&#xff08;AE&#xff09;、illustrator&#xff08;AI&#xff09;、Audition&#xff08;AU&#xff09;、Lightroom&…

计算机视觉-期末复习-简答/名词解释/综合设计

目录 第一讲--计算机/机器视觉概述 名词解释 简答 第二讲--图像处理概述 名词解释 简答 第三讲没划重点习题 第四讲--特征提取与选择 名词解释 简答 综合题 第五讲--不变特征 名词解释 简答 第六讲--物体分类与检测 简答 综合题 第七讲--视觉注意机制 简答 …

操纵系统的特征-线程的六种状态

线程的六种状态 线程是操作系统进行运算调度的最小单位&#xff0c;它可以分为六种状态 新建状态&#xff08;NEW&#xff09; 用new创建一个线程对象&#xff0c;这时候处于新建状态 可运行状态&#xff08;RUNNABLE&#xff09; 可运行状态又分为两种状态&#xff1a;就绪…

公司新来了个半吊子测试,没想到居然是个卷王!

最近招了一个测试坐我旁边&#xff0c;想着好好培养一下&#xff0c;要她有什么不懂可以来问我&#xff0c;但工作几天了也没看她来问问题什么的&#xff0c;以为他是个半吊子测试&#xff0c;结果有一天我发现&#xff0c;她竟然趁我不在的时候偷偷努力…&#xff0c;原来她这…

机器学习之集成学习

一&#xff1a;概念 顾名思义集成学习就是用多个其他的算法结合起来使用 对于“其他算法”有同类和同质的区别&#xff0c;同质指的是所用的算法都是同一类型的&#xff0c;比如决策树和神经网络&#xff0c;这种也叫基学习器。反之亦然&#xff0c;但一般使用的是同质的。 …

【Redis】三大Redis内存分析工具介绍(Redisinsight、RDR、RMA)

一、RedisInsight工具介绍 RedisInsight是一款Redis官方开源的可视化管理工具&#xff0c;旨在帮助开发人员和管理员更轻松地设计、开发和优化Redis应用程序。以下是关于RedisInsight的详细介绍&#xff1a; 1、工具概述 定义&#xff1a;RedisInsight是一个直观且高效的Red…

数据库层持久化

数据持久化层 冷热分离 冷热分离&#xff1a;将常用的“热”数据和不常使用的“冷”数据分开存储 冷热分离就是在处理数据时将数据库分成冷库和热库&#xff0c;冷库存放那些走到终态、不常使用的数据&#xff0c;热库存放还需要修改、经常使用的数据 业务需求出现了以下情况…

基于ssh框架的个人博客源码

基于ssh的个人博客源码&#xff0c;页面清爽简洁&#xff0c;原先有部分bug,运行不了&#xff0c;现已修复 1.博客首页 &#xff08;本地访问地址 :localhost:8080/Blog/index/index&#xff09; 2.关于我 3.慢生活 4.留言板 5.我的相册 微信扫码下载源码

【PTA】7-1 网红点打卡攻略(C/C++)代码实现 反思

解题细节分析&#xff1a; 0.比较图的两种存储方法&#xff0c;通过邻接矩阵存储更便于查找给定两点之间的关系 1.注意理解清楚题义&#xff1a;“访问所有网红点”中所有不是指攻略中所有&#xff0c;而是存在的全部的网红点 代码见下&#xff1a;// 需要注明的是&#xff…