Writing a Contest Algorithm
本教程将:
给一个概述的quant竞赛和它是如何工作的(第一课)。
- 浏览竞赛算法所需的每个标准(课程2-10)。
- 就如何编写或修改算法以满足竞赛标准提供指导(课程2-10)。
- 向您展示如何测试您的算法是否符合竞赛标准(第十一课)。
本教程不会:
教你如何研究和实现一种quant策略(为此,你应该参考入门教程)。
lession 1 introduction
Contest Overview
- 这个比赛每天都会给写在quant上的顶级定量交易算法颁发现金奖励。该竞赛旨在评估具有代表性的多空股票策略。因此,contest算法需要具有一定的结构属性。本教程将简要介绍contest如何工作,然后介绍每个必需的结构属性,并提供如何满足这些需求的指导。
标准
- 为了参加比赛,算法需要满足一组特殊的标准。这些标准用于选择具有代表性的多空股票策略。算法需要具备以下属性才能参加比赛:
1.正回报。
2.利用0.8倍- 1.1倍之间的杠杆。
3.比较低的头寸集中度。
4.beta-to-SPY很低。
5.中等换手率。
6.多头和空头头寸。
7.在流动性好的股票之间交易。
8.行业风险敞口低。
9.对风格风险的低暴露。
10.使用优化API下订单。
- 有关所需标准的所有细节,请参阅比赛的官方规则。本教程的第11课有一个笔记本,您可以使用它来查看您的backtest是否通过了所有的竞赛标准。
竞赛标准在2年的回测中被检查,并且每天重新检查你的算法在竞赛中的表现。如果你的算法在任何时候都不符合一个或多个条件,它将从竞赛中退出。如果您的算法被取消,您可以修改它,使它满足所有的条件,然后重新提交它。
本教程后面将更详细地讨论和解释每个标准。每节课都集中讨论其中的一个需求,并提供如何编写满足每个标准的算法的建议。
提交一个算法
- 要参加比赛,你需要编写一个算法,运行一个完整的backtest,然后点击’ enter contest '。在参加比赛后,您的算法将被回测从2年前直到最近的交易日。比赛标准将在2年内进行测试。如果你的算法通过了所有的标准,它将在下一个交易日后被评分和排名,并出现在排行榜上。如果你的算法没有达到任何一个标准,你将会收到一封电子邮件,告诉你你的项目被撤回了,连同你的特定标准都失败了。
得分及排名
- 满足所有结构标准的竞赛算法在每个交易日之后根据分数进行排名。算法的得分是基于它的样本外收益和波动性。算法获得了高回报和低波动性的高分。
- 算法提交后的每一天,算法的日收益除以跟踪的63个交易日的波动率,计算波动率调整日收益(VADR)。该算法的分数是该算法提交竞赛以来的vadr之和。
- 在每个交易日结束时,参与者根据他们提交的最高分进行排名。每天排名前十的参与者将获得现金奖励。
lesson 2 Order with Optimize API
要求是什么?
- 您的算法需要使用order_optimal_portfolio函数下所有订单。这是优化API的核心功能,也是在quant上将投资组合从一种状态移动到另一种状态的最佳方法。比赛中不允许使用quantapi中的其他排序方法。
为什么需要它?
- order_optimal_portfolio函数是我们内部实时交易基础结构中支持的惟一一个订购函数。每个接收到分配的人都必须更新该算法以使用优化API。我们正在引导社区在流程的一开始就使用优化API,而不是在最后才使用它。这将使模拟成为一个更好的预测交易性能。
你怎样才能满足这个要求呢?
入门教程的第7课教你如何使用order_optimal_portfolio下订单。通读这一课是学习order_optimal_portfolio基础知识的最佳方法。为了满足这个需求,您需要使用order_optimal_portfolio将您的投资组合从一个状态移动到另一个状态。
lesson 3 Liquid Universe
要求是什么?
- 你的算法必须只投资于QTradableStocksUS资产池(简称QTU)的股票。
为什么需要它?
- 你的战略体系是它的基础。您希望资产池尽可能大,但是只包含与平台功能相匹配的资产。对于quant,这意味着我们可以可靠地找到数据的资产,适合我们的风险管理,我们可以在一个多算法的投资组合中使用,我们可以以合理的交易成本进行交易。QTradableStocksUS是满足这些quant需求的最大的资产池。此外,QTradableStocksUS的所有组成部分都包含在风险模型中。
你怎样才能满足这个要求呢?
- 使用 QTradableStocksUS pipeline 过滤器作为你的基础。通常,这可以通过简单地在pipeline中设置screen=QTradableStocksUS来实现(如果您不熟悉pipeline,请参阅管道教程)。如果您计算了管道外的资产权重/预期阿尔法,那么在将股票传递给order_optimal_portfolio之前,您可能需要检查您想要订购的股票是否在QTU中。有一些宽松内建的竞赛要求-竞赛算法在技术上要求有至少95%的资本投资于股票的QTU,所以你有一些时间来调整你的投资组合,如果你的算法持有的股票跌出了QTU。
- 下面是一个提供QTradableStocksUS示例:
from quantopian.pipeline import Pipeline
from quantopian.pipeline.experimental import QTradableStocksUS
def make_pipeline():
return Pipeline(
columns={
# Your pipeline columns go here.
},
screen=QTradableStocksUS()
)
- 注意,有多种方法可以使用pipeline过滤器,如QTradableStocksUS。有时将其作为筛选提供是合适的,有时可能需要将其作为掩码提供给另一个pipeline术语。要了解有关过滤器和pieline的更多信息,请参阅pipeline教程。
lesson 4 Position Concentration
要求是什么?
- 你的算法不能在任何一项资产上投资超过其资本基础的5%。
为什么需要它?
- 在任何一种资产上投资过多,都会使算法暴露于头寸风险。如果你的大部分资本投资于一项资产,而该资产的价格发生显著变化,那么你的投资组合的价值也会发生显著变化。通过对大量资产进行几笔规模较小的投资,可以降低资产大幅缩水的风险。
你怎样才能满足这个要求呢?
- 当您调用order_optimal_portfolio时,包含一个PositionConcentration约束。例如,你可以像这样定义1%的头寸集中度:
import quantopian.algorithm as algo
import quantopian.optimize as opt
MAX_SHORT_POSITION_SIZE =