美文网首页真格量化
真格量化入门课程——②真格量化Python策略编写思路

真格量化入门课程——②真格量化Python策略编写思路

作者: ce2a5fc7b1e4 | 来源:发表于2019-04-12 16:53 被阅读1次

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

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

    首先,真格量化使用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级别进行回测)。

    我们先介绍一下“行情切片”的概念。在国内的交易所,虽然订单撮合是“连续进行”的,但行情只是每隔一段时间(例如期货是500毫秒)对订单薄信息的“快照”。

    我们可以把每一个“快照”称为一个“Tick”。而K线是由这些Tick数据合成。

    我们使用SubscribeQuote函数来对这些“Tick”进行订阅。用SubscribeBar函数来对合成的K线进行订阅。

    只有订阅了“Tick”,才能用OnQuote来对新推送的Tick进行监听。只有订阅了K线,才能用OnBar来对新生成的K线进行监听。

    订阅并监听就是我们在实盘中处理行情的方式。而在回测时,我们是利用数据库里的历史行情进行“回放”。

    在回测中,如果“回测频率”选择“Tick”则可在Tick级别进行回测(用OnQuote来监听回放的Tick数据)。“回测频率”选择“分钟”或“每天”则可在分钟或日线级别进行回测。

    我们可以举个例子,如果我们选择回测频率为“Tick”:

    这里行情的“回放”信息与实盘的状况是最接近的,即500毫秒一个切片。

    如果我们回测频率选择为“分钟”:

    则我们回放行情的频率也会变为每分钟一次,这就省略了很多历史行情信息,当然也加快了回测的速度。用户需要自己在回测速度和回测精确程度之间进行权衡。

    回测时使用SubscribeBar函数进行行情订阅应注意,其BarType参数应当与“回测频率”参数对应(订阅BarType周期不应当小于界面上选择的“回测频率”,比如代码中BarType选择了“Min”,界面“回测频率”不应选择“每天”,而可以选择“分钟”或“Tick”):

    用户应注意真格量化支持对多个时间级别BarType的订阅,例如同时订阅BarType.Day,BarType.Min和BarType.Min15,这也意味着OnBar会被不同周期的行情订阅所触发。

    在实盘交易中,订阅行情的周期与界面上的“回测频率”选择并无关联,只取决于代码中是否有SubscribeQuote(订阅Tick行情,可以用OnQuote来驱动Tick级别交易)或是否有SubscribeBar及其所指定的BarType。

    用户应注意在实盘中,如果选择订阅Tick级别以上的时间周期,比如分钟、日周期,系统将在该周期的结束时的Tick去触发OnBar事件,比如交易标的为期货时,对于BarType为Day则在当天的15:00:00的tick触发OnBar。如果BarType选择为Min则在前一个交易日的21:00:00的tick触发OnBar。

    对于过去一段时间的历史行情,比如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编程和策略设计的技巧,能给您编写自己的量化交易策略提供灵感。

    — — — — — — E N D — — — — — —

    往期文章:

    Numpy处理tick级别数据技巧

    真正赚钱的期权策略曲线是这样的

    多品种历史波动率计算

    如何实现全市场自动盯盘

    AI是怎样看懂研报的

    真格量化策略debug秘籍

    真格量化对接实盘交易

    常见高频交易策略简介

    如何用撤单函数改进套利成交

    Deque提高处理队列效率

    策略编程选Python还是C++

    如何用Python继承机制节约代码量

    十大机器学习算法

    如何调用策略附件数据

    如何使用智能单

    如何扫描全市场跨月价差

    如何筛选策略最适合的品种

    真格量化可访问:

    https://quant.pobo.net.cn

    真格量化微信公众号,长按关注:

    遇到了技术问题?欢迎加入真格量化Python技术交流QQ群  726895887

    相关文章

      网友评论

        本文标题:真格量化入门课程——②真格量化Python策略编写思路

        本文链接:https://www.haomeiwen.com/subject/lqxhwqtx.html