策略“回测美如画,实盘烂如渣”?真格量化告诉您如何处理

论坛 期权论坛 期权     
真格量化   2019-11-18 11:34   4187   0
假设我们有了一个回测表现看起来还不错的策略,我们想把它迁移到实盘运行。虽然真格量化的设计使得回测代码迁移到实盘有很高的代码复用性,但是我们还应当注意处理以下的问题。





避免未来数据


首先,我们需要理解回测和实盘策略表现会有一定差异。在实盘中我们接收到的是订阅的实时Tick行情。对于当前交易日的不同周期的分钟K线、日K线都将由这些Tick数据来合成。这里我们就会面临“变动的K线”问题。即在实盘中K线的数据随着新的Tick数据的产生会进行变化。以分钟K线为例,如下图:


在实盘时,如果用户使用GetHisData来查询最新一个K线,比如“13:31”该分钟K线,且用户通过SubscribeQuote订阅了实时行情,且GetHisData的语句包含在OnQuote部分中,则每次查询的”13:31”K线收盘价,在13:30:00到13:31:00之间,都会随着新的Tick的产生而变化。这和在回测时,选择回测频率为“分钟”或”Tick“时就有所区别。因为在回测时,通过GetHisData或SubscribeBar,系统能取到行情的最小周期即为分钟,即系统只在每个整数分钟时刻回放一次行情,能查询到的分钟线都为一个“完整的分钟”,包含了“高开低收”的完整信息,不存在实盘中的“变动的K线”问题。


也就是说对于同一根K线,回测时其包含的始终是“完全信息”(即“整根K线”,无论是该分钟刚开始时查询还是该分钟快结束时查询)。而在实盘中,在时间到达该K线的结束时间前,其包含的是不完全信息(即“半根K线”,比如该K线的收盘价、成交量会随着新的Tick产生而不断变动)。




在“分钟”级别回测时,我们依据最新的K线之前的一根K线发出交易信号,可以规避“整根K线”带来的“未来数据”问题。



另外在回测进行撮合时,系统将根据K线的完全信息按照如下规则进行成交价格判定(限价买入委托的情况),成交量根据三角分布模型估算:

在“Tick”级别回测时是根据“首次撮合”和“后续撮合”机制判定成交量。


而在实盘中,成交与否取决于委托价格与当前Tick的对手盘价格的比较,成交量也取决于当时的对手盘委托量。同样的限价指令,一般实盘的成交概率会低于回测,因为实盘状况下对手盘的价格与委托量会不断变动。







如果用户需要最大程度地提高回测的准确性,则应当选择“Tick”级别回测。当策略在Tick级别也产生了不错的回测表现时,其才有更大的概率在实盘中表现出色。



而对于无法成交的委托,我们可以考虑主动撤单智能追单。当然我们也可以一开始就是用自带撤单指令的委托类型,来规避频繁撤单风险。

账户变更


除了注意回测撮合机制和实盘的区别,我们还应注意从回测到实盘还需要进行交易账户的变更(这将决定您赚到的是“纸上富贵”还是“真金白银”)。

我们建议用一个全局变量(比如g.accountname)储存账户名称,这样从模拟账户转到实盘账户只需要一处代码改动。





账户自动登录



设置好了账户,我们还可以给其添加每日自动登录的功能。


由于每天日盘和夜盘后期货公司柜台会自动关闭,强制登出期货账户,如果不做处理程序在重新开盘后将无法进行交易。


为了实现账户的开盘自动登录,可以在OnMarketQuotationInitialEx部分(监听行情初始化事件)添加账户登录的代码,使得策略能够每天开盘前自动重登录,从而确保策略连续运行。





账户意外断线重连


开盘自动重登录只能处理固定时间段的账户断开连接状况。为了使我们的策略更加“坚固”,我们还需要考虑任意时间段账户断开连接的状况。

在很少数情况下,账户会在盘中断开连接(比如期货公司柜台系统出现问题),可以通过
在OnTradeAccountDisconnected部分监听账户断开事件,并使用定时器来自动进行断线重连。我们设置60秒后重连是为了避免被期货公司判定为账户频繁登录。



资金风险


连接断开只是各种风险中的一种,我们还应当针对其他的风险事件添加预防性的代码。


比如资金风险。为了更好地控制资金风险,用户可以通过查询账户可用资金量,来动态地调整开仓量。

当可用资金量不足时就应让策略停止开仓,以避免频繁发出无法成交的大量委托或因为仓位过重而产生风险。

当然用户也可以通过查询账户的各种资金信息来设计其他围绕资金的风控策略。







委托无法成交风险


除了资金风险还有交易风险。比如委托未能成交带来的风险(特别是对于平仓委托或套利中的单腿)。我们需要代码来对未能成交委托进行处理。


如果不希望未成交的委托长时间存在于订单薄中,可以使用交易所支持的自带撤单指令的订单类型进行委托,例如上期所、大商所、中金所支持的LimitFOK,对不能完全成交的委托立刻撤单,且不计入主动撤单统计。

如果用户希望使用比较复杂的交易策略,比如定时的撤单、自动追单或拆单,则可以使用智能单,InsertSmartOrder

合规风险


交易风险中还包括一类“合规风险”,比如自成交、频繁报撤单、过度交易等。


以自成交为例,当我们的策略比较复杂时,比如在同一个账户上运行多个策略,可能A策略发出对某个合约的买开指令,B策略同时发出对该合约的卖平指令,则可能在该合约上产生自成交(3次就可以让您名字登上交易所网站处罚通知,“不幸上榜”对程序化交易者来说非常容易)。





用户可以通过在OnStart部分开启“自成交检查”来避免自成交,系统会对可能造成自成交的委托予以拒绝。


虽然将策略从回测、模拟交易到最终迁移到实盘需要处理诸多的细节,但真格量化针对各个类型的问题都提供了完善的解决方案。我们今后还将对上文中的各个问题的处理做进一步的详细介绍,希望帮助您精心设计的策略能以最佳状态投入实盘交易。



— — — — — — E N D — — — — — —
往期文章:
Numpy处理tick级别数据技巧
真正赚钱的期权策略曲线是这样的
多品种历史波动率计算
如何实现全市场自动盯盘
AI是怎样看懂研报的
真格量化策略debug秘籍
真格量化对接实盘交易
常见高频交易策略简介

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

Deque提高处理队列效率

策略编程选Python还是C++

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

十大机器学习算法
如何调用策略附件数据

如何使用智能单

如何扫描全市场跨月价差

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

活用订单类型规避频繁撤单风险

真格量化回测撮合机制简介

如何调用外部数据




真格量化可访问:
https://quant.pobo.net.cn


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

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







分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:870
帖子:180
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP