楼主: tianjixuetu
2971 1

[交易策略] 60、【backtrader期货策略】如何用backtrader回测高频策略(tick数据)? [推广有奖]

教授

53%

还不是VIP/贵宾

-

TA的文库  其他...

投资理财书籍

威望
0
论坛币
9914 个
通用积分
38.2529
学术水平
67 点
热心指数
67 点
信用等级
61 点
经验
1211 点
帖子
714
精华
3
在线时间
1562 小时
注册时间
2009-12-16
最后登录
2024-4-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

原生的backtrader并不支持tick数据的回测,论坛里面也有一些使用者讨论如何用backtrader回测tick数据,其实,最近也一直有在思考这个问题,这篇文章就分享下,如何做。在开始之前,先分析下,这么做的一些缺点。

高频回测的测不准原理

对于中低频的趋势交易策略,如果交易量不是很大的话,单个交易策略对市场的影响微乎其微,可以只考虑市场什么情况,在这种情况下,考虑交易成本之后,回测有一定的可靠性。

高频的交易,本身可能对这个市场就有很大的影响,自身的行为就可能导致市场行为发生改变,使用历史数据回测,即使不考虑交易成本,也很难得到准确的结果。听说,很多高频策略都是直接上模拟盘,小仓位测试,到实盘。高频策略主要是靠理论支撑的,主要是以速度制胜,回测可能没有那么重要。

上面是一个没有做过高频策略的quant的一家之言,也可能不准确哈,仅供参考。


用python去回测tick数据的不足

backtrader是基于python的量化交易框架,python作为一门解释性语言,相对于C++等编译性语言,运行速度会慢上好多。而tick数据本身数据量就比较多,导致python写的量化框架,回测tick数据的时候,都需要耗时比较多。

backtrader本身机制比较完善,里面的order等,自带了丰富的信息,会导致在运行的过程中,内存会不断增大,如果回测的tick数据比较多,几十个G的内存很有可能不够。

总结一下,使用python本身速度比较慢,使用backtrader会额外消耗内存,导致,用backtrader回测大量的tick数据,是一个又慢又占内存的事,是一个事半功倍的努力。


为什么还要用backtrader来回测tick数据

不会c++等语言是一个限制

如果是专门做高频的策略的话,建议就换个平台吧。不要用backtrader了,即使用backtrader,实盘的时候也得改平台。用python去做高频,如果你有一颗慈善的心,愿意捐钱的话,当我没说。

没找到其他更好的python框架

python语言很容易学,有很多基于python的量化框架。但是,到目前为止,还没有找到,或者没有注意到,有哪家是能够支持tick数据的回测的。

backtrader本身有很大的优势

backtrader的优势,就不需要我一遍遍去强调了。

如何用backtrader来回测期货的tick数据

因为backtrader对数据提供了很好的扩展功能,对于高开低收成交量持仓量等之外的数据,可以很容易添加进来。具体的扩展数据的案例,可以参考本文。

如果要改造tick数据,应该怎么做呢?

1. 期货的tick数据,都包含哪些内容?

这是我用一个软件采集的期货的tick数据,包含了下面的字段:

localtime (本机写入TICK的时间),
InstrumentID (合约名),
TradingDay (交易日),
ActionDay (业务日期),
UpdateTime (时间),
UpdateMillisec(时间毫秒),
LastPrice (最新价),
Volume(成交量) ,
HighestPrice (最高价),
LowestPrice(最低价) ,
OpenPrice(开盘价) ,
ClosePrice(收盘价),
AveragePrice(均价),
AskPrice1(申卖价一),
AskVolume1(申卖量一),
BidPrice1(申买价一),
BidVolume1(申买量一),
UpperLimitPrice(涨停板价)
LowerLimitPrice(跌停板价)
OpenInterest(持仓量),
Turnover(成交金额),
PreClosePrice (昨收盘),
PreOpenInterest (昨持仓),
PreSettlementPrice (上次结算价),

2. backtrader在回测的时候需要传入的数据

backtrader传入数据的时候,一般都是需要使用到open\high\low\close这四个价格,为了符合回测的逻辑,让最新价等于open\high\low\close,并且可以额外添加几个列,比如AskVolume1(卖量一),BidVolume1(买量一)。

这样做有一个缺陷:使用限价单的时候,其实并不能知道能不能成交。比如价格6元的买订单,最新价在5.9元的时候,是会成交的,但是并不能知道最新价在6.00的时候会不会成交。这是一个缺陷。

如果想要避免这个,就需要开发逐tick回测的模式。

目前这个只是基于bar进行的改造,是对现实的一个逼近。理论上是存在更好的回测方法的。

处理原始数据,生成backtrader需要的数据

import pandas as pdimport numpy as npdata = pd.read_csv("c:/result/rb2105.csv")data['datetime']=pd.to_datetime([str(x)+" "+str(y)+"."+str(z) for x,y,z in zip(data['ActionDay'], data["UpdateTime"],data['UpdateMillisec'])])data['open'] = data['LastPrice']data['close'] = data['LastPrice']data['high'] = data['LastPrice']data['low'] = data['LastPrice']data['volume'] = data['Volume']data= data[['datetime','open','high','low','close','volume','AskPrice1','AskVolume1','BidPrice1','BidVolume1']]data.to_csv("rb2105.csv",index=False)

3. 使用backtrader回测期货tick数据的一个小案例

注:这个策略是toy strategy,仅仅是为了测试tick数据随手编写的,大家可以根据自己的需要,改进相关的策略逻辑。

相关的策略代码可以在原文中找到。

————————————————

版权声明:本文为CSDN博主「云金杞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:60、【backtrader期货测策】如何用backtrader回测期货tick数据?_云金杞-CSDN博客


二维码

扫码加我 拉你入群

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

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

关键词:trader Trade Back Tick der

今天,我持续不断地改进自己,在各方面,我会越来越好!
沙发
harbix 发表于 2021-12-28 23:56:11 |只看作者 |坛友微信交流群
用backtrader来回测tick数据

使用道具

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

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 16:17