四、如何在真格平台上做到这一切

现在我们想在真格量化上实现自己的策略,需要怎么做呢?

首先,真格量化使用Python语言编写策略。我们需要对Python语言有一些初步的了解。与C++或Java语言相比,Python是一种非常方便易用的脚本式编程语言,很适合非计算机专业的用户来上手量化交易。

举个简单的例子,如果直接用C++调用CTP的API进行下单委托,您可能需要写这些代码:

在真格量化,您只需要一行Python代码:

省下的时间,您可以用来研究策略,或者做些更有意义的事情。

4.1平台IDE不止是开发环境也是运行环境

真格量化由一个简洁的网页版Python编辑器、提供海量数据的数据库和用于运行策略的性能强大的服务器构成。用户在编辑器里写好策略代码后,可以直接去回测、交易模拟盘或交易实盘。用户无需在本地数据库、本地编译环境、云服务器上的各种软件之间频繁切换,无需自己花费时间精力去记录市场数据,也不用为优化网络、内存等硬件性能而头疼。

回测与模拟、实盘三合一的设计使得代码复用性得到了显著提高。策略研究代码只需极少量的改动就可投入实盘交易。

4.2 真格量化中的Python策略编写思路

4.2.1 事件驱动的设计思路

真格量化的策略设计应遵循“事件驱动”的开发思路。当新的“事件”(比如新的价格数据或者账户状态的变化)被推送到策略程序时,程序将调用和这个事件相对应的处理函数来进行相关操作。

这和我们最常使用的顺序式编程略有不同。程序执行各个任务的先后顺序取决于是否监听到了特定事件的发生。事件驱动型程序在启动后就处在一个循环当中。这个循环就在监听各种事件。真格量化中可监听的事件及其对应的监听函数如下表:

这些事件可以分为以下几类:

举个例子:

为实现每天开盘前实盘账户的自动登录,我们可以用OnMarketQuotationInitialEx函数去监听交易所行情初始化这个事件,当事件源(也就是交易所)发送事件时(发出行情初始化信息),监听该事件的监听函数(OnMarketQuotationInitialEx)就会收到消息并作出响应(比如登录实盘账户)。

我们也应当注意,行情数据是需要订阅的(通过SubscribeQuote或SubscribeBar函数)。只有被订阅的品种的行情才会被持续推送到相应监听函数(比如OnQuote或OnBar函数)。不订阅行情就不会有行情数据来驱动相应的监听函数。

下边这个例子展示了用不同的事件去驱动不同的操作。比如用“开始事件”驱动“登录账户”函数,用“开盘事件”来驱动“订阅行情(K线)”函数,用“K线更新事件”来驱动“计算均线”函数。

使用事件驱动的设计思想,我们可以通过监听到的各种“消息”和响应函数的各种“指令”将程序的各部件连接起来。

对于事件驱动型程序,我们还可以将其中各个组成部分划分为“元素”和“操作函数”:

元素包括:

事件源

事件监听器

事件对象

操作函数包括:

监听动作函数

发送事件函数

调用监听函数的响应函数

我们在编写策略时应注意区分元素和操作函数,了解一个操作需要哪些事件的发生作为启动条件,及监听到一个事件发生后可以采取哪些动作。

4.2.2 数据订阅

不同周期的行情订阅:

在事件驱动部分,我们已经介绍了策略程序要依靠订阅行情来驱动。在回测或实盘交易时,我们可以通过选择不同的时间周期参数,来指定策略在相应的”时间周期“上进行操作(例如策略是在分钟级别交易还是在Tick级别交易)。

在回测中,如果”时间周期“选择“Tick”则可以通过SubscribeQuote获得历史的tick行情。”时间周期“选择”分钟“则可通过SubscribeBar函数获得1~240分钟这些不同分钟周期的历史K线行情。”时间周期“选择”每天“则可以通过SubscribeBar函数订阅”天“、”星期“、”月“、”季度“、”年“这些更长周期的历史K线行情。

在实盘交易中,如果”时间周期“选择”Tick“则可以通过SubscribeQuote获得最新的tick行情。”时间周期“选择”分钟“则可通过SubscribeBar函数获得1~240分钟这些不同分钟周期的最新的K线行情。”时间周期“选择”每天“则可以通过SubscribeBar函数订阅”天“、”星期“、”月“、”季度“、”年“这些更长周期的最新K线行情。

使用SubscribeBar函数应注意,其BarType参数应当与“时间周期”参数对应:

例如”时间周期“选择”每天“,SubscribeBar函数的BarType参数可以根据需要写成BarType.Week,BarType.Month, BarType.Day等。”时间周期“选择”分钟“,SubscribeBar函数的BarType参数可以根据需要写成BarType.Min3,BarType.Min15,BarType.Min等。

而对于过去一段时间的历史行情,比如2018年12月1日到2019年3月1日之间的所有日K线,可以通过GetHisData函数来查询。

4.2.3 交易相关处理

我们在交易中最常处理的就是与账户有关的各种信息。

真格量化中与账户相关的信息,都可以视为“对象”。比如账户本身可以作为一个对象,可以调用其各种“方法”,比如登录、查询成交、进行风控等。

例如,账户的登录方法:

而查询到的账户的成交、持仓等信息,本身也可以作为对象,有与之对应的”属性“和”方法“。比如对于一个”委托对象“可以查询其委托价格、数量等属性,以及查询委托是否可撤等方法。

例如,通过监听委托状态变化(OnOrderChange)来查询委托的一些属性:

4.3 Python应当怎么写

对于Python初学者,可以参考“菜鸟教程”,学习基础的语法。当您掌握了Python的循环控制、数组和函数的知识,就已经可以使用真格量化的大部分功能。

对于 Python 编程有一定经验的用户,可以仔细阅读“真格量化API文档”(这里API文档的重要程度,相当于飞行手册对于飞行员的重要程度,您在真格量化中80%的问题都可以在API文档里找到答案)以及参考“Python for Finance-Analyze Big Financial Data”等专门介绍Python在金融领域应用的教程。在真格量化微信公众号(在微信搜索“真格量化”)和知乎(在知乎搜索“真格量化”)上也有不少与真格量化相关的Python编程和策略设计的技巧,能给您编写自己的量化交易策略提供灵感。

python量化需要什么基础_真格量化入门课程——②真格量化Python策略编写思路相关推荐

  1. Ex6_机器学习_吴恩达课程作业(Python):SVM支持向量机(Support Vector Machines)

    Ex6_机器学习_吴恩达课程作业(Python):SVM支持向量机(Support Vector Machines) 文章目录 Ex6_机器学习_吴恩达课程作业(Python):SVM支持向量机(Su ...

  2. Python 数据挖掘与机器学习基础-韦玮-专题视频课程

    Python 数据挖掘与机器学习基础-252人已学习 课程介绍         Python 数据挖掘与机器学习基础 课程收益     Python全栈工程师 讲师介绍     韦玮 更多讲师课程   ...

  3. python后端需要什么基础_【后端开发】python爬虫需要什么基础

    入手爬虫确实不要求你精通Python编程,但基础知识还是不能忽视的,那么我们需要哪些Python基础呢? 首先我们先来看看一个最简单的爬虫流程: 第一步要确定爬取页面的链接,由于我们通常爬取的内容不止 ...

  4. 如何找到python廖雪峰基础_为什么看不懂廖雪峰的Python学习教程?

    先不要怀疑自己的智商,也许是你完全没有编程基础,这个时候,可以选个视频课程看看,B站还有各路公开课上有很多,自己找找. 或者觉得这样有点麻烦,那就花点钱,买个基础入门课程学学,试试下面的链接. 我觉得 ...

  5. python 数组合并排重_并排深度学习:Julia vs Python

    python 数组合并排重 Julia could possibly be the biggest threat to Python. For a variety of applications, J ...

  6. python模块cv2人脸识别_手把手教你使用OpenCV,Python和深度学习进行人脸识别

    使用OpenCV,Python和深度学习进行人脸识别 在本教程中,你将学习如何使用OpenCV,Python和深度学习进行面部识别.首先,我们将简要讨论基于深度学习的面部识别,包括"深度度量 ...

  7. python难度大的题_早看少被坑!Python 最难的问题

    超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...

  8. python构造方法与java区别_一张图秒懂Java和Python的区别,你知道吗?

    对于程序员的语言千千万JAVA\C\C++\PHP\Python不同的程序员使用着不同的语言,做着功能相似需求却不同的产品. 但是最近Python在人工智能的推动下突然出现在人们的面前,其实和Java ...

  9. python爬虫挖掘平台搭建_一篇非常棒的安装Python及爬虫入门博文!

    原标题:一篇非常棒的安装Python及爬虫入门博文! 一. 大数据及数据挖掘基础(私信小编007即可获取大量Python学习资料!) 第一部分主要简单介绍三个问题: 1.什么是大数据? 2.什么是数据 ...

  10. [Python图像处理] 一.图像处理基础知识及OpenCV入门函数

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

最新文章

  1. 工程建筑行业SAP整体解决方案
  2. 计算机技术在排水领域的应用,浅谈计算机技术在市政给排水中的应用.doc
  3. Android编译笔记四
  4. 在${}中为甚么采用@Param及多参数查询@Param
  5. python机器学习入门(Day1:Numpy)
  6. linux syslog 笔记
  7. 自动驾驶_感知_分割_车道线检测
  8. 风哥Oracle数据库视频培训教程大合集(网盘下载.共18套)
  9. ajax中php写法,jQuery中AJAX写法
  10. 完全卸载chrome
  11. 故障恢复控制台的启动方法
  12. Python 爬取朋友圈最新方法!!(文末赠书)
  13. 国产芯片传来好消息,纯国产CPU测试数据“曝光”
  14. 【GamePlay】UGUI的注意事项
  15. 微信小程序搭建项目起步
  16. 万能解压器安卓版_全能压缩软件下载-全能压缩 安卓版v11.5.8-PC6安卓网
  17. excel mysql仓库管理_用Excel表格设计仓库管理系统,里面加上数据库,并附上详细说明1、每次采购入库的物料逐渐消耗的过...
  18. autoit3 自动安装腾讯QQ【版本QQ2011Beta3】
  19. android app自动化测试框架Appium资料整理
  20. Java 基础实验 找出1000以内的完数

热门文章

  1. java pdf打印_Java 打印PDF文档(3种方式)
  2. iOS崩溃日志ips文件解析
  3. mac电脑如何设置开机启动项
  4. php中用div句子给背景图片添加文字,PHP给图片添加文字水印实例
  5. 3D打印机USB联机打印是如何实现的?(以Cura插件USBPrinting为例)
  6. 【算法】02 SCE-UA简介及源代码
  7. android更改深色模式,安卓微信怎么切换深色模式
  8. 程序员的第一款 Hello World
  9. python实部和虚部_Python复数表示表示和计算
  10. 使用pandas比对Excel表格,把不同数据列出