本文是量化交易教程的第二篇

(原文写的比较简单,编程的详解部分面向没有编程基础的人)

  • QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客
  • QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSteel - CSDN博客
  • QUANT[3]:量化交易之下单、函数、API - プロノCodeSteel - CSDN博客
  • QUANT[4] 策略篇(算法篇):MACD指数详解进阶 - プロノCodeSteel - CSDN博客
  • QUANT[5] 聚宽joinQuant 官方文档API doc - プロノCodeSteel - CSDN博客
  • QUANT[6] 量化交易常见概念解析 - プロノCodeSteel - CSDN博客
  • QUANT[7] 基础知识之 未来公式的定义与使用 - プロノCodeSteel - CSDN博客
  • QUANT[8] Joinquant 聚宽库中的全局变量 - プロノCodeSteel - CSDN博客
  • QUANT[9] KeyError: '300453.XSHE' 解决方案 - プロノCodeSteel - CSDN博客
  • QUANT[10]量化交易——因子暴露度,因子收益与模型 - プロノCodeSteel - CSDN博客

摘要

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

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

  • 由于本教程是基于聚宽量化交易平台(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的含义。
  • FROM:www.joinquant.com

听说 点赞+关注 的人三天内bug减少80%哦(///ω///)

QUANT[2]:量化交易策略基本框架搭建相关推荐

  1. 转:量化交易零基础入门教程之——量化交易策略基本框架

    感谢原作者:JoinQuant-TWist 转自:JoinQuant 原文链接:https://www.joinquant.com/view/community/detail/13151 重要提示:聚 ...

  2. 量化交易策略基本框架

    摘要 策略编写的基本框架及其实现 回测的含义及其实现 初步学习解决代码错误 周期循环的开始时间 自测与自学 通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易.毕竟就像学游泳,有些东西讲是 ...

  3. 聚宽量化交易策略基本框架

    JoinQuant-TWist 策略编写的基本框架及其实现 回测的含义及其实现 初步学习解决代码错误 周期循环的开始时间 自测与自学 通过前文对量化交易有了一个基本认识之后,我们开始学习做量化交易.毕 ...

  4. QUANT[6] 量化交易常见概念解析

    QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSteel - CSDN博客 QUANT[3]:量化交 ...

  5. QUANT[10]量化交易——因子暴露度,因子收益与模型

    QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSteel - CSDN博客 QUANT[3]:量化交 ...

  6. 中低频量化交易策略研发03_注意事项与应对

    3.1 未来信息的规避 未来函数对于回溯测试的可靠性有负面的影响,因此在实际的策略研发过程当中是需要极力规避的.最直接的办法莫过于将研发完成的量化交易策略放入实际环境中进行模拟交易或者实盘交易,原因在 ...

  7. 【量化干货】用python搭建量化交易策略(附零基础学习资料)

    前言 技术已成为金融行业中的战略资产.而传统的金融机构现在正在转型成为科技公司,而不仅仅是专注于该领域的金融方面.(文末送读者福利) 数学算法带来了创新和速度,它们可以帮助我们在市场上获得竞争优势.金 ...

  8. 《量化炼金术-中低频量化交易策略研发》读书笔记-序言,引言

    序言: 1.'圣杯'的找寻 2.策略复制性的强大 3.策略的时效性和解释能力的周期性 4.量化的本质是将思维转化为数理化规则,借由代码为工具进行直观表述 5.量化流程设计与思考,量化策略构建 6.本书 ...

  9. 为什么股票量化交易策略可以归类为均值回归与动量策略?

    大部分股票量化交易策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的,交易将无利可图.均值回归是金融学的一个重要概念,指股票价格无论 ...

最新文章

  1. java生成sql语句_java生成SQL语句
  2. 三个数从小到大排序—南阳acm
  3. (转)PowerDesigner教程系列(二)概念数据模型
  4. 如何写论文?看下这份《科研论文撰写策略》为你指点一二
  5. 【sklearn第一讲】scikit-learn 简介
  6. 2022年C语言教程入门和最新C语言自学教程C语言进阶教程大全
  7. 象棋游戏显示服务器断开,天天象棋黑屏闪退怎么办 游戏玩不了解决方法
  8. UART协议就应该这么理解
  9. 嵩天《Python数据分析与展示》实例1:图像的手绘效果
  10. 人生的意义到底是什么?
  11. 1373:鱼塘钓鱼(fishing)
  12. Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-buil
  13. 编译报错undefined symbol: vtable for
  14. WORD禁止自动更新域
  15. Google Earth Engine(GEE)最全632个数据集在哪里找?文章末含名称!
  16. centos 虚拟机glibc升级_CentOS 6.5升级Glibc
  17. @Autowired,@Resource和@Referrence的区别
  18. 如何把未压缩的.avi文件批量地转为.yuv文件(yuv420)?
  19. 数据结构 顺序表La和Lb合并
  20. 2018最新AdobeCC设计软件大全 绿色一键安装包

热门文章

  1. python卡尔曼多维_kalman filter using python
  2. 阿里巴巴2019财年Q1财报:连续六季度高速增长,加码投资未来
  3. 协方差与皮尔森相关性系数
  4. 计算机实时控制和过程控制,实时控制程序
  5. 网上说的神乎其神的python到底怎么样?值不值得小白学习?
  6. 从零开始开发一个自动抓取教务系统课表等信息并动态显示的安卓课程表APP,原理分析及功能实现完美教程
  7. 无锡清空win8应用商店缓存_微软surface常用清理内存缓存解决办法
  8. MATLAB 学习笔记:1 定义和使用矩阵
  9. 东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录
  10. 浅谈EditorConfig、Prettier以及Eslint的使用