本文是量化交易零基础入门教程的第二篇。


摘要

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

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

  • 由于本教程是基于聚宽量化交易平台(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 1def 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的含义。

python量化交易:Joinquant_量化交易基础【二】:量化策略的基本框架相关推荐

  1. QMT量化交易软件使用攻略(二)-策略编写

    [策略编辑器]是迅投专门为模型开发者设计的,集成了模型列表.函数列表.函数帮助.模型基本信 息.参数设置.回测参数等多个部分,拥有代码高亮.自动补全等便捷功能于一体的便捷的模型编辑. 开发环境 编写 ...

  2. python 交易量化模型_Python期货股票量化交易,多品种组合模型之动量策略!

    一.策略简介 动量交易策略源于股票或期货市场中的动量效应,所谓动量效应是指过去一段时间的收益较高的资产价格,那么,资产在未来一段时间内同样也能获得较高收益. 同样的,如果某一资产价格过去的波动越大,那 ...

  3. python 股票自动下单_【邢不行|量化小讲堂系列24-Python量化入门】股票自动程序化下单交易|视频教程...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用Python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 个人微信:xingbx ...

  4. python 股票自动下单_【邢不行|量化小讲堂系列24-Python量化入门】股票自动程序化下单交易 | 视频教程...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 个人微信:xingbuxing0807,有问题欢迎 ...

  5. windows2008 服务器时间格式改不过来_我用VNPY 1天时间搭建自主量化交易(程序化交易)平台...

    VNPY底层仿真回测系统目前支持上海期货交易所的CTP回测 : http://www.vnpy.cn 实盘期货(支持CTP):http://www.kaihucn.cn Simnow 上期CTP接口官 ...

  6. 简单几步,教你在服务器上实现量化交易(程序化交易)

    简单几步,教你在服务器上搭建量化交易机器人 很多同学在学习量化时会有疑虑,量化交易是个很复杂的东西,我不懂编程或者基础太差还能进行量化交易吗?在跑量化交易之前是不是需要做很长的学习准备?一件未了解的事 ...

  7. 自己做量化交易软件(44)小白量化实战17--利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计

    自己做量化交易软件(44)小白量化实战17–利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计 小白量化平台是由若干小白金融模块构成.其中包含行情接收模块,仿通达信大智慧 ...

  8. 自己做量化交易软件(23)小白量化之MetaTrader5自动交易2

    自己做量化交易软件(23)小白量化之MetaTrader5自动交易2 上一篇我们介绍了MetaTrader 5关于交易类的函数功能,这篇文章主要介绍行情获取等方面知识. 一.获取MetaTrader ...

  9. 小白入门篇:量化大神Eric跟你聊量化交易

    如果你在阅读这篇文章,那么恭喜你,与小编我,可以算是同道中人,同是量化小白一枚.鉴于身边各种量化大神经常出没,之前不时会收到读者提问的一些量化入门问题. 由于部分问题重复出现,也为了受益更多的人,小编 ...

  10. 量化进阶——理工科出身如何转做量化交易(一)

    阅读原文:http://club.jr.jd.com/quant/topic/1432622 京东金融官方资讯QQ群:456448095 有什么想咨询的都可以来询问我们 一.什么是量化对冲基金 量化对 ...

最新文章

  1. AM335x(TQ335x)学习笔记——使用dtb方式启动内核
  2. 需要支持多种操作的线段树该如何确定运算顺序?
  3. Celery + Flower + FastAPI + RabbitMQ ,Python实现异步消息队列和监控
  4. python基础之字符编码
  5. 牛刀小试、用SharePoint 实现请假管理功能
  6. 使用loadrunner编写webservice接口请求
  7. 人工智能python小程序_Python:一个可以套路别人的python小程序
  8. mPaaS:全新移动开发平台,只为打造性能更优越的App
  9. jwt重放攻击_JWT+ASP.NET MVC 时间戳防止重放攻击
  10. 高通发布《5G经济》研究:将催生12万亿美元市场
  11. 统计学习方法读书笔记14-逻辑斯蒂回归代码实现与最大熵代码实现
  12. Win10中小娜无法搜索本地应用
  13. PADS Router 布线不显示粗细问题的解决
  14. python动态是什么意思_怎么看出自己是Python什么阶段
  15. arduino串口监视器显示nan_Arduino常用的三种通信协议UART, I2C和SPI
  16. 睡眠分期中的各种特征
  17. Java内存监控程序_java内存监控工具及命令
  18. 强化学习入门项目spinning up(1)安装
  19. 【无标题】西门子smart触摸屏连接1200PLC
  20. 如何去掉德国Kilu免费空间的广告

热门文章

  1. 文件大于50M的上传到阿里云的OSS时浏览器中会出现如下错误提示:Failed to load resource: net::ERR_CONNECTION_RESET解决
  2. 环境变量中bin目录是什么,windows 环境变量中%%的作用和path的作用
  3. 扒一扒我们生活中常见的品牌小程序
  4. 【编程素质】软件质量
  5. python同步枚举(遍历)两个list_拔剑-浆糊的传说_新浪博客
  6. html文本框中加提示,如何使HTML文本框为空时显示提示?
  7. 创建自定义表情符号光标
  8. 2021-2025年中国化妆品激光器行业市场供需与战略研究报告
  9. css 鼠标离开样式,CSS3 - 鼠标移入移出时改变样式
  10. 如何知道计算机地址吗,怎么知道自己计算机的FTP地址