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

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

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

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

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

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

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

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

  • 高频交易(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.mzph.cn/diannao/36622.shtml

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

相关文章

【项目实训】各种反爬策略及爬虫困难点总结

在这里,我总结了本次项目的数据收集过程中遇到的反爬虫策略以及一些爬虫过程中容易出现问题的地方。 user-agent 简单的设置user-agent头部为浏览器即可: 爬取标签中带href属性的网页 对于显示岗位列表的页面,通常检查其源代码就会发现&…

深入理解链表:基础概念、操作及应用

前言 链表(Linked List)是一种重要的数据结构,广泛应用于各种算法和系统设计中。本文将详细介绍链表的基本概念、类型、基本操作及其在实际编程中的应用,并使用C语言代码示例进行说明。 链表的基本概念 链表是一种线性数据结构…

【数据结构】(C语言):动态数组

动态数组: 内存区域连续,即每个元素的内存地址连续。可用索引查看元素,数组[索引号]。指定位置删除元素,该位置之后的元素全部往前移动一位。指定位置添加元素,从最后到该位置的元素全部往后移动一位。物理大小&#…

【保姆级讲解ECMAScript和JavaScript之间的区别】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

mysql 升级到8.0

MySQL :: MySQL 8.0 Reference Manual :: 3.7 Upgrading MySQL Binary or Package-based Installations on Unix/Linux 2种升级方式: In-Place Upgrade : data目录替换 Logical Upgrade: 通过 mysqldump 导出为sql文本后,导入…

全面国产化信创适配改造方案说明

一、概叙 系统的全面国产化适配改造需要从多个方面进行考虑,改造前需要进行充分的论证,在满足具体业务场景的前提下,以确保系统的稳定性和安全性,同时还要考虑技术的发展,不断优化和更新。因此全面国产化适配改造也面临…

Redis集群安装(三主三从一哨兵)

Redis集群安装(三主三从一哨兵) 一,搭建环境 ​ 在三台服务器上分别搭建redis并测试是否能启动(搭建方法) 二,Redis cluster三主三从 配置环境变量 vim /etc/profile #添加如下内容 export REDIS_HOME…

AI 开发平台(Coze)搭建《AI女友(多功能版本)》

前言 本文讲解如何从零开始,使用扣子平台去搭建《AI女友(多功能版本)》 bot直达:AI女友(多功能版) - 扣子 AI Bot (coze.cn) 欢迎大家前去体验!!! 正文 功能介绍 …

系统架构师考点--系统配置与性能评价

大家好。今天我们来总结一下系统配置与性能评价的考点内容,这一部分一般是出在上午场的选择题中,占1-2分左右。 一、性能指标 计算机 对计算机评价的主要性能指标有:时钟频率(主频);运算速度;运算精度内存的存储容量…

ManageEngine连续荣登Gartner 2024年安全信息和事件管理魔力象限

我们很高兴地宣布,ManageEngine再次在Gartner的安全信息和事件管理(SIEM)魔力象限中榜上有名,这是我们连续第七年获得这一认可。 Gartner ManageEngine Log360是一款全面的SIEM解决方案,旨在帮助组织有效处理日志数据…

计算机共形几何简介

计算机共形几何(Computational Conformal Geometry)是一门研究计算机图形学和几何学结合的领域,主要研究曲面的表示、形变和分析等问题。共形几何是研究保持角度度量不变的几何变换,而计算机共形几何则是将共形几何的概念和方法应…

cuda 学习笔记4

一 基本函数 在GPU上开辟空间,无论定义的数据是float还是int ,还是****gpu_int,分配空间的函数都是下面固定的形式 (void**)& 1.函数定义,global void 是配套使用的,是在GPU上定义,也就是GPU上执行,CPU上调用的函数…

python pyautogui.position实时输出坐标

import pyautogui import timewhile True:# 获取鼠标当前坐标x, y pyautogui.position()# 打印坐标print(f"当前坐标:({x}, {y})")# 暂停1秒time.sleep(1) 输出实时鼠标位置坐标

Java高手的30k之路|面试宝典|精通MySQL(二)

分区表 分区类型 MySQL 支持以下几种表分区类型,这些分区类型有助于优化大型表的管理和查询性能: Range Partitioning(范围分区): 范围分区是基于列的值范围来分配数据的。你可以定义一个或多个列的值区间&#xff0…

62.指针和二维数组(2)

一.指针和二维数组 1.如a是一个二维数组,则数组中的第i行可以看作是一个一维数组,这个一维数组的数组名是a[i]。 2.a[i]代表二维数组中第i行的首个元素的地址,即a[i][0]的地址。 二.进一步思考 二维数组可以看作是数组的数组,本…

springboot+vue+mybatis母婴二手销售系统+PPT+论文+讲解+售后

目前由于我国二手销售的规模较小,同发达国家相比,二手销售比重始终偏低,消费总额增长缓慢,进一步抑制了市场消费的提升,随着市场竞争的日益激烈,虽然许多商家主动选用二手销售模式,但却缺乏对其充分的重视与销售风险的良性控制,一些商家没有建立独立的信用实践管理部门,无法在交…

linux使用docker部署kafka集群

1、拉取kafka docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper 2、创建网络 docker network create app-kafka 3、启动zookeeper docker run -d \--name zookeeper \-p 2181:2181 \--network app-kafka \--restart always \wurstmeister/zookeeper …

【ISAC】通感一体化讲座(刘凡)

高斯信道下通信感知一体化的性能极限(刘凡) 文章目录 背景背景 通信和感知在硬件结构上相似,高效地利用资源,实现相互的增益; 感知是基于不同的任务,比如目标检测(检测概率,虚警概率),估计任务(从收到的信号中去估计有用的参数,均方误差,CRB),识别(知道目标的…

Str.format()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 在Python2.6之后,提供了字符串的format()方法对字符串进行格式化操作。format()功能非常强大,格式也比较复杂&…

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真,分别对YAW,PITCH,ROL…