【大数据】—量化交易实战案例(基础策略)

声明:股市有风险,投资需谨慎!本人没有系统学过金融知识,对股票有敬畏之心没有踏入其大门,所以只能写本文来模拟炒股。

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

  • 数据驱动:量化交易依赖于大量的历史和实时市场数据,包括价格、成交量、财务报告等。
  • 模型构建:交易者使用统计和机器学习技术来构建预测模型,这些模型可以识别市场趋势、价格模式或异常事件。
  • 策略开发:基于模型的预测,开发交易策略,这些策略可以是趋势跟踪、均值回归、套利等。
  • 自动化执行:一旦策略确定,交易可以完全自动化,由计算机程序执行,无需人工干预。
  • 风险管理:量化交易还包括风险管理算法,以确保交易在可接受的风险水平内进行。
  • 高频交易(HFT):一种特殊的量化交易,特点是交易频率极高,可能在几毫秒内完成数百甚至数千笔交易。
  • 成本和效率:由于减少了交易中的人工环节,量化交易可以降低交易成本并提高执行速度。
  • 监管合规:量化交易需要遵守金融市场的监管规定,包括交易规则和数据保护法规。

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

常见的量化交易策略:

  • 趋势跟踪(Momentum Trading):

    这种策略基于市场趋势的持续性,即“价格会沿着趋势方向继续运动”。 使用技术指标,如移动平均线,来识别和跟随市场趋势。

  • 均值回归(Mean Reversion):

    与趋势跟踪相反,均值回归策略假设价格会回归到其长期平均值。
    当价格偏离平均水平时,交易者会买入(在价格低时)或卖出(在价格高时),预期价格会回归到均值。

  • 套利(Arbitrage):

    套利策略利用市场的价格差异来获取无风险利润。 常见的套利类型包括统计套利、三角套利、跨期套利等。

  • 市场中性(Market Neutral):

    这种策略旨在消除市场风险,通过同时持有多头和空头头寸来对冲市场波动。 交易者可能会使用配对交易,即同时买入一个股票和卖出另一个相关股票。

  • 事件驱动(Event-Driven):

    事件驱动策略是基于特定事件对股票价格的影响,如并购、财报发布等。 交易者会分析事件对公司价值的潜在影响,并据此进行交易。

  • 高频交易(High-Frequency Trading, HFT):

    高频交易依赖于极快的交易执行速度和大量的交易来获取微小的利润。 这种策略通常需要复杂的算法和高性能的硬件。

  • 机器学习策略:

    使用机器学习算法,如神经网络、决策树等,来预测市场行为并制定交易决策。 这些策略可以处理非线性关系和复杂的数据模式。

  • 统计套利(Statistical Arbitrage):

    统计套利策略使用统计模型来识别价格偏差,并在预期价格会回归到正常水平时进行交易。

  • 风险平价(Risk Parity):

    这种策略旨在平衡投资组合中不同资产的风险贡献,而不仅仅是它们的资本分配。

  • 因子投资(Factor Investing):

    因子投资策略基于识别和利用市场中的特定因子,如价值、动量、规模等,来选择股票。

以上每种策略都有其优势和局限性,量化交易者通常会根据市场条件、个人风险偏好和投资目标来选择或组合使用不同的策略。此外,量化交易策略的成功实施还需要强大的数据处理能力、精确的模型构建和有效的风险管理。

下面我们就以均值回归(Mean Reversion)模拟今年1月1日至6月21日的量化交易过程:

量化交易:

通过调用股票网站后台接口,获取今年1月1日至6月21日平安银行股票数据:

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       #显示负号
import baostock as bs# 登录系统
lg = bs.login()# 获取股票历史数据
rs = bs.query_history_k_data_plus("sh.601318","date,code,open,high,low,close,preclose,volume,amount,adjustflag",start_date='2024-01-01', end_date='2024-06-21', frequency="d", adjustflag="3")
print('query_history_k_data_plus respond error_code:' + rs.error_code)
print('query_history_k_data_plus respond  error_msg:' + rs.error_msg)# 打印结果集
data_list = []
while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
# 结果集输出到csv文件
result.to_csv("history_k_data.csv", index=False)
result# 登出系统
bs.logout()

这样数据就被我们搞到了,让我们看看数据长什么样。
在这里插入图片描述
典型的“美国线”数据,open代表当日开盘价格,high代表当日最高价格,low代表当日最低价格,close代表当日收盘价格。我们还需要增加几个维度来分析,为了不影响原表,我们构建一个新表。

#只保留原始数据中的日期index
zgpa_signal = pd.DataFrame(index = zgpa.index)
#为了更能体现股票的真实价值
#使用Adj Close调整价格作为股票价格
zgpa_signal['股票价格'] = zgpa['close']
#增加一个字段,来存储股价的变化
zgpa_signal['股价变化'] = zgpa_signal['股票价格'].diff()
#增加diff字段后,第一行会出现空值,我们使用0来进行填补
zgpa_signal = zgpa_signal.fillna(0.0)
#如果股价上涨或不变,则标记为0
#如果股价下跌,则标记为1
zgpa_signal['涨跌情况'] = np.where(zgpa_signal['股价变化'] >= 0, 0,1)
#接下来,根据交易信号的变化进行下单
#一般情况下,在A股市场,买入或卖出至少为100股,即1手
zgpa_signal['股票数量'] = zgpa_signal['涨跌情况'].diff()*100
#检查一下下单的情况
zgpa_signal.head()

在这里插入图片描述说明一下图表内容:

  • 股票价格代表原表的收盘价格。
  • 股价变化就是当日与上日的相加额度。
  • 涨跌情况为0表示卖出,1表示买入。
  • 股票数量我们按照每次买入或卖出1手的原则进行交易,在A股市场买入或卖出至少为100股,即1手。

开始模拟量化炒股

initial_cash = 20000.00
#增加一个字段,代表交易的股票的市值
zgpa_signal['股票市值'] = zgpa_signal['股票数量']*zgpa_signal['股票价格']
#两次买卖的订单变化之差就是某一时刻仓位的变化情况
#持仓股票的数量变化乘以现价,就是代表交易产生的现金流
#用初始资金减去现金流变化的累加,就是剩余的现金
zgpa_signal['剩余现金'] = initial_cash -(zgpa_signal['股票数量'].diff()*zgpa_signal['股票价格']).cumsum()
#而最股票的市值加上剩余的现金,就是总资产
zgpa_signal['投资结算后总资产'] = zgpa_signal['股票市值'] + zgpa_signal['剩余现金']
# zgpa_signal.drop(['stock', 'cash', 'total'], axis=1, inplace=True)
zgpa_signal

在这里插入图片描述
又对表格增加了维度:

  • 股票市值就是股票价格乘以股票数量。
  • 剩余现金就是原始资金(20000元)减去现金流变化的累加。
  • 投资结算后总资产就是股票市值加上剩余现金。

预设的20000元本金,通过一系列操作后2024年6月21日余额为23706元,赚了3706元,因为我每天就买卖100股就没有计算交易费,下面我们绘图来展示。

#用图形来进行展示
#设置图形的尺寸是10*6
plt.figure(figsize=(10,6))
#分别绘制总资产和持仓股票市值的变化
plt.plot(zgpa_signal['投资结算后总资产'],label='投资结算后总资产')
plt.plot(zgpa_signal['股票数量'].cumsum()*zgpa_signal['股票价格'],'--',label='股票每日价格')
#增加网格,调整一下图注的位置,就可以显示图像了
plt.xticks([0,12,24,36,48,60,72,84,96,108])
plt.grid()
plt.legend(loc='center right')
plt.show()

在这里插入图片描述

小结

这是量化投资最简单的入门策略,后续会继续推出其他策略。

需要数据在本文开始点击下载,免费。

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

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

相关文章

FlinkCDC pipeline模式 mysql-to-paimon.yaml

flinkcdc 需要引入: source端: flink-cdc-pipeline-connector-mysql-xxx.jar、mysql-connector-java-xxx.jar、 sink端: flink-cdc-pipeline-connector-paimon-xxx.jar flinkcdc官方提供connect包下载地址,pipeline模式提交作业和…

Python 函数注解,给函数贴上小标签

目录 什么是函数注解? 为什么使用函数注解? 如何编写函数注解? 实战演练 与类型提示(Type Hints)的关系 类型安全的运算器 什么是函数注解? 函数注解(Function Annotations)是Python 3中新增的一个特性,它允许为函数的参数和返回值指定类型。 这些注解不会改变…

Paimon Trino Presto的关系 分布式查询引擎

Paimon支持的引擎兼容性矩阵: Trino 是 Presto 同项目的不同版本,是原Faceboo Presto创始人团队核心开发和维护人员分离出来后开发和维护的分支,Trino基于Presto,目前 Trino 和 Presto 都仍在继续开发和维护。 参考:

win10 安装openssl并使用openssl创建自签名证书

win10创建自签名证书 下载安装配置openssl 下载地址: https://slproweb.com/download/Win64OpenSSL-3_3_1.exe https://slproweb.com/products/Win32OpenSSL.html 完成后安装,一路next,到达选位置的之后选择安装的位置,我这里选…

已成功见刊检索的国际学术会议论文海报展示(2)

【先投稿先送审】第四届计算机、物联网与控制工程国际学术会议(CITCE 2024) 大会官网:www.citce.org 时间地点:2024年11月1-3日,中国-武汉 收录检索:EI Compendex,Scopus 主办单位:四川师范…

计算机组成原理 —— 存储系统(主存储器基本组成)

计算机组成原理 —— 存储系统(主存储器基本组成) 0和1的硬件表示整合结构寻址按字寻址和按字节寻址按字寻址按字节寻址区别总结 字寻址到字节寻址转化 我们今天来看一下主存储器的基本组成: 0和1的硬件表示 我们知道一个主存储器是由存储体…

C++ | Leetcode C++题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int n dungeon.size(), m dungeon[0].size();vector<vector<int>> dp(n 1, vector<int>(m 1, INT_MAX));dp[n][m …

【大数据 复习】第7章 MapReduce(重中之重)

一、概念 1.MapReduce 设计就是“计算向数据靠拢”&#xff0c;而不是“数据向计算靠拢”&#xff0c;因为移动&#xff0c;数据需要大量的网络传输开销。 2.Hadoop MapReduce是分布式并行编程模型MapReduce的开源实现。 3.特点 &#xff08;1&#xff09;非共享式&#xff0c;…

MySQL学习笔记-进阶篇-视图和存储过程

四、视图和存储过程 视图 存储过程 基本语法 创建 CREATE PROCEDURE ([参数列表]) BEGIN --SQL END; 调用 CALL 存储过程名&#xff08;[参数列表]&#xff09; 查看 --查看指定数据库的存储过程及状态信息 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SHCEMA…

indexedDB---掌握浏览器内建数据库的基本用法

1.认识indexedDB IndexedDB 是一个浏览器内建的数据库&#xff0c;它可以存放对象格式的数据&#xff0c;类似本地存储localstore&#xff0c;但是相比localStore 10MB的存储量&#xff0c;indexedDB可存储的数据量远超过这个数值&#xff0c;具体是多少呢&#xff1f; 默认情…

【软件设计】详细设计说明书(word原件,项目直接套用)

软件详细设计说明书 1.系统总体设计 2.性能设计 3.系统功能模块详细设计 4.数据库设计 5.接口设计 6.系统出错处理设计 7.系统处理规定 软件全套资料&#xff1a;本文末个人名片直接获取或者进主页。

C语言笔试题:实现把一个无符号整型数字的二进制序列反序后输出

目录 题目 实例 方法一&#xff1a;直接交换 方法二&#xff1a;间接交换 拓展 题目 编写一个函数&#xff0c;将一个无符号整数的所有位逆序&#xff08;在32位机器下&#xff09; 实例 例如有一个无符号整数 unsigned int num 32; unsigned int 在32位系统中占4个字…

洛谷 P10584 [蓝桥杯 2024 国 A] 数学题(整除分块+杜教筛)

题目 思路来源 登录 - Luogu Spilopelia 题解 参考了两篇洛谷题解&#xff0c;第一篇能得出这个式子&#xff0c;第二篇有比较严格的复杂度分析 结合去年蓝桥杯洛谷P9238&#xff0c;基本就能得出这题的正确做法 代码 #include<bits/stdc.h> #include<iostream&g…

测试辅助工具(抓包工具)的使用2 之 抓包工具的基本用法

1.过滤设置: Filters- --- 勾选use Filters- --- 下拉选择show only the following hosts ---- 输入域名或者ip地址(多个地址用;隔开) --- 点击action(Run filterset now) 2.删除数据 方式一:点击Remove all 方式二: 黑窗口输入cls,回车 删除一条数据:选中数据---右键选择Rem…

C++ | Leetcode C++题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution { public:string largestNumber(vector<int> &nums) {sort(nums.begin(), nums.end(), [](const int &x, const int &y) {return to_string(x) to_string(y) > to_string(y) to_string(x);});if (nu…

基于riscv架构的DAYU800开发板套件介绍

一、简介 润和-SCDAYU800 开发平台基于平头哥高性能 RISC-V 开源架构曳影 TH1520 芯片&#xff0c;集成4核高性能RISC-V处理器玄铁C910的平头哥曳影1520&#xff0c;AI算力达4TOPs支持蓝牙、音频、视频和摄像头等功能,支持多种视频输入输出接口,并提供丰富的扩展接口&#xff…

Apple - Cocoa Event Handling Guide

本文翻译整理自&#xff1a;Cocoa Event Handling Guide&#xff08; https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html#//apple_ref/doc/uid/10000060i 文章目录 一、导言本文件的组织另见 二、事件…

展讯-系统定制修改

1.user版本使用adb 打开文件 build/make/core/main.mk ifeq ($(user_variant),user)ADDITIONAL_DEFAULT_PROPERTIES ro.adb.secure0endif 1.这个ro.adb.secure0&#xff08;0为不显示信任此电脑&#xff0c;1为显示信任此电脑&#xff09; ifeq (true,$(strip $(enable_tar…

centos7系统上安装MySQL8.4图文教程

本章教程&#xff0c;主要记录如何在CentOS7系统上安装MySQL8.4的详细步骤。 一、查看当前系统版本 cat /etc/centos-release二、安装步骤 1、创建mysql目录 cd /usr/local && mkdir mysql && cd mysql2、安装rpm包 yum install https://repo.mysql.com//m…