开盘时延迟问题
使用TBQuant3,图标交易命令,实盘过程中出现开盘程序执行有延迟的问题,具体测试情景如下:使用全局变量控制每个bar开始时打印一次系统时间和价格,全局变量appended 在onbarclose中重置,策略单元包含黄金和白银两个标的 If (!appended And BarStatus == 2) { FileAppend("C:\\RunningTimeDebug\\" + A_GetOrderCreateSource, Text(CurrentDate + CurrentTime)+ " " + Symbol + " " + Text(C / Rollover) + " " + Text(C) + " " + Text(UpBand) + " " + Text(SL)); appended = True; }记录中发现以下问题:1.两个数据源应该每次执行都会驱动两遍,但是记录结果显示早晚开盘时只驱动了一遍,其他时间确实是两遍2.三个页面中除了关联账户不同以外完全相同的策略单元,开盘时的记录时间误差远大于盘中记录3.开盘那一次执行的时间明显晚于正常的行情推送时间,但是盘中bar的执行时间都很正常(重点,这导致了发单也跟着延迟)4.开盘延迟似乎不是执行慢的问题,如图一蓝色行,价格和时间对的上,但不是程序理论上应该打出的开盘价请老师帮忙分析一下看看是什么问题
1、开盘时会有一个集合竞价的tick进来,2个数据源都是相同的合约,所以只会这个集合竟价的tick只会执行一次2和3、CurrentTime记录的是您电脑本机的时间,不是我们服务器的时间,电脑上的时间肯定和我们服务器的时间做不到完全一致,再加上网络或多或少会有些延迟的原因,所看起来行情推送有延迟。4、因为开盘时会有一个集合竞价的tick进来,所以开盘时间点记录的价格是集合竟价tick的价格,不是K线的开盘价。正常交易的情况下,集合竟价的影响会被过滤掉。只是因为你用FileAppend进行记录,所以被记录下来了。
回复:请问你有用该代码在开盘时间段测试吗
回复:我晚上又测试了一次,测试方法是这样:加载好代码之后打开黄金辅k,并且在云服务器和本地电脑同步测试,晚上九点的时候出现了这样的情况:本地电脑一切正常,云服务器正常的收到了行情数据(账户透视截面价格有在跳),但是策略单元的辅k直接没有新k线,直到20点00分46秒才出现新k。请问这可能是什么原因导致的?
回复:在云服务器上单独打开行情报价,也是延迟了快一分钟才出k线,出来之后就正常了每个tick更新一次。账户透视截面的价格没有延迟
方便提供一下完整代码看一下吗?
回复:Vars
Natural Bool appended;
Events
OnInit()
{
Range[0:DataCount-1]
{
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权:保证价格连续性
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格:下单时使用真实合约价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓:主力合约换月时自动移仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号
AddDataFlag(Enum_Data_ActivePeriod()); //设置K线分割为有效交易时段 (过滤非交易时间)
SetOrderMap2MainSymbol(); //映射主力合约:下单指令发送到主力合约
}
}
OnBar(ArrayRef<Integer> indexs)
{
// 交易k执行
Range[0:DataCount-1]
{
If (!appended And BarStatus == 2)
{
FileAppend("C:\\RunningTimeDebug\\" + A_GetOrderCreateSource, Text(CurrentDate + CurrentTime)+ " " + Symbol + " " + Text(C / Rollover) + " " + Text(C));
appended = True;
}
}
}
OnBarClose(ArrayRef<Integer> indexs)
{
// 交易k执行
Range[0:DataCount-1]
{
appended = False;
}
}测试代码就是这样,添加了黄金和白银的15m数据源,开盘前运行上
回复: