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

news2024/12/23 5:30:11

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

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

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

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

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

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

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

  • 高频交易(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.coloradmin.cn/o/1860169.html

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

相关文章

天途重磅推出无人机教管平台3.1版及飞课APP

天途无人机教管平台,是一款为院校和培训机构等企业级客户提供的公开版无人机在线培训系统,包含后台管理的【教管平台】和终端的【掌上天途APP】。 天途历经4年上百次调研和迭代打磨,已为一百多家院校和培训机构等企业级客户解决了无人机教学和…

【2024最新版】Windows11 23H2中文家庭版:免费下载!

Windows 11 23H2中文家庭版系统拥有稳定的性能、丰富的功能和卓越的安全性,很多用户都喜欢给自己的电脑安装上这个版本。但是,许多新手用户不清楚在哪里才能下载到Windows11家庭版?接下来小编给大家带来2024年最新的Windows 11 23H2中文家庭版…

基于rouyi框架的多租户改造

基于rouyi框架的多租户改造,重点是实现权限管理和数据隔离。权限管理相当于从原来的“顶级管理员admin-普通用户user”转变为“顶级管理员admin-租户管理员tanantAdmin-普通用户user”。数据隔离主要通过分库、分表、表内设置tenantId字段进行过滤三种方式。 本文主…

前端项目外包出去,是我痛苦的开始。如何破?

不止一个老铁给我反馈,他们把其前端项目外包出去,非常的痛苦,远不如用自己的员工省心。明面上钱省了,实际精力大量耗费在上面,一算账并没省,反而闹了一肚子气,问我这事该如何破?其实…

IEEE Signal Processing Letters投稿记录

0.写在前面: 该期刊4页正文,第5页只能是参考文献,篇幅紧凑。 最多只有一次小修机会,或者直接接收。网上说平均审稿周期是2.7个月。 祝愿大家都能如愿,一次接收! 期刊网址:投稿 投稿网址&…

被忽视的商机:全民拼购模式如何助力企业实现惊人业绩

在当今的商业环境中,一个被大多数人忽视但实则蕴藏着巨大潜力的模式正在悄然崭露头角。不同于传统商业模式的惯性思维,这一模式在细节上进行了巧妙的调整,带来了意想不到的效果。我的一位客户便凭借这一策略,实现了令人瞩目的业绩…

Java项目毕业设计:基于springboot+vue的幼儿园管理系统

数据库:MYSQL5.7 **应用服务:Tomcat7/Tomcat8 使用框架springbootvue** 项目介绍 管理员;首页、个人中心、用户管理、教师管理、幼儿信息管理、班级信息管理、工作日志管理、会议记录管理、待办事项管理、职工考核管理、请假信息管理、缴费信息管理、幼儿请假管理…

轻松驾驭多云存储,不再为文件流转烦恼,可道云teamOS带你走进便捷的多云时代

不知道大家有没有遇到过这样的问题:使用了不同云平台的存储,但不同的平台存储就存在文件不流通、共享困难、管理困难等问题。 对于这种情况,我们该如何进行资源整合,实现不同挂载存储之间的文件管理与流转? 这些问题…

Linux基础 - shell基础

目录 零. 简介 一、常见的 Shell 类型 二、Shell 命令格式 三、基本命令 四、通配符 五、重定向 六、管道 七、变量 八、条件判断和流程控制 零. 简介 Shell 是一种命令解释器,在 Ubuntu 系统中,它负责接收用户在命令行中输入的命令&#xff0c…

AI大神 Sebastian Raschka 发布新书《从零开始构建大语言模型》

Sebastian 热衷于开源软件,还喜欢写作,撰写了畅销书《Python Machine Learning》(《Python 机器学习》)和《Machine Learning with PyTorch and ScikitLearn》。 最近,Sebastian Raschka 发布了新书《Build a Large L…

pytorch神经网络训练(LeNet-5)

LeNet-5 导包 import osimport torchimport torch.nn as nnimport torch.optim as optimfrom torch.utils.data import Dataset, DataLoaderfrom PIL import Imagefrom torchvision import transforms 定义自定义图像数据集 class CustomImageDataset(Dataset):def __init_…

Git的安装以及使用

一.简单介绍 1.1版本控制 版本控制是指对软件开发过程中各种程序代码,配置文件及说明文档等文件变更管理,是软件配置管理的核心思想之一。 版本控制最重要的内容是追踪文件的变更,它将什么时候,什么人更改了文件的什么内容等信息忠实的记录…

社交小心机:特别的动态给特别的她/他

在社交媒体盛行的今天,微信朋友圈成了我们分享生活点滴的重要平台。 但是,你是否有过这样的烦恼——有些动态只想和特定的人分享,而不是所有人?别担心,今天我就来教大家如何巧妙地设置朋友圈权限,让你的分…

【2024.6.25】今日 IT之家精选新闻

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

C语言 循环语句while 2

应用实例 int main() {char password[20] { 0 };printf("输入密码:>");scanf("%s", password);printf("请确认输入密码(Y/N):>");//清理缓存区int tmp 0;while ((tmp getchar()) ! \n){;}int ch getchar();if (ch Y){pri…

RAG实践 - 搭建本地知识库 - Ollama + AnythingLLM

0,什么是RAG? RAG,即检索增强生成(Retrieval-Augmented Generation),是一种先进的自然语言处理技术架构,旨在克服传统大型语言模型(LLM)在处理开放域问题时的信息容量限…

java 多线程入门

对于 Java 初学者来说,多线程的很多概念听起来就很难理解。比方说: 进程,是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发。线程,是进程的子任务,是 CPU 调度和…

提示缺少Microsoft Visual C++ 2019 Redistributable Package (x64)(下载)

下载地址:这个是官网下载地址:Microsoft Visual C 2019 Redistributable Package (x64) 步骤: 第一步:点开链接,找到下图所示的东西 第二步:点击保存下载 第三步:双击运行安装 第四步&#xf…

让工厂像手机一样更“聪明”

手机,作为我们日常生活中不可或缺的一部分,以其智能、便捷、高效的特点,彻底改变了我们的沟通、娱乐和工作方式。那么,想象一下,如果工厂能像手机一样便捷,那么生产过程中的每一个环节都将变得触手可及。通…

揭秘Redis中的高级数据结构:跳跃表Skiplist

Redis数据结构-跳跃表Skiplist 1. 简介1.1. Redis高性能键值存储数据库1.2. Redis的特点和优势1.3. 跳跃表Skiplist 2. 跳跃表的概念和背景2.1 跳跃表的概念2.2 跳跃表的发展历程和提出背景 3. 跳跃表的基本原理3.1 结构概述3.1.1 跳跃表的结构概述3.1.2 跳跃表的节点结构 3.2 …