IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 量化投资回测教学之掌握矢量化回测 -> 正文阅读

[区块链]量化投资回测教学之掌握矢量化回测

量化投资回测教学之掌握矢量化回测

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

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:56:10  更:2022-03-21 20:56:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:31:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码