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

Veronica ·
更新时间:2024-09-21
· 683 次阅读

生成K线的流程

(下文中所说的示范程序,点击这里下载)

某合约的行情数据来到本机后:
1.在C++部分,触发“OnRtnDepthMarketData”;
2.通过已注册的函数指针,找到C#中关于处理行情数据的回调函数;
3.在这个回调函数中,与生成K线有关的操作是:
(1)生成本机所需的K线(仅供本机交易使用);
(2)如果当前合约要参与指数的计算,就计算指数,然后:
算出来的指数,递归调用处理行情数据的函数,生成本机所需的指数K线。
这个指数、这个合约,都用来生成行情服务所需的(供客户端补K线用的)指数K线、合约K线。

在我们的示范程序中,K线的生成,由两个函数来完成——
dataToBarForSol:生成本机所需的K线(仅供本机交易所用)。
dataToBarForMd:生成行情服务所需的K线(供外界补K线)。
这两个函数,都是既可以生成指数K线,又可以生成合约K线的。输入的参数是指数代码,就生成指数K线,输入的参数是合约代码,就生成合约K线。
举例来说,SR005这个合约的行情到来后,生成了这些K线:
在dataToBarForSol中,生成了SR005的K线、指数SR的K线,仅供本机交易所用。
在dataToBarForMd中,生成了SR005的K线、指数SR的K线,供外界补K线。

那么,生成K线的周期是多大呢?
本机自用K线的周期,取决于在交易方案中的设置。比如你在创建白糖的交易方案时,设定了使用5分钟K线,那么程序生成的自用K线就是5分钟的。
行情服务K线的周期,是预设的几个固定值:1分钟、5分钟、30分钟、1小时、1日。如果客户端需要其他周期,可以用这些基本周期合成。

接下来,本机自用的K线、行情服务的K线,制作方法是相同的,都是:
1.判断当前tick是不是要开启一条新K线。
2.如果开启新K线,就添加K线。
3.如果不开启新K线,就更新末端K线。

本机自用K线与行情服务K线的区别只在于:
1.在内存中的记录不同:在示范程序中,本机自用K线是“tdBars”,行情服务K线是“mdBars”(附带说一下,这里还有一种K线,是专用于历史测试的,叫“testBars”)。
2.持久化记录路径不同:在示范程序中,本机自用K线是记录在“bin\Release\csvTrade\”文件夹中的,合约K线记录的文件名形如“SR005_m5.csv”,指数K线记录的文件名形如“SR_m5.csv”;而行情服务K线的记录路径是动态决定的;附带说一下,历史测试所用的K线不需要记录,只需要在测试之前读取。

在生成K线的流程中最重要的是判断是否开启新K线,正如前面讲过的,这不仅要用时间间隔来判断,还要考虑休息时段,像3分钟、5分钟这样的小周期,遇到休息时段,必须换K线,我们把这种强制性的分隔叫做“墙”。有兴趣的同学可以仔细研究示范源码中的“isNewBar”函数及其大段大段的注释。


作者:grayhat2005



ctp 模块

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章