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

news2024/11/25 18:25:03

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

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

  • 数据驱动:量化交易依赖于大量的历史和实时市场数据,包括价格、成交量、财务报告等。
  • 模型构建:交易者使用统计和机器学习技术来构建预测模型,这些模型可以识别市场趋势、价格模式或异常事件。
  • 策略开发:基于模型的预测,开发交易策略,这些策略可以是趋势跟踪、均值回归、套利等。
  • 自动化执行:一旦策略确定,交易可以完全自动化,由计算机程序执行,无需人工干预。
  • 风险管理:量化交易还包括风险管理算法,以确保交易在可接受的风险水平内进行。
  • 高频交易(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.coloradmin.cn/o/1852471.html

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

相关文章

网络程序通信的流程

网络程序通信的流程: 1.通过ip地址找到网络中的设备 2.通过端口号找到对应进程的端口 3.传输数据时还需要使用传输协议(TCP),保证数据的可靠性 4.socket完成进程之间网络数据的传输 ip地址的介绍 IP地址是互联网协议地址&#…

汉语拼音字母表 (声母表和韵母表)

汉语拼音字母表 [声母表和韵母表] 1. 汉语拼音声母表2. 汉语拼音韵母表References 1. 汉语拼音声母表 声母是韵母前的辅音,与韵母一起构成一个完整的音节。 辅音是发声时,气流在口腔中受到各种阻碍所产生的声音,发音的过程即是气流受阻和克…

AtCoder Beginner Contest 359(ABCDEFG题)视频讲解

A - Count Takahashi Problem Statement You are given N N N strings. The i i i-th string S i S_i Si​ ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1≤i≤N) is either Takahashi or Aoki. How many i i i are there such that S i S_i Si​ is equal to Takahashi? C…

idea2022激活

下载激活脚本 解压后,打开文件夹如下:ja-netfilter.jar 为激活补丁: 复制补丁所在的整个文件夹到硬盘某个位置 将 ja-netfilter补丁所在的整个文件夹移动到电脑上某个位置,我是放到了 D 盘下: (路径中不…

Nginx负载均衡之Memcached缓存模块

Nginx 的 ngx_http_memcached_module 模块本身并没有提供缓存功能,它只是一个将用户请求转发到 Memcached 服务器的代理模块。 在以 Memcached 服务器为缓存应用的方案中,Memcached 作为内容缓存的存储服务器,用户通过 URL 为 Memcac…

Android面试题精选——再聊Android-Handler机制

​ static final ThreadLocal sThreadLocal new ThreadLocal(); //创建当前线程的Looper对象 private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() ! null) { throw new RuntimeException(“Only one Looper may be created per thread”); } sThre…

【课程总结】Day10:卷积网络的基本组件

前言 由于接下来的课程内容将围绕计算机视觉展开,其中接触最多的内容是卷积、卷积神经网络等…因此,本篇内容将从卷积入手,梳理理解:卷积的意义、卷积在图像处理中的作用以及卷积神经网络的概念,最后利用pytorch搭建一…

详解互联网基石之HTTPS

一、HTTPS简介 HTTPS(HyperText Transfer Protocol Secure)是一种用于安全通信的网络传输协议。它是HTTP的加密版本,通过使用TLS(Transport Layer Security)或其前身SSL(Secure Sockets Layer)来…

Leetcode3185. 构成整天的下标对数目 II

Every day a Leetcode 题目来源&#xff1a;3185. 构成整天的下标对数目 II 解法1&#xff1a;哈希 本质思路类同经典的“两数之和”。枚举右&#xff0c;用哈希表维护左。 枚举 j&#xff0c;并维护 cnt[x] 表示所有满足 i < j 的下标 i 中&#xff0c;有几个 hours[i]…

服务器硬件的基础知识

引言 服务器是现代数据中心和企业IT基础设施的核心组成部分。了解服务器硬件的基本知识不仅有助于选择和维护服务器&#xff0c;还能提高系统性能和可靠性。本文将详细介绍服务器硬件的各个方面&#xff0c;包括处理器、内存、存储、网络、散热和电源等&#xff0c;帮助读者全…

数据库系统概论、数据管理的三种方式

一、数据库系统概论 数据库系统管理数据的的方式是用数据库来组织和存储数据&#xff0c;利用数据库管理系统&#xff0c;在操作系统的支持下&#xff0c;统一管理和控制存储在磁盘上的数据库&#xff0c;各类用户通过不同的方式&#xff0c;借助于数据库管理系统&#xff08;…

Android简单登录界面布局设计

<ImageView android:id“id/yxlg” android:layout_marginTop“12dp” android:layout_marginLeft“80dp” android:layout_width“30dp” android:layout_height“30dp” android:background“drawable/net” /> <TextView android:paddingTop“5dp” andr…

【面试干货】HashSet 和 TreeSet 的区别

【面试干货】HashSet 和 TreeSet 的区别 1、实现方式HashSetTreeSet 2、性能添加、删除和查找操作的时间复杂度HashSetTreeSet 3、元素唯一性4、迭代顺序HashSetTreeSet 5、使用场景HashSetTreeSet 6、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不…

fastapi+vue3+primeflex前后端分离开发项目第一个程序

安装axios axios是用来请求后端接口的。 https://www.axios-http.cn/docs/intro pnpm 是一个前端的包管理工具&#xff0c;当我们需要给前端项目添加新的依赖的时候&#xff0c;就可以使用pnpm install 命令进行安装。 pnpm install axios安装 primeflex primeflex是一个cs…

MySQL之复制(十二)

复制 复制的问题和解决方案 未定义的服务器ID 如果没有在my.cnf里面定义服务器ID,可以通过CHANGE MASTER TO 来设置备库&#xff0c;但却无法启动复制。 mysql>START SLAVE; ERROR 1200(HY000):The server is not configured as slave;fix in config file or with CHANG…

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景&#xff1a;解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻…

ubuntu链接mysql

C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…

2024各省自考报名时间汇总❗所需材料❗

天津&#xff1a;5月27日-5月31日&#xff08;已结束&#xff09; 河北&#xff1a;6月10日~6月15日&#xff08;已结束&#xff09; 贵州&#xff1a;6月17日~26日 山东&#xff1a;6月18日~6月24日 江西&#xff1a;6月26日-7月7日&#xff08;6月下旬&#xff09; 浙江&…

pytest测试框架pytest-xdist插件并发执行测试用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件pytest-xdist&#xff0c;主要是提供并行测试、分布式测试、循环测试等功能&#xff0c;可以加快测试速度。 pytest-xdist官方显示没有严格的python和pytest版本限制。 pytest-xdist安装 使用pip命令安装: pip…

如何解决代码中if…else-过多的问题,建议收藏

逻辑表达模式固定的 if…else 实现与示例 if (param.equals(value1)) { doAction1(someParams); } else if (param.equals(value2)) { doAction2(someParams); } else if (param.equals(value3)) { doAction3(someParams); } // … 可重构为 Map<?, Function<?>…