Quantopian自学笔记03
LESSON 5 Algorithm API
在上一章中我们学习了如何创造一个 data pipeline 来为我们的策略挑选投资对象,以及计算这些对象,各种资产的情绪分数。接下来的课程将会在 Quantopian 的 IDE 中构建,所做的内容即我们在 IDE 中建立交易策略,把 data pipeline 连接上,并将计算的情绪分数应用在资产组合的构建。接下来我们将会在更加实际逼真的条件下,通过在历史数据上的模拟结果,分析我们的策略的表现情况。这种在历史数据上的模拟通常叫做 backtesting 回测。
Algorithm API & Core Functions 算法应用接口和核心函数
下一步要做的就是用 Quantopian 的 Aglorothm API 应用接口为我们的交易算法建立一个基础的结构。Aglorithm API 提供了一些函数帮我们更简单的安排命令和进程(execution),并允许我们做初始化以及管理在算法中的参数。来看一下有哪些核心函数我们会用到:
initial(context)
initial 初始化是当我们的策略开始运行并且需要 context 即一些设置的时候特定调用一次的,任何的参数初始化以及一次性启动逻辑都安置在这里。
context 背景设置是扩增的 Python 字典对象,用来在模拟过程中保持稳定(的环境?以防一些关键的东西发生改变),并且可以在我们算法策略的各个部分中被引用。任何一个我们想要在函数调用中始终保持不变的参数都应该储存在 context 里面而不是以全局变量的形式保存。如果想要看 context 中有什么变量或者是做初始化的改动,可以使用 context.some_attribute 来操作。
before_trading_start(context, data)
before_trading_start 是每天市场开盘之前就会调用一次,同时需要 context 和 data 两个内容作为输入。context 是从 initial 中的字典的一个引用,data 是一个包含了一些 API 函数的客体,函数们的功能包括查看各种资产的当下或者历史的价格数据以及交易量之类的数据。
同时 before_trading_start 获取了我们 pipeline 的输出结果,并用已经获得结果的数据来进行一些我们策略构建需要提前预备的计算过程。
schedule_function(func, day_rule, time_rule)
在 Quantopian 中,正常的交易日允许我们在西部时间早上9:30到下午4:30(美股市场?)这段时间进行交易,遵从NYSE trading calendar,就一个规定,schedule_function 允许我们在特定的日期执行常规的函数。例如,我们安排一个函数来重新平衡每一周的第一个交易日开市时我们的资产组合,代码如下:
schedule_function(rebalance,date_rule = date_rules.week_start(),time_rule = time_rules.market_open()
)
日程安排的函数应该在初始化的时候就完成,使用的 custom functions 也需要用 context 和 data 作为参数。date_rules 和 time_rules 中有许多的变量,可以在文档中查看。
接下来给我们的交易策略搭建一个基本的框架 skeleton,现在我们就让我们的策略在过去的一段时间上运行,然后追踪并且记录根据交易发生时刻以及时间长短所产生的不同影响。接下来的几章就在整合 pipeline 和 trading logic 交易逻辑。
为了运行我们一个范例的策略,将下面的代码点 Clone 拷贝一份。进入 IDE 之后点击 Build Aglorithm 或者是 Run Full Backtest 来运行回测。
def initialize(context):# Initialize algorithm parameterscontext.day_count = 0context.daily_message = "Day {}."context.weekly_message = "Time to place some trades!"# Schedule rebalance functionschedule_function(rebalance,date_rule=date_rules.week_start(),time_rule=time_rules.market_open())def before_trading_start(context, data):# Execute any daily actions that need to happen# before the start of a trading sessioncontext.day_count += 1log.info(context.daily_message.format(context.day_count))def rebalance(context, data):# Execute rebalance logiclog.info(context.weekly_message)
点击 Build Aglorithm 之后就可以看到,在 log 日志区域有标记着时间的事件记录,每个交易日都会显示现在是运行的第几天以及每周的第一个交易日都会有一条 ‘ Time to place some trades ! ’ 的日志,正如我们在 before_trading_start 中以及初始化 initial 做的那样。
LESSON 6 Data Pipeline
接下来就是如何将我们在 Research 中建立的 pipeline 和我们的策略整合在一起。一个与 Research 不同的点就是,在整个回测的过程中,我们的 pipeline 都是每天运行的,所以不需要给出 start_date 和 end_date 参数。
为了在算法中使用 pipeline,我们要做的第一步是在初始化的时候添加一个引用,这个实现使用 attach_pipeline 方法,它需要两个输入:一个对我们 pipeline 对象的引用,即 make_pipeline;另一个是一个 String 的名字来指定它,就是给它一个名字。
# Import Algorithm API functions
from quantopian.algorithm import attach_pipelinedef initialize(context):# Attach pipeline to algorithmattach_pipeline(make_pipeline(),'data_pipe')# Schedule rebalance functionschedule_function(rebalance,date_rule=date_rules.week_start(),time_rule=time_rules.market_open())def before_trading_start(context, data):passdef rebalance(context, data):pass
如上所显示的,我们的 pipeline 将会在每天开市之前传输数据流以及生成一个输出。我们可以通过 pipeline_output 函数来在 before_trading_start 中获取 pipeline 的输出结果,这就需要我们在初始化的时候赋予 pipeline 的名字,将会得到 pipeline 以 pandas DataFrame 格式返回的结果。现在我们就用我们的 rebalance 函数来记录从 pipeline 输出中的结果中的前十条内容作为日志的内容。
# Import Algorithm API functions
from quantopian.algorithm import (attach_pipeline,pipeline_output,
)def initialize(context):# Attach pipeline to algorithmattach_pipeline(make_pipeline(),'data_pipe')# Schedule rebalance functionschedule_function(rebalance,date_rule=date_rules.week_start(),time_rule=time_rules.market_open())def before_trading_start(context, data):# Get pipeline output and# store it in contextcontext.output = pipeline_output('data_pipe')def rebalance(context, data):# Display first 10 rows# of pipeline outputlog.info(context.output.head(10))
虽然乍一看,rebalance 函数定义之后在初始化中的 schedule_function 调用,但是 context.output 是在 before_trading_start 中才去获取了 pipeline 的输出,所以才可见在初始化中所设定的内容是会贯穿后面各个部分的。
现在把我们在 Research 中创建的 make_pipeline 函数完整地添加到我们的策略中。不像我们在研究中所做的限制资产的数量,我们的算法现在是考虑交易空间中所有的有情绪分数的资产。为了做到这一点,我们使用 notnull 方法做为一个过滤筛选的装置来过滤我们情绪分数的输出结果,并将它与交易空间的交易作为我们所考虑的对象。
# Import Algorithm API functions
from quantopian.algorithm import (attach_pipeline,pipeline_output,
)# Pipeline imports
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.psychsignal import stocktwits
from quantopian.pipeline.factors import SimpleMovingAverage
from quantopian.pipeline.filters import QTradableStocksUSdef initialize(context):# Attach pipeline to algorithmattach_pipeline(make_pipeline(),'data_pipe')# Schedule rebalance functionschedule_function(rebalance,date_rule=date_rules.week_start(),time_rule=time_rules.market_open())def before_trading_start(context, data):# Get pipeline output and# store it in contextcontext.output = pipeline_output('data_pipe')def rebalance(context, data):# Display first 10 rows# of pipeline outputlog.info(context.output.head(10))# Pipeline definition
def make_pipeline():base_universe = QTradableStocksUS()sentiment_score = SimpleMovingAverage(inputs=[stocktwits.bull_minus_bear],window_length=3,)return Pipeline(columns={'sentiment_score': sentiment_score,},screen=(base_universe& sentiment_score.notnull()))
我们的策略现在会每天挑选出一个交易空间,里面的对象就是有情绪分数的可交易资产,然后也会输出情绪数据供我们来确定我们资产组合中各类资产的比重。下一章我们将会学习如何基于我们 pipeline 得到的情绪分数构建一个最优的资产组合。
Quantopian自学笔记03相关推荐
- Quantopian自学笔记01
听了一个前辈的指导,说学习量化可以在 quantopian 这个平台上学习,虽然国内也是有相关的,但是还是想训练自己的英文能力,于是还是决定看外国的.然后百度了一下相关的教程很少,不知为啥用的人不多, ...
- Quantopian自学笔记04
LESSON 7 Portfolio Management 上一章中我们把 data pipeline 包含进了我们的策略中,现在就是要定义我们如何利用生成的数据来重新平衡重新布局我们的资产组合.我们 ...
- Quantopian自学笔记02
LESSON 4 : Strategy Analysis. 在学会了如果导入数据并 manipulate 操纵数据后,我们就要试着为我们的 long-short equity strategy 构建一 ...
- 黑马训练营自学笔记(03)
---------------------- Windows Phone 7手机开发..Net培训.期待与您交流! ---------------------- 对ViewState的一些认识 ...
- 网络安全自学笔记03 - 交换机技术
交换机技术概念 一.交换机工作在数据链路层 1.数据链路层功能 数据链路的建立.维护与拆除 帧包装.帧传输.帧同步: 为了使传输中发生差错后只将有从.错的有限数据进行重发,数据链路层将比特流组合成以太 ...
- Linux自学笔记 | 10 常用命令 - 压缩解压类
Linux自学笔记 | 10 常用命令 - 压缩解压类 Linux自学笔记 | 01 文件系统和目录结构 Linux自学笔记 | 02 VIM编辑器的安装与使用 Linux自学笔记 | 03 Linu ...
- Java自学笔记——Java面向对象——04.抽象类、接口、内部类
Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...
- 【机器学习自学笔记4】朴素贝叶斯分类器
title: [机器学习自学笔记4]朴素贝叶斯分类器 date: 2020-10-29 18:34:29 categories: 机器学习 tags: 机器学习 概率论 贝叶斯分类是一类分类算法的总称 ...
- pytorch自学笔记
pytorch和tensorflow是机器学习的两大框架,上一篇帖子已经完整梳理了TensorFlow自学的知识点,这一篇把自学pytorch的知识点也整理下来,内容参考了网上很多帖子,不一一引用了, ...
最新文章
- 百度地图在jsp页面加载大量轨迹导致地图卡顿
- 云计算如何对传统软件交付方式产生影响
- 运用Handler.post()方法进行数据更新跟用Message对比(18)
- 备战美赛,这些你应该知道的知识点
- Java基础学习总结(151)——Java 8时间处理API再复习
- 我可以在CSS中使用onclick效果吗?
- 关于破解广州天翼校园 + 小米路由器实现自动上网 突破wifi限制
- DeviceOrientation ---实现指南针
- 服务器系统https打不开网页,解决网站启动HTTPS出现重定向过多网页打不开问题...
- Chrome浏览器通过chrono下载插件设置下载断点续传
- 有人说:世间唯一无刺的玫瑰,就是朋友。
- feign+hystrix相关超时时间配置问题
- Spring Boot的Maven插件Spring Boot Maven plugin详解
- 联想微型计算机如何设置u盘启动,联想电脑怎么设置U盘启动
- Flutter -- Element生命周期
- Mybatis——面试问题
- 计算机用户被停用,电脑教程:Windows7用户被停用解决方法
- Traffic Manager
- AT、CVT、双离合有什么优缺点?
- PLSQL_自治事务和嵌套事物的理解和用法(案例)