本文含 8045 字,18 图表截屏
建议阅读 42 分钟
在公众号对话框回复 QTP2 下载 notebook
0
引言
在上贴〖Quantopian 系列一〗我们初探了的流水线(pipeline),本帖我们就把它揉碎了讲。
很多交易算法都需要重复的做以下几个步骤
对于已知集合中的每个资产,计算它们在不同移动窗口下的 N 个统计量
根据『1』中计算的值选择可交易的子资产集(subset)
根据『2』中选择的资产集上计算所需的投资组合权重
根据『3』中计算的权重下订单
能高效地执行上述操作存在几个技术难点,包括:
要高效的查询大量资产
要在大量资产上进行计算
要能处理调整(拆分和股息)和资产退市
流水线就是来解决这些难点的。
在上贴中,我们了解到 Quantopian 有研究环境(research)和回测环境(backtest),我们可以在前者中快速迭代不同的交易策略,然后再后者构建下订单对其策略进行回测。
两个环境都需要流水线,好消息是,在两个环境中,构造流水线是相同的,唯一不同的是其运行方式
研究环境:需要设定起始日和终止日来运行流水线
回测环境:不需要设定起始日和终止日来运行流水线,因此在每个回测日都要跑一次流水线
目录如下:
简介
因子
筛选器
分类器
掩盖法
数据集
自定义因子
回测
由于内容较多,本帖分上下两贴,上贴讲 1 至 4 节,下帖讲 5 至 8 节。
1
简介
在流水线中,我们可以在同时在多个资产中的多维特征上定义一系列运算,而这些计算可分为三大类:
因子(factor)
筛选器(filter)
分类器(classifer)
三者的相同点:都是从资产和时点产生值的函数
三者的不同点:产生值的类型不同
因子
因子是从「资产和时点」到数值的函数。
关于因子的两个简单示例:
资产的最新价格,给定资产和特定时点,得到的最新价格是个数值。
资产的 10 天平均交易量,给定资产和特定时点(10 个时点),得到的平均交易量是个数值。
因子最常用于以下几种方式:
计算目标权重
产生交易信号
构造更复杂的因子
构造筛选器
筛选器
筛选器是从「资产和时点」到布尔值的函数。
关于筛选器的一个示例:判断资产价格是否低于 10 美元,在给定资产和时点的情况下,此结果只能为真(True)或假(False),是个布尔值。
筛选器最常用于包括或剔除的某些资产集。
分类器
分类器是从「资产和时点」到分类值的函数。
具体来讲,分类器产生的分类值可以是字符串(string)或整数(integer)。注意这里整数是指整数标签,例如行业代码(sector code)。
关于分类器的一个示例:正在交易的资产所在交易所的代号。
分类器最常用于对资产进行分组。
数据集
流水线可以在多种数据上进行计算,比如 OHLC 数据、交易量数据、基本面数据和情绪数据等。我们将在后面会介绍每类数据集。
接下来第 2, 4, 6, 10 节讨论因子,第 3, 5, 7 节讨论筛选器,第 8 节讨论分类器,第 9 节讨论数据集,第 11 节结合所有内容构建一个完整的策略做回测。
2
因子
因子本质上是一个函数,将资产和时点两个自变量转化成一个数值型变量(numeric variable)。抽象形式如下:
F(asset, timestamp) -> float
其中 asset 是一列数据,timestamp 是一个窗口长度。
Quantopian 里面有