量化投资回测教学之掌握矢量化回测
量化投资回测教学之掌握矢量化回测
1. 什么是回测?
回测用于模拟交易策略的过去表现。
回测的核心概念是通过回溯时间来模拟给定的交易策略,并像过去一样执行交易。产生的利润通常通过一些指标(例如最大回撤、夏普比率、年化回报等)与基准表现进行比较。根据策略的性质,应该使用不同的基准和指标,但这本身就是一个完整的主题,所以我不会在这里详细介绍。
回测用于模拟交易策略的过去表现。回测的核心概念是通过回溯时间来模拟给定的交易策略,并像过去一样执行交易。产生的利润通常通过一些指标(例如最大回撤、夏普比率、年化回报等)与基准表现进行比较。根据策略的性质,应该使用不同的基准和指标,但这本身就是一个完整的主题,所以我不会在这里详细介绍。
回测不是过去表现的准确指标,不应该用作研究工具,尤其是在没有经验的手中。有趣的是,回测并不是一个很好的指标,如果你能回到过去,你今天会有多富有。抛开时间旅行不谈,几乎不可能准确地复制过去的表现,因为有许多因素过于复杂而无法准确建模(滑点、交易的市场影响等)。
2. 回测不是什么
回测不是过去表现的准确指标,不应该用作研究工具,尤其是在没有经验的手中。
有趣的是,回测并不是一个很好的指标,如果你能回到过去,你今天会有多富有。抛开时间旅行不谈,几乎不可能准确地复制过去的表现,因为有许多因素过于复杂而无法准确建模(滑点、交易的市场影响等)。此外,在没有经验的人中,回测可能充满偏差(例如,前瞻偏差、幸存者偏差等),这会使策略看起来比实际情况好得多(参见第 5.3 节)。
最后,回测不是研究工具。不要仅仅因为在回测中看起来更好就随意更改您的策略参数。您应该将市场的历史表现视为随机变量的许多可能实现之一。在没有合理经济逻辑的情况下将您的参数拟合到回测将不可避免地导致过度拟合。
3. 事件驱动与向量化回测
矢量化回测比事件驱动回测快得多,应该用于策略研究的探索阶段。
回测策略有两种主要方法:
(i)事件驱动
事件驱动的回测通常涉及使用随时间迭代的循环,模拟根据市场信号发送订单的代理。这种基于循环的方法非常灵活,允许您模拟订单执行中的潜在延迟、滑点成本等。
(ii)矢量化。
相反,矢量化回测收集策略相关数据并将它们组织成向量和矩阵,然后通过线性代数方法(您的计算机非常擅长的东西)进行处理,以模拟过去的表现。由于线性代数的表达能力,向量化回测比事件驱动回测快得多,尽管它缺乏灵活性。通常,矢量化回测更适合初始探索性策略分析,而事件驱动回测适合更深入的分析。
Pandas 回测交易策略 — 矢量化回测
1-读取股票数据
df = pd.read_csv('000001.csv',index_col=0)
计算日收益率
计算交易信号 和 收益率
w1=22
w2=55
df['close'] = df['收盘']
df['SMA1'] = df['收盘'].rolling(w1).mean()
df['SMA2'] = df['收盘'].rolling(w2).mean()
这里我们使用收益率
w1=22
w2=55
df['return'] = df['收盘'].pct_change()
df['asset_return'] = df['收盘'].pct_change()
df['SMA1'] = df['收盘'].rolling(w1).mean()
df['SMA2'] = df['收盘'].rolling(w2).mean()# 资产的收益率
df['asset_return'] = df['asset_return'].fillna(value=0)# 资产的收益率
计算持仓
df['position'] = np.where(df['SMA1'] > df['SMA2'], 1, 0)
关于前瞻偏差的快速说明
在上面的例子中,位置向量/矩阵总是移动 1 个时间步长。这样做是为了避免前瞻性偏差,这会使策略看起来比现实好得多。这个想法是:在时间t,您有一个包含直到并包括t信息的信号,但您只能在t+1时实际交易该信号(例如,如果您的信号包含周一晚上发布的公司的收益信息,那么您只能在周二早上交易该信息)。
如下所示,前瞻性偏差会使策略看起来比现实更有希望(尤其是对于“动量”策略)。
这里我们获取到了净值曲线
模拟手续费
rate = 0.00025 # 万一手续费
有无手续费的对比
评估延迟的稳健性
使用矢量化回测,更容易评估策略对延迟的鲁棒性(即在信号后 T 个时间步长打开您的交易)。然而,这是一种在高频交易级别更有用的分析,其中延迟会严重影响性能。
StudyQuant介绍
StudyQuant - 站在巨人的肩膀学习,项目制的在线量化投资学院。本学院基于新颖技术和人工智能,打造量化交易体系和多元化量化投资策略,并在多个交易市场进行自营交易。我们旨在帮助零基础的学员,通过几个月的时间,系统掌握量化投资的专业技能,助力拿到高薪Offer。
谢谢大家收看免费进量化群 V: studyquant88
- 博客
- 课程
- 量化文档网站
- BILIBILI视频
量化投资回测教学之掌握矢量化回测相关推荐
- 量化初步-《python与量化投资从基础到实战》——优矿策略
python与量化投资从基础到实战--策略初步 量化数据获取 优矿介绍 使用方式 日行情数据 因子数据 数据处理 数据合并 数据透视 数据过滤 数据获取与整理 数据转化: 标准化 哑变量 通联数据回测 ...
- 为什么要用Excel做量化投资
本博客的适用对象:想做一些量化投资,但又不想写代码的普通投资者. 做了20多年的财务和投资.随着年龄的增长,投资风格也逐渐变得稳健,逐步认识到投资不能把简单问题复杂化了,策略应力求简单明了,工具适合自 ...
- 京东物流常态化压测实践 | 京东云技术团队
作者:京东物流 刘江波 一.常态化压测建设目的 为什么做常态化压测? 目前面临主要问题,性能问题滞后发现,给大促带来不可控风险.目前日常需求频繁迭代,系统配置的变更.上下游依赖的变化.服务器资源置换等 ...
- Python量化投资——股票择时到底能否赚钱?ADX指标的有效性回测
ADX指标的有效性回测 Python量化投资--`ADX`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的ADX内置策略 433支股票五年回测结果 12.45% --该 ...
- python 策略回测期货_量化投资实战教程(1)—基于backtrader的简单买入卖出策略
都说Python可以用于量化投资,但是很多人都不知道该怎么做,甚至觉得是非常高深的知识,其实并非如此,任何人都可以在只有一点Python的基础上回测一个简单的策略. Backtrader是一个基于Py ...
- 1、股票交易及量化投资回测分析系统的数据库设计-5
在阅读文章前,请读者朋友认真阅读免责声明: 免责声明:本人所发表的所有文章.资源.知识等内容(包括免费.付费等)旨在向广大读者介绍我的职业生涯中积累的一些经验.知识等内容,受个人水平所限这些知识.经验 ...
- Python 量化投资原来这么简单(5) — A股回测KDJ策略
许多技术投资方面的教材,经常会用几幅上涨的图来表明某些指标的用处,实际上那些上涨的图很可能只是假象.作者为了证明他所强调的指标的作用,选定了符合该指标策略的股票上升趋势图,但实际上这些策略并不一定适合 ...
- 使用java开发一个股票交易及量化投资回测分析系统
经过近两年的研究和学习,我使用java开发(也使用了部分python,数据源:聚宽)出了一个股票交易及量化投资回测分析系统,将于近期陆续推出系列文章,向大家介绍一下整个开发过程,当整个系列文章都完成后 ...
- Python 量化投资实战教程(3) —A股回测MACD策略
量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...
最新文章
- python 实现延迟的操作
- VMware Workstation Pro 无法在Windows上运行的解决方案
- qn模块java脚本_BAT批处理实现自动安装软件功能
- 科学与计算matlab单元测试,mooc现代科学运算—MATLAB语言与应用单元测试答案
- 【Python】简单的apscheduler定时任务
- 摘录理解LDAP与LDAP注入
- 《网易编程题》藏宝图
- 【代码笔记】iOS-TableViewOfTwoSecton
- 几个常用算法的适应场景及其优缺点
- php集成paypal接口,PHP中集成PayPal标准支付,php集成paypal标准_PHP教程
- 虚拟机网络无法连接问题解决(超简单)
- 【英语学习】【English L06】U06 Banking L5 I'd like to change Chinese *yuan* into pounds
- 老司机和你深聊Kubenertes 资源分配之 Request 和 Limit 解析
- 有微服务难题?你需要强大的网关!
- java60秒倒计时
- Collection、List、泛型、数据结构
- 延时调用的时候要注意
- 英雄联盟手游版(MOBA)游戏体验报告
- php中ne,eq相等 ne、neq不相等, gt大于, lt小于
- 蓝桥杯模拟题.花园灌溉(bfs)
热门文章
- c++语言简易自动售货机,C++自动售货机源代码 课程设计
- 学习笔记(01):用友U8视频教程全集(全模块)-存货核算流程*
- 你不需要看懂,大姨妈要来。
- input的文本不显示空格后的内容
- 安卓开发学习笔记(1)使用Bundle在Activity之间交换数据(实例:模拟淘宝的填写并显示收货地址的功能)
- EBS WebADI:简介
- EWS(Exchange Service)基本使用(Java)
- 草根已死 | 互联网精英降维打击
- Blog外挂之:热门文章与导航栏
- R语言easier包预测免疫治疗响应