zoukankan      html  css  js  c++  java
  • TICK回测研究四,合成K线的问题分析

    一、概述

    K线合成是指将原始的TICK数据按时间范围进行汇总,如下表所示的TICK数据,

    时间

    价格

    成交量

    20211115091322000毫秒

    192

    1

    20211115091322250毫秒

    190

    2

    20211115091322500毫秒

    191

    1

    20211115091322750毫秒

    193

    3

    可以简单汇总成一条信息,

    时间 = 20211115091322

    OPEN = 192

    CLOSE = 193

    HIGH = 193

    LOW = 190

    VOL = 7

    这样的操作1秒钟能够压缩的信息量有限,但是对于更大周期如1分钟、1小时、1天或更长的时间,能够将非常庞大的信息压缩到简单的6条数据。

    实际上我们常用一些指标如MAMACDBOLL等也是基于这个逻辑,即是将庞杂的信息浓缩成关键的“指标”。

    然而在K线合成上各家都有自己的逻辑,这就导致后续指标计算也产生了分歧,再进一步量化策略的执行也会产生区别。本篇就是着重于分析各家K线合成的逻辑和由此产生的问题。

    二、问题根源

    前面的概述中,我们将91322秒包含的4TICK汇总成了一个秒K线,这个秒K线时间范围是“22000毫秒之后至23000毫秒之前”的数据,那么时间戳为23000毫秒收到的数据,是属于22秒成交的还是23秒成交的?这是后面一系列问题的根源。

    时间

    价格

    成交量

    091321000毫秒

    190

    2

    091321250毫秒

    192

    3

    091321500毫秒

    193

    1

    091321750毫秒

    191

    2

    091322000毫秒

    192

    1

    091322250毫秒

    190

    2

    091322500毫秒

    191

    1

    091322750毫秒

    193

    3

    091323000毫秒

    194

    2

    091323250毫秒

    192

    3

    091323500毫秒

    191

    1

    091323750毫秒

    193

    2

    从直观上,我们倾向于22000毫秒到22750毫秒的成交归属于22秒,23000毫秒到23750毫秒的成交归属于23秒,但实践中却有个问题,假设交易所在15:00:00准时闭市,那么14:59:59依然还是有交易的,14:59:59.00014:59:59.25014:59:59.50014:59:59.750会依次收到交易所的行情信号,这些我们都可以归于59秒,但是15:00:00.000会收到交易所发来的最后一笔行情,这个怎么处理?

    所以实际上我们应该将22000毫秒归属到21秒去,如果我们画秒K的话,就应该从早上第一个秒开始到最后一个秒结束,即9:00:01 - 15:00:00。到这里一切都好说,但是接着关于时间标记各软件商就有了矛盾,以至于后面分歧越来越大画的K线就完全不一样了。

    三、问题一:时间标记

    上一节中,我们知道在秒K中,我们的时间范围是9:00:01 - 15:00:00,但需要注意的是,09:00:01包含的成交实际上是09:00:00-09:00:01这个秒发生的,而15:00:00包含的成交实际上是14:59:95-15:00:00这个秒发生的。所以在合成K线时,时间的标记大家就有了分歧。

    方式一:取K线的结束时间,即每天第一个K的时间是09:00:01,最后一个K15:00:00

    方式二:取K线的开始时间,即每天第一个K的时间是09:00:00,最后一个K14:59:59

    下表是方式一的合成示意:

    时间

    价格

    成交量

    K线时间

    K线数据

    091321000毫秒

    190

    2

     

     

    091321250毫秒

    192

    3

    091321

    Open = 192

    Close = 192

    High = 193

    Low = 191

    Vol = 7

    091321500毫秒

    193

    1

    091321750毫秒

    191

    2

    091322000毫秒

    192

    1

    091322250毫秒

    190

    2

    091322

    Open = 190

    Close = 194

    High = 194

    Low = 190

    Vol = 8

    091322500毫秒

    191

    1

    091322750毫秒

    193

    3

    091323000毫秒

    194

    2

    091323250毫秒

    192

    3

     

     

    091323500毫秒

    191

    1

     

     

    091323750毫秒

    193

    2

     

     

    两种方式都有人用,我大概看了下:

    方式一,标K线的结束时间:极星、通达信、富途

    方式二,标K线的开始时间:文华、快期、TB

    只需要看,如果第一个K的时间是9:00:00那就是方式二,其他的就是方式一,由时间标记的不同逻辑后面又衍生出了很多不同。

    四、问题二:跨交易时段问题

    我们知道内盘交易所交易时间并不连续,主要交易时段如下,

    第一节:9:00-10:15

    第二节:10:30-11:30

    第三节:13:30-15:00

    第四节:21:00-23:30

    对于1秒周期的K线,各节包含的时间标签如下表所示:

    方式一,标K线的结束时间

    方式二,标K线的开始时间

    第一节

    09:00:0109:00:02...10:14:5910:15:00

    09:00:0009:00:01...10:14:5810:14:59

    第二节

    10:30:0110:30:02...11:29:5911:30:00

    10:30:0010:30:01...11:29:5811:29:59

    第三节

    13:30:0113:30:02...14:59:5915:00:00

    13:30:0013:30:01...14:59:5814:59:59

    第四节

    21:00:0121:00:02...23:29:5923:30:00

    21:00:0021:00:01...23:29:523:29:59

    对于2秒、3秒周期的K线情况还行,似乎没有什么问题,我们只选取其中一节看下:

    方式一,标K线的结束时间

    方式二,标K线的开始时间

    2秒周期

    第一节

    09:00:0209:00:04...10:14:5810:15:00

    09:00:0009:00:02...10:14:5610:14:58

    3秒周期

    第一节

    09:00:0309:00:06...10:14:5810:15:00

    09:00:0009:00:02...10:14:5610:14:58

    但对于7秒这种无法被60整除的K线情况就不妙了,由于不好计算确切时间,我们做一个简单的示例,

    对于盘中休息的处理,

    方式一:标记K线结束时间。如早上10:15:00前最后一个K的是时间是10:14:58,则下一个K的时间应该是10:30:05。但有些系统却是10:15:05,为啥呢,因为10:15:00后虽然不交易了,但是行情并没有关闭,所以打这个时间戳也说的通。所以可以想见的是,有的系统应该是取10:15:05有的取10:30:05

    方式二:标记K线开始时间。如早上10:15:00前最后一个K的时间是10:14:58,则下一个K的时间应该是10:30:05。但有些系统却是10:30:00,为啥呢,还是15分以后交易只是暂停没有结束,他可以认为10:14:58 - 10:15:05是一个周期,再下一个周期可不就应该是10:30:00了吗。

    前面只是说了由秒周期导致的跨时段问题,那么有一些软件为了避免分歧,就限制了秒、分周期必须可以被60整除,小时周期必须可被24整除。但即使这样,依然存在问题,特别是跨交易时段、跨交易日。

    五、问题三:跨交易时段、跨交易日问题

    前面只是说到秒周期、分钟周期就遇到很多问题,那么我们继续扩大周期,比如用4小时周期。早上9:0011:30,总共也才交易了2个半小时,如果用4小时周期的K线,那第一根K就是9:00-14:00,而且中间还空档了15分钟,第二根K14:00到第二天的早上10点了,这还咋整。一天一共也没交易8小时,你咋画两个4小时的K呢,所以很多软件就不支持1H以上的周期,另一些就随缘,把一天直接分成2K,而且这个K还是跨交易日的,其实分析起来并不得劲。

    六、问题四:日K、周K、月K

    K主要的问题是,有时候有夜盘,有时候又没有夜盘,所以有的K数据多,有的K数据少,这其实是有影响的。

    K呢就是有时候交易所放假,有些周有5天,有的只有一天。

    K跟周K差不多,也是数据量不成正比,过年的那个月少了好几个交易日。

    七、解决方案

    方案一:按秒进行汇总,不考虑自然时间的分割

    即将交易时的每一秒都汇总起来,1分钟等于60个秒,60秒等于1小时,而不考虑自然时间的分割。比如下表这样,在09:00:03这个秒下没有数据,那么直接跳过,也就是09:00:01-09:00:04只有3秒。而后60秒汇聚成1分钟,601分钟再汇聚成1小时。

    09:00:01

    09:00:02

    09:00:03

    09:00:04

    这样其实就不存在所谓1分钟、1小时的周期,只存在60秒、3600秒这样的周期。

    方案二:按分钟进行汇总

    参考前面秒的方式,只是精确度只到分钟。同样的,也不存在1小时的周期,只有60分钟的。

    方案三:按小时进行汇总,可行吗?

    不可行,因为存在10:1511:30这样的时间。

    方案四:按时段进行汇总

    即将一天分为4个小节,5个时段

    第一节

    09:00:01 - 10:15:00

    1小时15分钟

    第二节

    10:30:01 - 11:30:00

    1小时15分钟

    第三节

    13:30:01 - 15:00:00

    1小时30分钟

    第四节

    21:00:01 - 22:15:00

    22:15:01 - 23:30:00

    1小时15分钟

    1小时15分钟

    这样除了下午多了15分钟,其他时段正好都是1小时15分钟,而且时间的开始和结束都卡的很好,不失为一个好的方案。

    八、回顾

    前面我们分析了K线合成的各种问题,并提出了一些解决方案,但并不是说这些方案就是好的,需要在实际应用中根据业务的要求去选合适的方法。

  • 相关阅读:
    10.25T2 二维线段树
    10.25T1 模拟+栈
    10.24T3 解方程 取模意义下运算+秦九韶算法
    10.24T2 树链剖分
    10.24T1 树形DP
    10.23T3 杨辉三角上做莫队
    10.23T2 二分+二分图(滑稽)
    10.23T1 杨辉三角
    10.22T6 水题
    10.22T4 模拟DP
  • 原文地址:https://www.cnblogs.com/cation/p/15559129.html
Copyright © 2011-2022 走看看