期货CTP接口与K线模块的对接(2)

时间:2024-04-09 14:39:53

K线的结构

一根K线,是由以下基本数据组成的,K线的图形就是根据它们画出来的:
期货CTP接口与K线模块的对接(2)
特别说明一下,K线的日期、时间,是它第一个tick的日期、时间。
如果一根K线的第一个tick是2019年8月26日21点00分03秒124毫秒来到的,在记录这根K线时,日期就记为20190826,时间就记为210003.124,即使它持续到次日,它的日期时间也是开始时的日期时间。
由于交易日可能不同于普通日期,还要强调一下,K线的日期是普通日期。比如2019年8月26日21点的K线,它所在的交易日是2019年8月27日,但我们记录这根K线时,还是记录2019年8月26日。
我们把日期记为8位整数(形如20190826),把时间记为实数(形如210003.124,小数部分是毫秒数)或整数(形如210003)。
所有的K线,不管周期是多大,都采用这种记法。因此一条日线的时间可能是“210003.124”,如果某条1分钟K线的时间也是210003.124,某个tick的时间也是210003.124,并不奇怪,它们的起始时间相同,区别只在于它们持续的时间不同。
有的软件把大周期K线的时间记为4位整数(不含秒、毫秒),我们并不采用这种记法,因为周期转换还是采用同一格式为好。
 
另外,还可以有一些附加数据:

•成交量 •持仓量 •其他指标
 
在本地记录K线时,必不可少的是日期、时间、开、高、低、收这六个数据,其他数据,要是有成交量、持仓量,可以记录,更多的指标就没必要记录了,因为它们可以用基本数据算出来——K线显示时,首先读基本数据,再算其他指标。
记录K线的格式如何?举例来说:
 
日期,时间,开盘价,最高价,最低价,收盘价,成交量,持仓量
 
例子是:

20191202,90031,108150,108240,108150,108210,2048,376940
20191202,90100,108230,108480,108230,108440,16930,376928
20191202,90200,108440,108560,108440,108560,7634,375780
20191202,90300,108560,108620,108480,108610,9396,374606

记录是一行一行的,每一行代表一根K线,显示在屏幕上,就是一根一根的了。
另外,记录tick的格式,可以是这样:

日期,时间,卖一价,卖一量,买一价,买一量,最新价,成交量,持仓量
 
例子是:

20191225,90017.445,112370,3,112350,63,112350,0,190234
20191225,90037.976,112360,1,112320,6,112350,282,190216
20191225,90043.93,112370,7,112360,3,112360,134,190234
20191225,90046.273,112330,2,112320,3,112330,136,190232

记录是一行一行的,每一行代表一个tick,显示在屏幕上,就是一小段一小段的了。

K线的时间逻辑

在交易时间,K线是随时变化的,每隔一段时间还会产生新K线。在编程中怎么做到这些呢?
你的直觉是“1分钟K线每走完1分钟就换K线”,但事情没有这么简单。
如果你在11:29:30接通行情,半分钟后,交易所休息了,再过2小时,13:30:00,你又收到了行情,时间过了2小时零半分钟,你的K线走了半分钟,这时候该不该换K线呢?
应该是要换的,否则遇到大跳空,这会是一根超长的K线,不能反映隔午的情况。
看来,按普通时间差划分K线,结果会不正常。
我们需要交易时间差——普通时间差扣除休息时段。
为此,我们需要以下数据:

一、K线周期

这是每根K线在不被隔夜隔午等情况打断的情况下持续的时间,比如“1分钟”、“1小时”、“日线”。
我们用以下规则给K线周期命名:
1.周期单位:tick是“tick”,分钟是“m”,小时是“h”,日是“d”,周是“w”,月是“n”,年是“y”。
2.周期数值:用整数表示,但tick周期不带数值,因为从来就没有人用“2tick”“3tick”这样的周期。
3.上述单位和数值前后相连(若是tick周期就不要数值),形成表示周期的字符串,如:
tick 表示tick
m1  表示1分钟
m3  表示3分钟
m5  表示5分钟
h1  表示1小时
h2  表示2小时
d1  表示日线
w1  表示周线
n1  表示月线
y1  表示年线
…… 依此类推
这样一来,我们可以操作任何周期,哪怕“7分钟”这样的另类周期。。
 
二、交易时间表

它反映了以下信息:
1.普通工作日的开始时间:昨天是工作日、今天也是工作日时,今天开始交易的时间(在连续交易中是0点)
2.普通工作日的结束时间:明天是工作日、今天也是工作日时,今天结束交易的时间(在连续交易中是24点)
3.交易日开始时间:遵循交易所规定
4.交易日结束时间:遵循交易所规定
5.假日后开始交易的时间:昨天是休息日、今天是工作日时,今天开始交易的时间
6.假日前结束交易的时间:明天是休息日、今天是工作日时,今天结束交易的时间
7.工作日的休息时间:如午休时间、日盘与夜盘之间的休息时间
 
三、假期表

它记录了交易所规定的,除周末以外的假日。