搭建事件驱动型回测框架很难吗?有这个模版就相当简单!

Posted 元宵大师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建事件驱动型回测框架很难吗?有这个模版就相当简单!相关的知识,希望对你有一定的参考价值。

前言

引入量化回测可以帮助我们验证策略的有效性,这是一个非常有必要的环节。虽然回测和实盘会有一定的区别,但是只要我们充分注意到回测过程中可能出现的一些陷阱,大概率上回测阶段是可以反映出实盘效果的。

市面上也出现了很多相关的平台,比如米筐Ricequant,聚宽Joinquant,掘金Myquant,优矿Uqer,镭矿Raquant,果仁网,Factors, 宽帮Bigquant, 国泰安,同花顺量化,WIND量化,天软等等。

对于个人交易者来的确有很多可供选择的量化回测平台,其中有一些确实做的也非常不错。

不过很多时候我们赚钱的策略是天马行空、脑洞大开、奇思异想的策略,这些通用的回测平台并不能满足个性化的需求。如果想要长期立足于股市,从长远来看搭建属于自己的本地量化回测平台是一条必经之路。

其实很多专业的机构都是用自己平台的,作为个人交易者我们也应该未雨绸缪,一步步地积累起来。

搭建自己的平台并不一定是复杂的,而是要适合自己的投资策略,很多时候反而是大道至简的交易逻辑可以帮你盈利。这里的关键点是要找到内在的盈利逻辑,并且策略要和大多数人使用不同。

矢量型回测VS事件驱动型回测

我们在知识星球的主题中有专门对比过两个回测模式的优缺点。这里不再赘述。总的来说,如果想要更接近于实盘交易,更倾向于事件型回测。

事件型回测在原理上不同与矢量化回测,它不需要一次对全部数据进行统计分析,而是模拟实际的市场环境,把数据“滴灌”到处理程序上,然后以事件方式处理交易信号、委托下单以及订单成交。这样的好处一方面是不容易出现“未来函数”,另一方面可以灵多地构建自己的处理逻辑。

事件型回测的缺点一方面是执行速度较慢,另一方面是实现起来比较复杂。不过执行速度慢只是比矢量型回测慢,绝对的开销时间其实也并没有很长。

不过,实现起来比较复杂倒是真的,为了帮助大家以最快的方式搭建出自己的事件驱动型回测平台,这里提供给大家一个最小化的框架模版,一来供大家学习内在实现原理(即使是使用第三方平台,了解回测的过程可以帮助我们更好编写策略),二来大家可以在这个基础上根据自己的需求二次开发。

最小事件驱动型回测框架

事件驱动型回测框架整体流程如下图所示:

基于以上的流程,回测框架需要包括以下几个模块:

  1. 市场样本数据:获取回测周期范围内真实的股票行情数据,比如收盘价、开盘价、最高价、最低价、成交量等等。

  2. 自定义策略:根据样本数据计算策略指标,依据策略的逻辑产生交易信号,然后提交订单。

  3. 账户管理:根据策略产生的交易信号,模拟下单、更新仓位和账户资金

  4. 可视化评估:回测完成后用图表显示策略的执行效果

  5. 回测框架:把上述的模块集成在框架中,对样本数据采用遍历的方式,提交给策略模块,策略模块以事件方式提交订单给“虚拟券商”,如果订单成交的话则对证券账户进行仓位和资金的更新,最终完成整个回测的过程。

回测框架模版使用方法

框架目前实现了以下几个类:

初始化时需要创建一个Backtester类,输入股票代码和回测开始和结束时间。初始化账户资金、添加策略和数据获取源。如下所示:

backtester = Backtester("600352", '20180101', '20220114')
backtester.init_broker(100000) # 设置初始资本为10万用于单个股票交易
backtester.add_strategy(MeanBreakStrategy())
backtester.add_data(MarketDataSource())

关于订单管理,是通过队列方式进行管理的。另外需要说明下,目前并未考虑手续费,也未考虑滑点等因素,大家需要知晓一下。

关于策略,此处用了一个单均线突破的策略作为案例。

策略交易信号逻辑:当前一日收盘价突破20日均线一定幅度后买入,同理当收盘价跌破20日均线一定幅度后卖出。

策略的仓位管理逻辑:产生买入信号后,固定仓位买入,产生卖出信号后,全部卖出。

后续如果大家要制定自己的策略,策略逻辑及仓位管理逻辑可以任意编写,只要产生信号后调用买入on_buy_signal()或on_sell_signal()方法即可。

对于这个策略回测结果的评估,目前用的是绝对利润方式,也就是说显示的是赚了多少钱或者亏了多少钱。如下图所示:

上述图表的信息指的是,10万元的初始资金,每次买卖5000股,最终可以盈利12万左右。

负责任的说,虽然看起来不错,但是这个策略目前的回测结果还不能说明问题。大家后续可以做进一步的测试,以下提供一些方向:

  • 选择该股处于牛市、熊市、震荡市的数据进行测试,观察回测结果

  • 修改策略的参数,比如20、21、22等等,观察回测结果有无显著变化

  • 选择多只股票进行测试,观察是否同样可以获取相当的利润

  • ……

总的来说,这个回测框架是一个基础版的框架,后续大家可以根据自己的需求逐步去完善。

说明

1. 我们会把完整的源码上传到知识星球《玩转股票量化交易》中,帮助小伙伴们更好地掌握这个方法。

2. 想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利,名额有限先到先得!

元宵大师的量化交易书籍开售!!
京东、当当、天猫有售!!

自动化测试框架很难吗?我不觉得,不信你看

开发语言的选择

  有的小伙伴要纠结很长时间到底是用java还是Python,还是Perl,Ruby等等。首先根据公司要求去选择开发语言,如果没有要求,根据自己经验,如果有java基础可以选择java。但推荐使用Python,有代码基础的话,上手更快。没语言经验的话更推荐使用Python,易学,语法相对简单。

 

开发语言学习中遇到的问题:

         1、开发语言学习中,总会遇到各种难理解的问题(悟性高的大神忽视)

      如:我在学习返回值的时候就遇到这个return的问题,。return返回的是啥?什么时候返回?在实例中怎么运用?实在很难理解的可暂时跳过

    2、Python我要学到什么程度才能去做自动化??

      答:学完类和面像对像就基本可以了

    3、有些小伙伴觉得代码简单就不去练习,只看视频和博客。一定要记得多练习!一定要记得多练习!好记性不如烂笔头!一定不要复制代码!

       4、学习中过程听他们说Python有啥好学的,学其它的吧。千万要稳住,不要动摇!不要三心二意!!要坚持!

加入313782132,群里有测试学习资料、面试技巧、内推机会。

我到底是先学接口测试还是Ui测试呢?

     1、首先看公司需求,一般大点的公司都会指定你先做哪一种自动化

     2、如果小公司啥要求也没有,只要求你做自动化,先做接口!为什么!因为接口效率高,实用性强。Ui自动化还得用selenium或appium中定位等等,太费时间。其中appium搭环境搭的你怀疑人生!

 

什么是自动化测试的中框架?

  其实在学习的过程就很多模块都是框架中要用的(学的时候你可能不清楚为啥我要学这个模块?啥时候用?)比如以下模块:os、time、zmail等等。

  框架比喻是人的身体,身体的每个器官都很重要的作用。那代码框架中也如此,我们来拆开代码框架一步步分析。

  那框架,我们拆开分析一下?

    1、测试用例----既然是做测试,肯定会有测试用例,这里我们就要用到测试用例

         2、测试数据----既然说有测试用例,那么肯定就会有测试数据存放的有不同的类型(txt,excel,yaml等等)

    3、数据驱动----代码和测试数据一定要分离

    4、测试报告----做完测试后,总得要有个报告给领导看吧?要不然领导问你测的怎么样了,你说不知道?

    5、邮件模块----领导有一天说,你测试完把报告发到我邮箱吧

    6、日志模块----测试过程中有问题的话,得去查看报错日志

    以上框架中常用到的一些模块,可根据自己情况适当添加

 

学习自动测试框架的难点在哪?

  缺一个好的老师?

  没有好的框架思路?

  框架内部的文件是如何完美的衔接起来?

  什么是好的测试框架?

以上是关于搭建事件驱动型回测框架很难吗?有这个模版就相当简单!的主要内容,如果未能解决你的问题,请参考以下文章

python量化哪个平台可以回测模拟实盘还不要钱

Python分析数据难吗?某科技大学教授说,很难但有方法就简单

自动化测试框架很难吗?我不觉得,不信你看

短信hz,批量注册模拟登陆很难吗?一个Python爬虫案例告诉你答案!

读写分离很难吗?Spring Boot 结合 aop 简单就实现了

批量注册模拟登陆很难吗?一个Python爬虫案例告诉你答案!