金融量化分析【day112】:量化交易策略基本框架
摘要
- 策略编写的基本框架及其实现
- 回测的含义及其实现
- 初步学习解决代码错误
- 周期循环的开始时间
- 自测与自学
通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易。毕竟就像学游泳,有些东西讲是讲不懂,做过就会懂。
由于本教程是基于聚宽量化交易平台(www.joinquant.com),所以为了后续的学习,最好去注册一个聚宽量化交易平台的账号。
一、策略编写的基本框架及其实现
1、从一个非常简单的交易策略开始
先看一个非常简单的交易策略:
每天买100股的平安银行。
为了让这个策略能让计算机执行,首先,要使策略符合“初始化+周期循环”框架,像这样:
初始化:选定要交易的股票为平安银行
每天循环:买100股的平安银行
2、什么是“初始化+周期循环”框架?
为了将投资灵感高效地转化成计算机可执行的量化策略,必须基于一种模式来写,框架就是指这种模式。而此框架包含两个部分即初始化与周期循环:
初始化即指策略最开始运行前要做的事。比如,准备好要交易的股票。
周期循环即指策略开始后,随着时间一周期一周期地流逝时,每个周期要做的事。如例中,周期为天,周期循环的则是每天买100股的平安银行。
能帮助你理解这一框架的是,其实人本身日常做交易就是符合“初始化+周期循环”框架的,初始化就是已存在人脑的交易思想与知识,周期循环就是每天或每分钟地查看行情、判断、下单等行为。
3、如何把策略变成计算机可执行的程序?
通过编程将策略写成计算机可识别的代码,具体说,我们这里是用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(就是你的策略代码)的第一行,“^”符号指向的位置有错。你到代码中的这个位置看下,会发现少个冒号。
为了顺利运行策略,需要耐心解决错误,但错误的原因极度的复杂多样(所以日志的报错信息也多种多样,不止图上一种),故在此只针对例子讲下新手容易犯的错误:
- 符号要用英文输入法。下图,代码第一行的冒号是中文的,所以出错
- 拼写不要错。下图,security拼写错了
- 缩进要对齐。下图,缩进没对齐。缩进的时候可以按键盘tab键或四个空格。
- 符号要用英文输入法。下图,代码第一行的冒号是中文的,所以出错
编程界往往把错误叫bug,而不断调试去除错误的过程叫debug,做量化时也是时常听到的说法,大家应该知道下。
- 而且debug通常就是要耗费不低于
写bug写代码的时间的,所以会debug是很重要的能力,大家平时debug的时候不妨多思考下,如何更有效率的debug。当然,我们后续也会介绍些debug的技巧。
回测、编译运行、运行回测都是什么意思?
像刚刚那样,用一段时间内的历史的真实行情数据,来验证一个确定的交易策略在这段时间表现如何,这个过程叫回测。
运行回测就是是字面意思,让计算机运行这次回测,运行后会告诉你策略在这段时间表现情况,比如收益率、年化收益率、最大回撤、夏普比率等指标,而且一般也会包括下单记录、持仓记录等。
编译运行其实也是让计算机运行这次回测,不过相比于点击运行回测,编译运行的结果比运行回测要简单,只有收益率等指标,因此也速度更快。所以,当还不必要得到详细的结果时,或只是想调试下策略的代码,看是否无误可运行时,编译运行就比运行回测更方便。
周期循环具体是什么时候开始的呢?
如果策略频率为天,是每个交易日开始生效,从9:30直到15:00(从股市开市到收市),所以例子中是每个交易日9:30开市循环就开始,一天一次地循环执行买入股票的操作。
如果策略频率为分钟,是每个分钟开始时执行,所以例子中的买入股票的操作是每个交易日从9:30:00开始,然后9:31:00,直到14:59:00。接着下一天9:30:00,如此一分钟一次地循环执行的。
- 虽然频率只有为分钟和每天可选,但通过不同的代码可以实现按周按月周期循环,而且分钟级别里下单时间也是可以自己选的,不过代码的写法则与写法一和写法二那样略有不同,后面会讲到。
自测与自学
- 按教程实践下。
- 通过搜索自学K线、bug、debug的含义。
金融量化分析【day112】:量化交易策略基本框架的更多相关文章
- 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据
财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...
- 商品期货高频交易策略Tick框架
原帖地址:https://www.fmz.com/bbs-topic/1184在商品期货高频交易策略中, Tick行情的接收速度对策略的盈利结果有着决定性的影响,但市面上大多数交易框架,都是采用回调模 ...
- 金融量化分析【day112】:初识量化交易
一.摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 二.量化交易比传统交易强多少? 它能让你的交易效 ...
- 量化金融策略开源框架:QUANTAXIS
简介: QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案,是一个从数据爬取.清洗存储.分析回测.可视化.交易复盘的本地一站式解决方案. QUANTAXIS量化金融策略框架 ...
- 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)
在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...
- Python实战——基于股票的金融数据量化分析
说明:本文只是通过自己的已学知识对股票数据进行了一个简单的量化分析,只考虑了收盘情况,真实的量化交易中仅仅考虑收盘情况是不够的,还有很多的复杂因素,而且仅仅三年数据是不足以来指导真实的股票交易的,因此 ...
- 3. 量化交易策略 - https://github.com/3123958139/blog-3123958139/README.md
3. 量化交易策略 * 输入数据 - 只取最原始可靠的,如 * date * open * high * low * close * volume * 输出数据 - 根据数理统计取权重,把 o, h, ...
- day31 堡垒机尾声 + Python与金融量化分析(一)
堡垒机尾声: 代码案例:https://github.com/liyongsan/git_class/tree/master/day31 课堂笔记:file send: 1.选择本地文件 2.远程路径 ...
- AI金融知识自学偏量化方向-前提1
前提: 统计学习(统计分析)和机器学习之间的区别 金融公司采用机器学习技术及招募相关人才要求 第一个问题: 机器学习和统计学都是数据科学的一部分.机器学习中的学习一词表示算法依赖于一些数据(被用作训 ...
随机推荐
- PHP面向对象的小总结
面向对象特性: *重用性 (每个模块都可以在项目中重复使用) *灵活性 (每个模块都很轻松被替换更改的) *拓展性(在模块上添加新功能是很方便的) 类和对象的关系(类生成对象) 物以类聚:相同特性的 ...
- Java多线程基础(二)
1.多线程数据安全 线程同步:多个线程需要访问同一资源时,需要以某种顺序来确定该资源某一时刻只能被一个线程使用.从而,解决并发操作可能带来的异常. 2.同步代码块实现同步(部分代码的访问,我们希望它同 ...
- java源码equals和hashCode
equals public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject ...
- 【English】20190418
interested 感兴趣的[ˈɪntrəstɪd] arrange your time 安排自己时间[əˈreɪndʒ] If interested, please arrange your ti ...
- 文本分类实战(七)—— Adversarial LSTM模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- 前端学习-基础部分-css(二)
开始今日份整理,今日主要是CSS中很重要的一部分,就是盒模型,浮动,定位属性 1.盒模型 1.1 特性: 当对一个文档(网页)进行布局的时候,浏览器渲染引擎会根据CSS-Box模型(盒子模型)将所有元 ...
- CentOS 6.5 minimal 安装配置VMware tools
1.登录到系统,切换到root账户 2.配置网络 minimal版本默认不启动网络,所以要自己配置. 配置过程很简单,编辑配置文件 vi /etc/sysconfig/network-script/i ...
- DEV SIT UAT PET SIM PRD PROD常见环境英文缩写含义
英文缩写 英文 中文 DEV development 开发 SIT System Integrate Test 系统整合测试(内测) UAT User Acceptance Test 用户验收测试 P ...
- 如何用php实现分页效果
分页效果在网页中是常见的,可是怎样才能实现分页呢,今天做了两种方法来实现一下分页的效果 首先,我们需要准备在数据库里面准备一个表,并且插入数据,这些都是必需的前提工作了,不多说,如图所示(库名为jer ...
- flask(一)之路由和视图
01-介绍 Flask 是一个 Python 实现的 Web 开发微框架,同时具有很强的扩展能力. 02-第一个flask程序 # 初始化 from flask import Flask, url_f ...