请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3353170 新帖:53

关于动态复权与技术指标数据对比

外汇交易达人发表于:5 月 10 日 06:27回复(1)

关于动态复权

众所周知,前复权数据是会随着除权的进行发生改变的,比如站在今天看X股1年前某天的前复权价为P1,但是如果明天该股发生了除权,那么一年前那天的前复权价就会跟着改变,不再是P1,如果直接使用前复权数据回测就会使回测发生了失真并且带有未来信息,因为你已经知道了这只股票将会发生分红。比如在05年看到的前复权价可能有5块钱,但站在今天来看却只有几分钱。
Image of Yaktocat
 而平台的动态复权完美解决了这个问题,回测的逻辑时间点上获取的就是当前逻辑时间所能看到的最新的前复权数据:
Image of Yaktocat

1,为什么回测中取到的前复权数据和其他平台相差很大?

同学们经常用我们回测中得到的动态复权数据和其他平台的前复权数据进行对比,这当然会出现不一致的问题,如果您必须对比的话,可以注释掉策略初始化函数中   set_option('use_real_price',True)   这句代码关闭动态复权,但我们强烈建议开启动态复权模式进行回测!

2, 为什么我明明取的是前复权价,为什么看上去是未复权的数据呢?

重要的事情说三遍:动态复权不是不复权!动态复权不是不复权!动态复权不是不复权!

这还是因为动态复权的原因,实际上你拿到的的确是前复权数据,只是您看到的那一段时间内没有发生除权,所以看上去是未复权的价格。
  比如在2005年7月21发生分红,此后一年之内都未再次发生除权,那么您在整整一年时间内拿到的2005年7月21之后的数据的确是没有复权的,但在那个时间段内拿到的7月21之前的数据是基于21日进行除权的,所以数据为动态前复权数据。
动态复权,不复权,一般的前复权数据对比:
30f8f418de2637180400cb0150c648c.png
从对比图上也可以看出普通的前复权数据和实际偏差有多大,这就产生了很多统计精度(直接用前复权数据计算出的跌涨幅等),未来数据(已知将来会发生除权,对比估值数据等)的问题,所以强烈建议开启动态复权!!!

3,模拟交易中的交易价格为什么比实际价格高?

猜测您肯定忘记在模拟交易中设置动态复权了,如果您未开启动态,那么回测时的成交价将会使用基于模拟交易建立那一天计算出的后复权价进行成交,所以强烈建议您开启动态复权!

关于技术指标库

首先我们的技术指标库的算法和通达信,东方财富和同花顺等一致。
但是为什么会和其他平台产生差异呢?

1,各平台复权算法不同。

目前市面上的各类软件的复权算法都不太一致,而同花顺,通达信的复权数据与大多数平台的复权数据差异很大(我们的复权数据和新浪是相同的)。所以对比技术指标值之前先确保前复权数据一致(有些指标带有回溯计算,至少需要3×timeperiod条数据一致)。

2,确定对比时未开启动态复权选项。

3,技术指标计算时获取的数据长度不同。

如果上述两条一致的话,剩下的差异应该就会很小了,对于这部分的差异来源于计算数据量的长度,有些指标的计算需要回溯昨天的指标值来计算今天的指标值,所以数据的开始时间不同计算的结果也就会不同,比如SMA,EMA等,非量化软件经常一次性计算好指标值并进行显示(实际上是一次性计算了上市至今的指标值),但回测中肯定不能这样做,重复计算所耗费的时间过长,但如果一次性计算将无法考虑动态复权而导致结果失真,所以我们计算选取了适量长度的数据进行计算,既保证了数据的精度不受影响,又加快了回测的速度。即使有一点细微的差异但往往是随着计算出的序列同步变化的,所以对回测并无影响。

关于动态复权¶

首先,重要的事情说三遍:动态复权不是不复权!动态复权不是不复权!动态复权不是不复权!

众所周知,前复权数据是会随着除权的进行发生改变的,比如站在今天看X股1年前某天的前复权价为P1,但是如果明天该股发生了除权,那么一年前那天的前复权价就会跟着改变,不再是P1,这无疑使回测发生了失真并且带有未来信息,因为你已经知道了这只股票将会发生分红。比如在05年看到的前复权价可能有5块钱,但站在今天来看却只有几分钱。Image of Yaktocat  而平台的动态复权完美解决了这个问题,回测的逻辑时间点上获取的就是当前逻辑时间所能看到的最新的前复权数据:Image of Yaktocat

1,为什么回测中取到的前复权数据和其他平台相差很大?¶

同学们经常用我们回测中得到的动态复权数据和其他平台的前复权数据进行对比,这当然会出现不一致的问题,如果您必须对比的话,可以注释掉策略初始化函数中   set_option('use_real_price',True)   这句代码关闭动态复权,但我们强烈建议开启动态复权模式进行回测!

2, 为什么我明明取的是前复权价,为什么看上去是未复权的数据呢?¶

重要的事情说三遍:动态复权不是不复权!动态复权不是不复权!动态复权不是不复权!   这还是因为动态复权的原因,实际上你拿到的的确是前复权数据,只是您看到的那一段时间内没有发生除权,所以看上去是未复权的价格。   比如在2015年1月X发生分红,此后一年之内都未再次发生除权,那么您在整整一年时间内拿到的2015年1月之后的数据的确是没有复权的,但在那个时间段内拿到的1月之前的数据是发生除权的,所以在15年一月的数据为动态前复权数据

3,模拟交易中的交易价格为什么比实际价格高?¶

猜测您肯定忘记在模拟交易中设置动态复权了,如果您未开启动态,那么回测时的成交价将会使用基于模拟交易建立那一天计算出的后复权价进行成交,所以强烈建议您开启动态复权!


关于技术指标库¶

首先我们的技术指标库的算法和通达信,东方财富和同花顺等一致。 但是为什么会和其他平台产生差异呢?

1,各平台复权算法不同。¶

目前市面上的各类软件的复权算法都不太一致,而同花顺,通达信的复权数据与大多数平台的复权数据差异很大(我们的复权数据和新浪是相同的)。所以对比技术指标值之前先确保前复权数据一致(有些指标带有回溯计算,至少需要3×timeperiod条数据一致)。

2,确定对比时未开启动态复权选项。¶

3,技术指标计算时获取的数据长度不同。¶

如果上述两条一致的话,剩下的差异应该就会很小了,对于这部分的差异来源于计算数据量的长度,有些指标的计算需要回溯昨天的指标值来计算今天的指标值,所以数据的开始时间不同计算的结果也就会不同,比如SMA,EMA等,非量化软件经常一次性计算好指标值并进行显示(实际上是一次性计算了上市至今的指标值),但回测中肯定不能这样做,重复计算所耗费的时间过长,但如果一次性计算将无法考虑动态复权而导致结果失真,所以我们计算选取了适量长度的数据进行计算,既保证了数据的精度不受影响,又加快了回测的速度。即使有一点细微的差异但往往是随着计算出的序列同步变化的,所以对回测并无影响。

 

全部回复

0/140

量化课程

    移动端课程