楼主: lcbin
2306 1

[讨论交流] 股聚集公众号原创文章转载:一个自用的通用型回测平台都需要包含哪些要素? [推广有奖]

  • 3关注
  • 3粉丝

已卖:3206份资源

讲师

45%

还不是VIP/贵宾

-

威望
0
论坛币
2377 个
通用积分
7.2000
学术水平
5 点
热心指数
7 点
信用等级
4 点
经验
13528 点
帖子
394
精华
0
在线时间
580 小时
注册时间
2008-8-29
最后登录
2025-5-8

楼主
lcbin 发表于 2016-3-1 10:57:48 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

关注股聚集,阅读更多干货文章。

欢迎分享,转载时请注明出处。


我想每个做量化的人基本上都用过不止一个有回测甚至交易功能的平台。我最早接触的是TradeBlazer(TB),但是发现TB支持的数据结构和回测机制问题,我用TB做回测越来越少了,不过TB的交易功能在一直使用。后来在同事的感染下用起了MATLAB,在获得操作数据自由的同时,也耗费了一些时间建立和回测相关的配套基础设施。再后来当基础设施完善后,一个对于当时的我有点ambitious的想法油然而生:


其实一开始我写过第一个版本的回测,估计只有1000-2000行MATLAB代码,功能也十分有限,功能没有足够的模块化,只是一串代码实现了回测的功能,但是要面对不同策略、参数和数据时,重新调整费时费力,不过对当时的我来说已经是能力所及了。时隔大概1-2年后,我又开始谋划着写一个,这一次花费了我大概2-3个月的业余时间,从构思到最后验收,写了超过4000行的代码,实现了模块化,批量回测,可视化等功能。




到底一个自用的通用型回测平台需要包括哪些功能或者模块呢?绝大多数人都会对此有个概念,但我想说的可能会更多一点。


首先,一定是数据获取。由于回测所用的数据来源广泛,格式不一,且最好是高频,因此数据获取方式就变得十分繁杂。期货数据一般可以从CTP、TB获取,我首推CTP是因为不需要太复杂的代码就能免费获取国内4个期货交易所的tick数据,且马上CTPII要出来,证券和外盘的tick数据也会可得,不过有吹风说原油数据可能会收费(每个人都能付得起的说),股票数据可以从通达信导出,外汇现货可以用MT4获取等。


第二是数据获取后,格式要统一转换。一般来说转换的目标格式是自定义的,可以预见的是,不同来源的数据拥有不同的字段,很多时候一些字段都是无用值,比如期货买2以上的数据一般都是没有提供的,除非所购买的是五档行情。所以我个人认为在保存最初原始的一份数据后,需要按需求筛选出未来可用的数据,放弃无用数据。


第三,数据清洗,虽然第二点也可以称为数据清洗,但是这里的清洗是指对开收盘的时间做一点处理,由于下一步要转换行情数据周期,因此开收盘的时间要做对应修改,比如9点开盘时,录得的数据通常存在8点59分的情况,如果不修改直接做1分钟的周期转换,那么当日的第一个K线是8点59分的那一个开盘价,而不是随后9点后的第一分钟的数据。


第四、行情数据周期转换。除了直接测试高频策略(一般高频策略测试结果都不太可靠),一般都要面对K线,这些都需要额外合成,因此如果能在数据库内合成就很有必要,不必导致最后要使用时临时合成。


各位,都说数据的处理才符合80/20定律的80%部分,我是深有体会,以上四点最好能在服务器端自动批量完成吧。回测除了数据,下一步要准备策略和指令处理。




第五是策略,策略这块虽然因人而异,但是需要做到的是外围向策略模块提供所有必须的接口,包括时间、价格、仓位、资金等,也就是说需要做到的是尽可能让策略代码和其他代码隔离开,这样以后只需要基于外围直接写策略代码即可。


第六是和策略配合的指令处理,作为回测,指令无需传递给交易所,这里的处理是指记录指令,更新仓位,计算盈亏,记录出入金和净值变化。


其中指令需要记录时间、品种、策略名称、单号、方向、价格、数量、止盈止损、类型(止盈或止损),以及使用者所希望保存的数据(如开仓时某个技术指标的值,这个也可以放在指令之外获取),仓位要更新,尤其是平仓时买卖配对,进而计算所平仓位的盈亏以及剩余仓位的实时浮盈,如果有出金或者入金,还需要及时记录,算出出入金和盈亏后的资产净值。


第七是根据交易记录,计算全部的盈亏、统计策略性能指标如胜率、盈亏比,以及输出图表实现可视化。如果是测试多个资产的表现,可能还需要列出资产组合的表现,资产组合的出现意味着必须要存在一个资金管理模块来统筹分配资金。



我想上述七个步骤都是大家能想得到的必要组成部分,但是我认为在这个基础上还可以做的更多:


首先是交易指令的细化,包括根据考虑流动性后的成交情况,甚至模拟FOK或者FAK。

其次是算法交易,这块内容个性化较强,适合在自有平台上实现。

最后是并行加速,虽然一次测试可以评估资产组合的表现,但依然可以考虑并行计算或者计算机集群来加快测试,尤其是交易算法中含有较为复杂的模块,如神经网络这类组件。


市面上的软件很少有现成的这些功能,因此很多情况下需要自己编程实现,因此至少在这块领域,无论平台是否是自用的,都需要根据自己的独特需求来开发。






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:原创文章 tradeblazer matlab代码 MATLAB matla 通用 文章

已有 1 人评分论坛币 收起 理由
fantuanxiaot + 22 精彩帖子

总评分: 论坛币 + 22   查看全部评分

沙发
works_han 发表于 2018-12-1 17:38:02
不错不错

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-24 21:38