主页 > imtoken冷钱包手机版 > 高频量化策略回测如何预估滑点成本的影响?

高频量化策略回测如何预估滑点成本的影响?

imtoken冷钱包手机版 2023-01-19 02:48:50

策略回测最重要的是什么?速度?华丽的性能指标?答案很准确!是的,回测的目的是验证策略的逻辑性和可行性。这也是回测本身的意义,其他都是次要的。只有能够真实反映策略历史数据的回测才有参考价值。那些看似完美的回测曲线可以讲述一个故事,但在真实的市场中却不能。

回测需要哪些数据

如何实现准确的回测是很多量化交易者关心的问题。首先要弄清楚交易中有哪些数据,因为数据的好坏很大程度上决定了回测的好坏。很多人可以想到K线图上的开盘价、最高价、最低价、收盘价、成交量等。为了更好的区分,我们将这些数据统称为 Bar 数据,可以理解为 K 线。但是你有没有想过这些数据是从哪里来的,这些数据的来源是什么?

实际上,在交易所返回的数据中,只包含了 Tick 数据,并没有包含这些 Bar 数据。什么是 Tick 数据?你可以把交易所里的数据想象成一条河流,这条河流包含了每一个订单的详细数据,国内的Tick数据就是这个数据流中的一个切片,频率是每秒2次,就是某一个行情在那个时候。交易情况再现。

然后,柱数据基于分时数据,并根据时间段进行划分。1 分钟柱数据由 1 分钟的分时数据组成,5 分钟柱数据由 5 分钟的分时数据组成,依此类推。...形成了各种分钟图表、小时图表、日图表等。一分钟的 K 线只有一个 Bar 数据,但可能包含 120 个 Tick 数据。因此,回测的历史数据可以分为:Bar数据和Tick数据,而同期Tick数据量远大于Bar数据。

基于 Bar 数据的回测

高频交易如何打败滑点_程序化交易测试滑点_滑点和点差到10个点

市面上几乎所有的量化交易软件都支持 Bar 数据的回测。由于数据量少,大大简化了回测引擎的工作量,所以这种回测通常速度很快,几秒内就能拿到十年左右的数据。回测结束后,堆叠几十个期货品种回测不会超过一分钟。但是Bar数据回测存在很多问题:

1、极端价格

做过交易的都知道,涨停难买,跌停难卖,但回测可以交易。过滤后回测的结果会与实际行情不一致。

2、价格真空

从跌停的那一刻到涨停或价差上涨,在大周期的K线图上看起来像是一条大的正线,但是在这个K线中间没有实际挂单和挂单-线。如果您是实时价格交易策略,则 In Bar 数据经过回测,可以进行交易。

例如:当前K线一直在5000附近徘徊,收盘附近立即上涨至5100,中间几乎没有挂单和成交。如果你的策略是在这条K线上5050开仓,可以在Bar数据回测中交易,这种现象很常见。

滑点和点差到10个点_程序化交易测试滑点_高频交易如何打败滑点

3、窃取和未来的数据

相信很多量化交易者都遇到过这种坑,而那些45度的回测曲线大多出自这里。为了让大家更容易理解,我再举一个例子:我们知道一条K线有4个价格。如果是1分钟正线,那么这条K线的形成应该是:开盘价>>>最低价>>>最高价>>>收盘价。

但是,大周期的K线不会这么简单。它可能先创出新高,再创出新低,然后收盘;它也可能创出新低,然后创出新高,然后收盘;它甚至可能先创出新低,然后再创出新低。新高、新低、高收盘;表面上看是一条有上影线和下影线的K线,中间如何形成有很多可能性。

如果这条K线是这样的:开盘价4950、最低价4900、最高价5100、收盘价5050,普通的正线。你的策略是:最新价格超过前期高点5000买入,买入后设置1%的止损,即价格跌破4950,止损。

OK,开始回测:

开盘价4950突破前期高点5000建立买入平仓信号高频交易如何打败滑点,获利1%;

但实际情况可能是这样的:

滑点和点差到10个点_程序化交易测试滑点_高频交易如何打败滑点

开盘4950,价格突破前期高点5000,买入信号成立,价格很快开始回落,继续下跌至4949,止损信号成立,卖出,跌幅1%。价格上涨5100,价格下跌至5050。

你看,上面的例子,同样的策略,同样的数据,其实会有两个完全不同的结果。原因是因为数据不同。在Bar级别的回测中,如果你用日K线来回测,你无法知道这几天K线是如何形成的。如果你用小时K线回测,你无法知道这些小时K线。怎么形成的等等,一句话:Bar data test什么的,弱爆了!

基于分时数据的回测

如果可以使用 Tick 数据进行回测和分析,无疑具有很大的优势。但是,目前市场上似乎还没有一个量化交易平台可以真正对Tick数据进行回测和分析。例如,MT4 使用插值模拟数据。这只是一个模拟的数据变化,而不是真实的分时数据。

当然,也有软件声称能够进行 Tick 级回测。名字我就不说了,但是这些软件在设计回测引擎的时候犯了一个致命的错误,那就是:看价格。什么意思?如果当前tick数据是:卖价5001、买价5000,如果我的买单挂单是5000,结果肯定买不到,但事实并非如此。

要知道,在真实的交易环境中,我们下的订单是在交易所的Tick数据流中匹配的。交易所的匹配规则为:价格优先,时间优先。如果此时市价单不是太厚,我下的5000买单可能是被动成交。

基于市场数据的回测引擎原理

滑点和点差到10个点_高频交易如何打败滑点_程序化交易测试滑点

因此,Inventor Quant(fmz.com)的市场级回测引擎应运而生,它不仅根据Tick数据的价格优先级匹配订单。同时也按照同价位进行优先排序,通过计算市场挂单的成交量,判断当前挂单是否满足被动成交条件,实现基于成交量的成交。实现对真实市场环境的真实模拟。我们以下图为例:

为了便于理解,上图并排显示了转瞬即逝的 Tick 数据:

一、第一个tick,买入价为100,挂单量为30手;这时买入信号来了,以100的价格买入20手;生成第二个tick,买价100,挂单量50手,我们的挂单有20手;生成第三个tick,买价为100,挂单量为30手,证明有20手买单被成交或取消,我们离成交又近了一步;生成第 4 个刻度,买入价为 100,挂单量为 10 手。这是一个大卖家,他一次吃掉了我们所有的采购订单,并且完成了。

通过上面的例子我们可以发现,在Tick数据中,在价格没有变化的前提下,我们可以通过挂单数量的变化来计算我们的挂单是否是被动交易的。它使用相同的价格和时间优先方法。该回测引擎最大程度模拟真实真实的交易环境,杜绝价格交易和虚假交易,并允许真实回放各行情数据,使回测尽可能与真实行情保持一致。测试是有意义的。

采用哪种方式进行回测?

在这个平台中,Bar、Tick 和市场级别的回测同时存在。每个量化交易者可以根据自己的交易策略使用不同的回测引擎,而且无论你使用哪种回测引擎都不需要修改策略代码,每种回测方式都可以无缝切换。

程序化交易测试滑点_高频交易如何打败滑点_滑点和点差到10个点

中低频策略的回测不需要复杂的撮合引擎,因为这类策略的交易量并不多,滑点成本对策略本身不会有很大的影响。一般在回测时只需要再添加几个即可。只是跳和滑。由于中低频策略在几年内只交易了几十次,通常使用 Bar 级回测就足够了。真正需要注意的是过拟合的问题。对于一些日内交易或涉及日内开平仓交易的策略,如果需要,也可以在回测的配置参数页面调整数据粒度。例如,在以 1 小时为周期进行回测时,可以将其调整为更精细的 15 分钟数据。力量。

由于高频交易中的策略交易数量充足,单个产品一天可以交易几十甚至上百次高频交易如何打败滑点,所以只要匹配引擎合理,那么在大数定律的作用下,回测结果基本可靠。一般不存在过拟合的问题。但是,由于高频交易数量众多,需要对回测引擎有非常高的要求。

因为在高频交易回测中,交易频率越高,持仓时间越短,单笔交易的平均利润越低。如果不一样,就会出现“差价千里”的现象,所以对于高频交易来说,盘口级别的回测引擎是最好的选择。

盘口数据回测

通过用 C++ 编写的高频做市策略(也支持 Python 和 JavaScript 编写策略),我们将向您展示市场级回测的工作原理。您可以点击下面的链接完全复制该策略并进行在线回测。下图取自日志信息。注意,2019-07-12 14:59,我们以 2231 的价格买入 1 手,以 2232 的价格卖出 1 手。

演示策略是在跳跃时平仓。这时候开仓后,我们在2232平仓挂单,平空仓2231平仓。根据传统的 Tick 级别回测,此挂单价格无法平仓。但是,平台的市场级回测引擎会不断计算挂单量的变化。当到达第三个tick数据时,根据交易所的撮合机制,价格相同,时间优先。我们的余额 长期挂单的被动交易。