经过前文对量化交易有了一个基本认识以后,咱们开始学习作量化交易。毕竟就像学游泳,有些东西讲是讲不懂,作过就会懂。python
因为本教程是基于聚宽量化交易平台(www.joinquant.com),因此为了后续的学习,最好去注册一个聚宽量化交易平台的帐号。编程
先看一个很是简单的交易策略:框架
天天买100股的平安银行。
为了让这个策略能让计算机执行,首先,要使策略符合“初始化+周期循环”框架,像这样:编程语言
初始化:选定要交易的股票为平安银行 天天循环:买100股的平安银行
为了将投资灵感高效地转化成计算机可执行的量化策略,必须基于一种模式来写,框架就是指这种模式。而此框架包含两个部分即初始化与周期循环:函数
初始化即指策略最开始运行前要作的事。好比,准备好要交易的股票。学习
周期循环即指策略开始后,随着时间一周期一周期地流逝时,每一个周期要作的事。如例中,周期为天,周期循环的则是天天买100股的平安银行。网站
能帮助你理解这一框架的是,其实人自己平常作交易就是符合“初始化+周期循环”框架的,初始化就是已存在人脑的交易思想与知识,周期循环就是天天或每分钟地查看行情、判断、下单等行为。debug
经过编程将策略写成计算机可识别的代码,具体说,咱们这里是用python这门编程语言。调试
另外能够用聚宽的向导式策略生成器,这种方法是不需编程的,但灵活性上不免是远不如写代码的。日志
这并不是三言两语就能说清,尤为是对于没有编程基础的人。因此咱们将经过后续的内容逐步地介绍。首先咱们将学习“初始化+周期循环”框架代码的写法。
写法一
def initialize(context): 这里是用来写初始化代码的地方,例子中就是选定要交易的股票为平安银行 def handle_data(context,data): 这里是用来写周期循环代码的地方,例子中就是买100股的平安银行
写法二
def initialize(context): run_daily(period,time='every_bar') 这里是用来写初始化代码的地方,例子中就是选定要交易的股票为平安银行 def period(context): 这里是用来写周期循环代码的地方,例子中就是买100股的平安银行
来到聚宽网站后,经过导航栏-个人策略-个人策略进入策略列表,点击新建策略-
进入策略编辑页,左侧就是策略代码编辑区域,初始会默认给你提供代码模板,全删除后写入咱们的代码就行了。
写法一是从前的老写法,将逐步弃用,写法二是聚宽系统改进后的新写法,推荐使用写法二。
def、context等都是什么意思?
实际上是在调用聚宽提供好的函数,展开讲很复杂,不理解的话先记住,后面的学习内容会让你理解。
剩下的两行代码这么写。彻底理解须要学习后续的内容,此处不要求理解。知道大概什么样子往哪里写便可。
选定要交易的股票为平安银行:
g.security = '000001.XSHE'
买100股的平安银行(市价单写法):
order(g.security, 100)
以写法二为例把剩下的代码补上后,完整代码为:
是的。以写法二为例,如图把代码写到策略编辑区,设置好初始资金与起止时间(好比初始资金100000元,起止时间20160601-20161231),频率设置整天。点击编译运行,运行结束后就能够看到结果了。
能够看到,若你20160601有初始资金100000元,每一个交易日尝试买100股的平安银行,到20161231,你的收益曲线将如图中蓝线般增加。图中红线是基准收益(默认是沪深300指数,表明整个市场增加水平)
接下来,点击运行回测,运行结束后就能够看到更为详细的结果,包括下单记录、持仓记录等。
首先注意,右上角的箭头按钮能展开运行日志。看到日志中,最后一行是错误的提示信息:
SyntaxError: invalid syntax 汉义是 语法错误:不合法的语法
最后一行以前的是错误的位置信息,通常只看后面就行。
File "user_code.py", line 1 def initialize(context) ^
意思是文件user_code.py(就是你的策略代码)的第一行,“^”符号指向的位置有错。你到代码中的这个位置看下,会发现少个冒号。
为了顺利运行策略,须要耐心解决错误,但错误的缘由极度的复杂多样(因此日志的报错信息也多种多样,不止图上一种),故在此只针对例子讲下新手容易犯的错误:
编程界每每把错误叫bug,而不断调试去除错误的过程叫debug,作量化时也是时常听到的说法,你们应该知道下。
像刚刚那样,用一段时间内的历史的真实行情数据,来验证一个肯定的交易策略在这段时间表现如何,这个过程叫回测。
运行回测就是是字面意思,让计算机运行此次回测,运行后会告诉你策略在这段时间表现状况,好比收益率、年化收益率、最大回撤、夏普比率等指标,并且通常也会包括下单记录、持仓记录等。
编译运行其实也是让计算机运行此次回测,不过相比于点击运行回测,编译运行的结果比运行回测要简单,只有收益率等指标,所以也速度更快。因此,当还没必要要获得详细的结果时,或只是想调试下策略的代码,看是否无误可运行时,编译运行就比运行回测更方便。
若是策略频率为天,是每一个交易日开始生效,从9:30直到15:00(从股市开市到收市),因此例子中是每一个交易日9:30开市循环就开始,一天一次地循环执行买入股票的操做。
若是策略频率为分钟,是每一个分钟开始时执行,因此例子中的买入股票的操做是每一个交易日从9:30:00开始,而后9:31:00,直到14:59:00。接着下一天9:30:00,如此一分钟一次地循环执行的。