感谢原作者:JoinQuant-TWist

转自:JoinQuant
原文链接:https://www.joinquant.com/view/community/detail/13151

重要提示:聚宽提供了非常好的数据库接口,愁没研究数据的小伙伴可以加微信(jqdata01)详细了解

量化交易策略基本框架

摘要

策略编写的基本框架及其实现
回测的含义及其实现
初步学习解决代码错误
周期循环的开始时间
自测与自学

通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易。毕竟就像学游泳,有些东西讲是讲不懂,做过就会懂。

由于本教程是基于聚宽量化交易平台(www.joinquant.com),所以为了后续的学习,最好去注册一个聚宽量化交易平台的账号。

从一个非常简单的交易策略开始

先看一个非常简单的交易策略:
每天买100股的平安银行。

为了让这个策略能让计算机执行,首先,要使策略符合“初始化+周期循环”框架,像这样:
初始化:选定要交易的股票为平安银行
每天循环:买100股的平安银行

什么是“初始化+周期循环”框架?

为了将投资灵感高效地转化成计算机可执行的量化策略,必须基于一种模式来写,框架就是指这种模式。而此框架包含两个部分即初始化与周期循环:

初始化即指策略最开始运行前要做的事。比如,准备好要交易的股票。

周期循环即指策略开始后,随着时间一周期一周期地流逝时,每个周期要做的事。如例中,周期为天,周期循环的则是每天买100股的平安银行。

能帮助你理解这一框架的是,其实人本身日常做交易就是符合“初始化+周期循环”框架的,初始化就是已存在人脑的交易思想与知识,周期循环就是每天或每分钟地查看行情、判断、下单等行为。

如何把策略变成计算机可执行的程序?

通过编程将策略写成计算机可识别的代码,具体说,我们这里是用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)

以写法二为例把剩下的代码补上后,完整代码为:
def initialize(context):
run_daily(period,time=‘every_bar’)
g.security = ‘000001.XSHE’

def period(context):
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的含义。

转:量化交易零基础入门教程之——量化交易策略基本框架相关推荐

  1. 转:量化交易零基础入门教程之——python基本语法与变量

    感谢原作者:JoinQuant-TWist 转自:JoinQuant 重要提示:聚宽提供了非常好的数据库接口,愁没研究数据的小伙伴可以加微信(jqdata01)详细了解 原文链接:https://ww ...

  2. 转:量化交易零基础入门教程之——获取典型常用数据

    感谢原作者:JoinQuant-TWist 转自:JoinQuant 重要提示:聚宽提供了非常好的数据库接口,愁没研究数据的小伙伴可以加微信(jqdata01)详细了解 原文链接:https://ww ...

  3. python怎么输出浮点数_python 零基础入门教程第 2 章:基本数据类型 (一)

    一.什么是数据类型 编程语言通过一些复杂的计算机物理底层机制,创造不同类型的数据,用来表示现实世界中的不同信息,以便于计算机更好的存储和计算. 每种编程语言都会有一些基本的数据类型用来表示现实世界中的 ...

  4. 视频教程-Python零基础入门教程-Python

    Python零基础入门教程 从2012年从事互联网至今有7年软件编程经验,曾任职国内北京互联网公司,中南林业大学授课Python 现任逻辑教育Python课程负责人,精通Python语言,精通人工智能 ...

  5. SEO零基础入门教程(外链的发布和软文编写)

    seo的作用是众所周知的,对网站进行seo优化,可以给网站带来大量的搜索引擎流量.但是想要做好网站优化也有难度,尤其是对于seo新手来说,因为缺乏理论和实战,所以seo新手需要多加练习.那么具体seo ...

  6. 九宫怎么排列和使用_剪映零基础入门教程第三十七篇:一学就会系列之九宫格小程序配音...

    很多玩儿抖音的朋友都看过九宫格视频,但是并不是每个玩抖音的人都会制作这个九宫格视频,实际这个需要借助小工具来帮忙,而常用抖音的朋友们会对剪映更加熟悉一些,且九宫格视频在剪映内的制作方式则比较简单.那么 ...

  7. 计算机pscs6教程,photoshop CS6零基础入门教程

    <photoshop CS6零基础入门教程>针对零基础学员开设,以教案和实际操作演示相结合的方式,详细地介绍adobe photoshop cs6的各项工具和命令.由浅入深.循序渐进地全面 ...

  8. finereport自学教程_办公物语丨Finereport零基础入门教程,你不可缺少的报表神器...

    原标题:办公物语丨Finereport零基础入门教程,你不可缺少的报表神器 ⌛ 小办又来了,快,搬好你的小板凳. 今天小办要着重讲一下 之前推文里提到过的制表神器. 当你逐渐发现Excel不能满足你的 ...

  9. 视频教程-ARDUINO零基础入门教程【代码编程篇】-Arduino

    ARDUINO零基础入门教程[代码编程篇] 精通各种单片机编程,有十年以上ARDUINO,51单片机/STM32/PIC/AVR编程,硬件设计,绘图,编程经验.熟悉各种常用传感器使用和物联网通讯 赵勇 ...

最新文章

  1. linux + ffmpeg + eclipse 调试
  2. linux显示不在sudoers文件中,Ubuntu无法使用sudo提权提示当前用户不在sudoers文件中...
  3. 【python技巧】“”、“”等符号操作
  4. oracle里面有emp表么,Oracle自带表(EMP)SQL语句练习
  5. 计算机等级考试属于什么培训,计算机等级是什么
  6. PhpStorm快捷键
  7. linux多线程基本编程
  8. snmp4j介绍及api使用
  9. QueryWrapper 一些常用操作 or like in 大于 小于 操作
  10. Pycharm 字体大小快捷方式设置
  11. python自动生成报告_python实现自动生成oracle awr报告
  12. 2023考研高数思维导图
  13. 增量学习(Incremental Learning)小综述
  14. Diligent Corporation获得Clearlake Capital和黑石的新投资
  15. 淘宝客微信机器人接口API开发
  16. jmeter结果树为空_Jmeter查看结果树之查看响应的13种方法[详解]
  17. Nginx Proxy Cache原理和最佳实践
  18. 【MybatisPlus】MP来实现一些特殊的查询
  19. 编译原理:LL(1)语法分析器的实现(内含代码详细注释)
  20. 三个变量存在一个协整方程_计量经济学31个简答参考答案

热门文章

  1. java 腾讯面试题_java腾讯面试题分享,2020年最新java面试题
  2. 10、CLASSIFIER-FREE DIFFUSION GUIDANCE
  3. C语言学习-分段函数求解
  4. 关于无线鼠标你知道多少?
  5. (毕业设计资料)基于STM32的物联网WiFi智能家居控制系统
  6. 扫地机器人作文说明文提纲_扫地机器人说明文500字作文
  7. jieba简易教程:分词、词性标注、关键词抽取
  8. 大学的活动之一”辩论赛“
  9. 市航天纪念钞 出门就升值
  10. linux查看日志保留时间多长的命令,Linux系统日志的一些讲解