分类
技術分析

为什么使用这种交易策略?

构建盈亏序列(PNL,Profit and Loss)。盈亏序列是指当前的头寸映射到对应的历史数据序列上,即此金融产品的历史收益率序列上,获得历史上的各个时间点的盈亏值。由此可知,盈亏序列的建立必须满足两个条件,1.已经处理好的历史数据2.当前的头寸。经过处理的历史数据已经经过讨论,当前头寸可以作为参数直接输入获得,当然为了更好的结构性和扩展性的考虑我们可以把头寸写入配置文件中。用数学公式PnL=Position(头寸)*()。

开盘区间突破交易策略

本网站由StoneX集团公司(StoneX Group Inc.)旗下的全资子公司StoneX Financial Ltd.和嘉盛全球市场有限公司(GAIN Global Markets, 为什么使用这种交易策略? Inc.,“GGMI”)联合管理。StoneX Financial Ltd.在英国金融行为监管局(FCA)注册并受其监管(FCA号码:446717)。GGMI受开曼群岛金融管理局监管(许可证号码:25033)。在决定与其中任何StoneX集团公司(StoneX Group Inc.)旗下的受监管公司进行交易之前,您应仔细阅读并考虑所有条款条件、相关附件、通知和政策。

FOREX.com的母公司StoneX集团公司(StoneX Group Inc.)为纳斯达克证券交易所上市公司,透过旗下成员企业在全球7个监管区域下运作,其中包括英国金融行为监管局(FCA)、美国商品期货委员会(CFTC)、美国国家期货协会(NFA)、日本金融服务管理局(FSA)、澳大利亚证券投资委员会(ASIC)、开曼群岛金融管理局(CIMA)、加拿大投资行业监管组织(IIROC)和新加坡金融管理局(MAS)。

FOREX.com可能时常通过StoneX Financial Ltd. (地址:Moor House First Floor, 120 London Wall, London, EC2Y 5ET, United Kingdom)来提供与信用卡相关的支付服务。

嘉盛全球市场有限公司(GAIN Global Markets, Inc.)为StoneX集团公司(StoneX Group Inc.)旗下成员,其主营业地址:30 Independence Blvd, Suite 300 (3rd floor), Warren, NJ 07059, USA。

使用数据驱动进行配对交易:简单交易策略

coderpai 于 2018-04-28 19:49:54 发布 5913 收藏 23

作者:chen_h 为什么使用这种交易策略?
微信号 & QQ:862251340
微信公众号:coderpai

使用数据驱动进行配对交易:简单交易策略

我们假设你有一对股票 X 和 Y,它们之间有一些基本的经济联系,例如这是两家生产百事可乐和可口可乐的,它们拥有相同产品的公司。你预计这两个公司的比率或者价格差异(也称为价差)随时间而保持不变。然而,由于某些愿意,比如市场变化,两个公司暂时的供求变化,一个正确机构的大量买单或者卖单,一个公司的重要消息面等等原因。这两个股票之间的价差可能会存在暂时的分歧。在这种情况下,一只股票上涨,另一只股票可能会相对下跌。如果你预计这种分歧会随着时间的推移恢复正常,那么你就可以进行配对交易。

概念解释:我们先来生成两个假股票数据

接下里,让我们生成一个伪造的数据 X ,并且通过从正太分布中绘制出它的每日收益。然后我们执行一个累积和来得到每天的 X 值。

现在我们生成与 X 有着经济关联的数据 Y ,所以 Y 的价格走势应该是与 X 相似的。我们通过对数据 X 进行建模并且添加一些从正态分布中抽取的随机噪声来建模。

协整性跟相关性非常相似,意味着两个系列之间的比值将以平均值为中心变化。我们可以将序列 X 和 Y 的关系描述如下:

其中,⍺ 是一个常数比率,e 是白噪声。

我们可以使用 statsmodels.tsa.stattools 包来进行方便测试。我们应该可以看到一个特别低的 p 值,因为这是我们人为构建的两个序列,他们在物理上可能是协整的。

注:相关性和协整性

Correlation: 0.998
Cointegration test p-value: 0.258

Correlation: 0.007546
Cointegration test p-value: 0.0

相关度:0.为什么使用这种交易策略? 007546
协整检验 p 值:0.0

这两个序列的相关性非常低,但 p 值却显示出完美的协整性!

如何进行配对交易?

因为两个协整时间序列是彼此偏离和分开的(比如上面的 X 和 Y),所以有时候价差会很高,而有时候价差会很低。我们可以通过购买一种证券并且卖出另一种证券来进行配对交易。这样,如果正确一起下跌或者一起上涨,我们既不赚钱也不赔钱,因为我们的策略是市场中立的。

回到上面的 X 和 Y,以及它们的线 Y = ⍺ X + e,我们可以看到它们的比率(Y/X)是围绕它的平均值 ⍺ 来进行移动的,而我们赚取的钱就是从这个平均值 ⍺ 来的。为了做到这一点,我们会格外注意 X 和 Y 的比率,即 ⍺ 太高或者太低的时候:

  • 延长比率:这是当 ⍺ 比平常小的时候,我们预计它的值会增加。在上面的例子中,我们通过购买 Y 并且出售 X 来对此进行投资。
  • 缩小比率:这是当 ⍺ 比平常大的时候,我们预计它的值会减小。在上面的例子中,我们通过出售 Y 并且购买 X 来对此进行投资。

请注意,我们总是有这样一个 “对冲仓位”:如果卖出的证券亏损了,那么空头就会赚钱;如果证券的价值升高了,那么多头仓位就会赚钱,所以我们不受整体市场波动的影响。如果证券 X 和 Y 彼此相对移动,那么我们只会赚钱或者亏钱。

使用数据分析的方法来找到拥有如此规律的证券

做到这一点的最佳方式是从我们怀疑可能是拥有协整关系的证券开始,并进行统计测试。如果你只是对所有对进行统计测试,那么你将会受到多重比较偏差的影响。

多重比较偏差只是一个事实,即在运行多次测试时,错误的生成重要 p 值的机会增加了,因为我们正在进行大量测试。如果对随机数据运行 100 词测试,我们应该看到 5 个 p 值低于 0.05 的值。如果你将 n 只证券进行协整比较,你将执行 n(n-1)/2 次比较,并且你应该会看到很多不正确的 p 值,随着你测试次数的增加,这个数量也会增加。为了避免出现这种情况,我们可以选择一小部分,我们认为可能是协整的然后进行单独测试。这将帮助我们减少暴露在多重比较偏差风险之中。

所以我们试着找一些具有协整关系的证券。让我们从标普 500 指数中 —— 一篮子的美国大盘科技股中找一些具有协整关系的股票吧。这些股票运行在类似的细分市场,并可能具有协整价格。我们通过扫描这些股票,然后计算两两之间的协整,最后我们可以得到一个协整检验得分矩阵,一个 p 值得分矩阵,以及可以计算出 p 值小于 0.05 的任何配对。这种方法容易出现多重比较偏差,实际上证券应该经过第二次验证。但是在这里,为了这个例子,我们先忽略这个。

从图中我们可以看出股票 ‘ADBE’ 和 ‘MSFT’ 是最具有协整的。为了更加放心,我们来看看它们的价格变化,以确保它确实是具有意义的。

这个比例看起来好像是为让着一个稳定的平均值移动的。绝对比率在统计学上并不是很有用,我们通过 z-score 来标准化我们的数据,会对我们的数据处理更有帮助。z-score 的定义如下:

Z 为什么使用这种交易策略? Score (Value) = (Value — Mean) / Standard Deviation

  • 收集可靠的数据并且进行数据清洗
  • 从数据中来选择一些数据特征来识别交易信号
  • 特征可以选择移动平均值活价格数据,相关性或更加复杂信号 —— 或者结合一些新创建的特征来生成特征
  • 使用这些特征来生成交易信号,即哪些指令是买入的,哪些指令是卖出的,哪些指令是中性的。

第一步:定义我们的问题

在这里,我们试图创建一个信号,告诉我们下一个时间点的比值是买入还是卖出,即我们的预测变量 Y 值:

第二步:收集可靠和准确的数据

我们可以使用雅虎的 API 来使用过去 10 年的交易日内(大约 2500 个数据点):开盘价,收盘价,最高价,最低价和交易量。

第三步:分割数据

  • 采用 7 年的数据作为训练集,也就是 70% 的数据;
  • 采用 3 年的数据作为测试集,也就是 30% 的数据;

第四步:特征工程

  • 60天移动平均比率:滚动平均值的测量
  • 为什么使用这种交易策略?
  • 5天移动平均比率:平均值的当前值的测量
  • 60天标准差
  • z-score:(5d MA - 60d MA)/ 60d SD

第五步:模型选择

让我们从一个非常简单的模型开始。查看 z-score 图标,我们可以看到,无论 z-score 特征变得太高还是太低,它都趋于恢复。让我们使用 +1 和 -1 来作为我们的阈值太高或者太低,然后我们可以使用以下模型来生成交易信号:

  • 当 z-score 低于 -1.0 时,比率就是购买的信号(+1),因为我们预计 z-score 会回升到 0 ,因此比率会增加;
  • 当 z-score 高于 1.0 时,比率就是卖出的信号(-1),因为我们预计 z-score 会回落到 0,因此比率会下降;

第六步:训练,验证和优化

我们对训练数据的信号反馈还是很满意的。我们来看看这个信号那个可以产生怎么样的利润。当比率较低时,我们可以制作一个购买 1 比率(购买 1 个 ADBE 股票和卖出比率 x 个 MSFT股票)的简单策略。当卖出 1 为什么使用这种交易策略? 比率(卖出 1 个 ADBE 股票和买入比率 x 个 MSFT 比率)时,计算这些比率的 PnL 交易。

我们也可以尝试更加复杂的模型,如 Logistics 回归,支持向量机等来做出我们的 +1(-1)预测。

第七步:对测试数据进行回测

回测是非常简单的,我们可以使用我们上面的函数来查看测试数据上的 PnL(profit and loss)。

y_1,x_2,x_3,\cdots,x_n

构建盈亏序列(PNL,Profit and Loss)。盈亏序列是指当前的头寸映射到对应的历史数据序列上,即此金融产品的历史收益率序列上,获得历史上的各个时间点的盈亏值。由此可知,盈亏序列的建立必须满足两个条件,1.已经处理好的历史数据2.当前的头寸。经过处理的历史数据已经经过讨论,当前头寸可以作为参数直接输入获得,当然为了更好的结构性和扩展性的考虑我们可以把头寸写入配置文件中。用数学公式PnL=Position(头寸)*()。

避免过拟合

在我们的模型中,我们使用滚动参数估计,并可能希望优化窗口长度。我们可能决定简单的迭代所有的可能,合理的窗口长度,并根据我们的模型的最佳表现来选择长度。下面我们编写一个简单的循环来根据 PnL 值选择一个最佳的长度。

加速金融交易为什么非 FPGA 不可

交易时延的角逐
交易指令所面临的最严峻的挑战之一是需要达到更低的时延,以确保你的算法能率先完成交易、实现最高利润, 并最小化指定交易与实际交易之间的交易滑点 ( Slippage )。这场有关时延的角逐已经持续了数年时间。根据策略的不同,当进行跨时区交易时,简单的套利交易用时几纳秒,而高度复杂的策略则需要数十毫秒。无论使用或编写哪种算法,在降低时延、保持性能的同时提升算法精密度和准确度,总是不变的需求。毕竟,竞争永无休止。

FPGA 在未来交易中的地位
这种尖端技术之一就是 FPGA相关技术。FPGA 可以提供高度可确定、高度并行且低时延的平台,用于实现交易策略(以及最新的AI 算法),确保系统交易速度最快。然而,由于需要定制硬件编程并付出相关成本与时间,FPGA 技术一直以来被证明难以进入普通市场,而且往往超出普罗大众的应用能力范围,就像我们在道路上基本看不到 F1 赛车。

赛灵思在 36 年前发明了 FPGA,并始终居于 FPGA 技术的前沿。现在,赛灵思已经开发出了加速算法交易( AAT,Accelerated Algorithmic Trading)平台,这个完整的参考架构为FPGA 技术在大众金融交易市场的普及打开了大门。AAT 基于HLS 高层次综合(一种 C/C++ 风格的编程语言,旨在实现 FPGA 的广泛普及)构建,并由赛灵思 Alveo 加速器卡提供支持,Alveo 是业界首款企业级 FPGA 加速卡。赛灵思正以较低入门成本实现了基于业界领先技术的新一代交易平台。AAT 的出现,将使得电子交易软件开发者们可以前所未有的方式从 FPGA 中算法中获益。

FPGA 交易普及化之路
赛灵思有一个更为宏大的愿景,那就是致力于让 FPGA 的优势惠及更广阔的软件开发者群体,而 AAT 就是例证。这个愿景的基石是就是 VitisTM 统一软件开发平台。Vitis提供了极大的灵活性,使得开发者可以在 FPGA 上无缝构建加速应用。作为 Vitis 统一软件环境的组成部分,赛灵思提供了 Vitis 库。这是一种使用 C、C++ 或 Python 编写的开源性能优化库,提供了开箱即用的加速功能,只需对现有应用进行最少修改,甚至零修改。

赛灵思 Vitis 库的集成为量化交易员提供了一个新平台,通过加速库(其中大量库可从 Python 为什么使用这种交易策略? 运行)来加速其交易策略。

AAT 参考设计支持CME 市场数据平台( MDP )的分价格档位行情( MBP )交易数据,还能用于为经纪商、交易所、市场数据厂商、卖方厂商以及自营交易员开发丰富多样的低时延算法交易应用,同时最大限度地避免高频交易损失。

FPGA 交易应用未来展望
赛灵思还正助力用户为未来 AI 角逐做好准备。FPGA 可提供最快速的 AI 推断,同时具备高度并行的处理能力和较低的网络时延。随着 AI 成为交易策略的主要组成部分,赛灵思 Alveo 交易解决方案不必大量追加硬件,也无需定制硬件开发,就能轻松地扩展用于 AI。

使用数据驱动进行配对交易:简单交易策略

coderpai 于 2018-04-28 19:49:54 发布 5914 收藏 23

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai

使用数据驱动进行配对交易:简单交易策略

我们假设你有一对股票 X 和 Y,它们之间有一些基本的经济联系,例如这是两家生产百事可乐和可口可乐的,它们拥有相同产品的公司。你预计这两个公司的比率或者价格差异(也称为价差)随时间而保持不变。然而,由于某些愿意,比如市场变化,两个公司暂时的供求变化,一个正确机构的大量买单或者卖单,一个公司的重要消息面等等原因。这两个股票之间的价差可能会存在暂时的分歧。在这种情况下,一只股票上涨,另一只股票可能会相对下跌。如果你预计这种分歧会随着时间的推移恢复正常,那么你就可以进行配对交易。

概念解释:我们先来生成两个假股票数据

接下里,让我们生成一个伪造的数据 X ,并且通过从正太分布中绘制出它的每日收益。然后我们执行一个累积和来得到每天的 X 值。

现在我们生成与 X 有着经济关联的数据 Y ,所以 Y 的价格走势应该是与 X 相似的。我们通过对数据 X 进行建模并且添加一些从正态分布中抽取的随机噪声来建模。

协整性跟相关性非常相似,意味着两个系列之间的比值将以平均值为中心变化。我们可以将序列 X 和 Y 的关系描述如下:

其中,⍺ 为什么使用这种交易策略? 是一个常数比率,e 是白噪声。

我们可以使用 statsmodels.tsa.stattools 包来进行方便测试。我们应该可以看到一个特别低的 p 值,因为这是我们人为构建的两个序列,他们在物理上可能是协整的。

注:相关性和协整性

Correlation: 0.998
Cointegration test p-value: 0.258

Correlation: 0.007546
Cointegration test p-value: 0.0

相关度:0.007546
协整检验 p 值:0.0

这两个序列的相关性非常低,但 p 值却显示出完美的协整性!

如何进行配对交易?

因为两个协整时间序列是彼此偏离和分开的(比如上面的 X 和 Y),所以有时候价差会很高,而有时候价差会很低。我们可以通过购买一种证券并且卖出另一种证券来进行配对交易。这样,如果正确一起下跌或者一起上涨,我们既不赚钱也不赔钱,因为我们的策略是市场中立的。

回到上面的 X 为什么使用这种交易策略? 和 Y,以及它们的线 Y = ⍺ X + e,我们可以看到它们的比率(Y/X)是围绕它的平均值 ⍺ 来进行移动的,而我们赚取的钱就是从这个平均值 ⍺ 来的。为了做到这一点,我们会格外注意 X 和 Y 的比率,即 ⍺ 太高或者太低的时候:

  • 延长比率:这是当 ⍺ 比平常小的时候,我们预计它的值会增加。在上面的例子中,我们通过购买 Y 并且出售 X 来对此进行投资。
  • 缩小比率:这是当 ⍺ 比平常大的时候,我们预计它的值会减小。在上面的例子中,我们通过出售 Y 并且购买 X 来对此进行投资。

请注意,我们总是有这样一个 “对冲仓位”:如果卖出的证券亏损了,那么空头就会赚钱;如果证券的价值升高了,那么多头仓位就会赚钱,所以我们不受整体市场波动的影响。如果证券 X 和 Y 彼此相对移动,那么我们只会赚钱或者亏钱。

使用数据分析的方法来找到拥有如此规律的证券

做到这一点的最佳方式是从我们怀疑可能是拥有协整关系的证券开始,并进行统计测试。如果你只是对所有对进行统计测试,那么你将会受到多重比较偏差的影响。

多重比较偏差只是一个事实,即在运行多次测试时,错误的生成重要 p 值的机会增加了,因为我们正在进行大量测试。如果对随机数据运行 100 词测试,我们应该看到 5 个 p 值低于 0.05 的值。如果你将 n 只证券进行协整比较,你将执行 n(n-1)/2 次比较,并且你应该会看到很多不正确的 p 值,随着你测试次数的增加,这个数量也会增加。为了避免出现这种情况,我们可以选择一小部分,我们认为可能是协整的然后进行单独测试。这将帮助我们减少暴露在多重比较偏差风险之中。

所以我们试着找一些具有协整关系的证券。让我们从标普 500 指数中 —— 一篮子的美国大盘科技股中找一些具有协整关系的股票吧。这些股票运行在类似的细分市场,并可能具有协整价格。我们通过扫描这些股票,然后计算两两之间的协整,最后我们可以得到一个协整检验得分矩阵,一个 p 值得分矩阵,以及可以计算出 p 值小于 0.为什么使用这种交易策略? 05 的任何配对。这种方法容易出现多重比较偏差,实际上证券应该经过第二次验证。但是在这里,为了这个例子,我们先忽略这个。

从图中我们可以看出股票 ‘ADBE’ 和 ‘MSFT’ 是最具有协整的。为了更加放心,我们来看看它们的价格变化,以确保它确实是具有意义的。

这个比例看起来好像是为让着一个稳定的平均值移动的。绝对比率在统计学上并不是很有用,我们通过 z-score 来标准化我们的数据,会对我们的数据处理更有帮助。z-score 的定义如下:

Z Score (Value) = (Value — Mean) / Standard Deviation

  • 收集可靠的数据并且进行数据清洗
  • 从数据中来选择一些数据特征来识别交易信号
  • 特征可以选择移动平均值活价格数据,相关性或更加复杂信号 —— 或者结合一些新创建的特征来生成特征
  • 使用这些特征来生成交易信号,即哪些指令是买入的,哪些指令是卖出的,哪些指令是中性的。

第一步:定义我们的问题

在这里,我们试图创建一个信号,告诉我们下一个时间点的比值是买入还是卖出,即我们的预测变量 Y 值:

第二步:收集可靠和准确的数据

我们可以使用雅虎的 API 来使用过去 10 年的交易日内(大约 2500 个数据点):开盘价,收盘价,最高价,最低价和交易量。

第三步:分割数据

  • 采用 7 年的数据作为训练集,也就是 70% 的数据;
  • 采用 3 年的数据作为测试集,也就是 30% 的数据;

第四步:特征工程

  • 60天移动平均比率:滚动平均值的测量
  • 5天移动平均比率:平均值的当前值的测量
  • 60天标准差
  • z-score:(5d MA - 60d MA)/ 60d SD

第五步:模型选择

让我们从一个非常简单的模型开始。查看 z-score 图标,我们可以看到,无论 z-score 特征变得太高还是太低,它都趋于恢复。让我们使用 +1 和 -1 来作为我们的阈值太高或者太低,然后我们可以使用以下模型来生成交易信号:

  • 当 z-score 低于 -1.0 时,比率就是购买的信号(+1),因为我们预计 z-score 为什么使用这种交易策略? 会回升到 0 ,因此比率会增加;
  • 当 z-score 高于 1.0 时,比率就是卖出的信号(-1),因为我们预计 z-score 会回落到 0,因此比率会下降;

第六步:训练,验证和优化

我们对训练数据的信号反馈还是很满意的。我们来看看这个信号那个可以产生怎么样的利润。当比率较低时,我们可以制作一个购买 1 比率(购买 1 个 ADBE 股票和卖出比率 x 个 MSFT股票)的简单策略。当卖出 1 比率(卖出 1 个 ADBE 股票和买入比率 x 个 MSFT 比率)时,计算这些比率的 PnL 交易。

我们也可以尝试更加复杂的模型,如 为什么使用这种交易策略? Logistics 回归,支持向量机等来做出我们的 +1(-1)预测。

第七步:对测试数据进行回测

回测是非常简单的,我们可以使用我们上面的函数来查看测试数据上的 PnL(profit and loss)。

y_1,x_2,x_3,\cdots,x_n

构建盈亏序列(PNL,Profit and 为什么使用这种交易策略? Loss)。盈亏序列是指当前的头寸映射到对应的历史数据序列上,即此金融产品的历史收益率序列上,获得历史上的各个时间点的盈亏值。由此可知,盈亏序列的建立必须满足两个条件,1.已经处理好的历史数据2.当前的头寸。经过处理的历史数据已经经过讨论,当前头寸可以作为参数直接输入获得,当然为了更好的结构性和扩展性的考虑我们可以把头寸写入配置文件中。用数学公式PnL=Position(头寸)*()。

避免过拟合

在我们的模型中,我们使用滚动参数估计,并可能希望优化窗口长度。我们可能决定简单的迭代所有的可能,合理的窗口长度,并根据我们的模型的最佳表现来选择长度。下面我们编写一个简单的循环来根据 PnL 值选择一个最佳的长度。