以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  如何使用交易所时间  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=64208)

--  作者:nicko
--  发布时间:2014/4/22 7:56:57
--  如何使用交易所时间
 因为本地时间及机器等问题,在即时的K线收开盘价与收盘后的收开盘价格偏差的问题 如果想以交易所时间为准 以做到即时K线与收盘后K线一致 请问怎么做到?
以下摘自其它论坛:

BarFactory是用本地时间还是用交易所时间?



这个知识点是一个很重要的内容。在写实时行情插件、收取行情数据、实盘交易、历史回测时一定要留意这个地方。 

这个地方有可能导致Chart绘图错误、实盘后回测当天历史数据不同,或同一策略在不同电脑上执行结果有差异。

主要的原因是BarFactory在OnBar的触发是根据框架时间进行切片的。
因为多条行情源的时间可能不同步,没法进行统一,故全都按本地时间进行切片。

根据size将一天的86400秒分成Math.Ceil(86400/size)份,当有Trade过来时,根据Trade上的时间分到指定的Bar。
如果交易所时间与本地时间不同步,假设行情时间比本地慢几秒。根据本地时间OnBar已经触发,即此Bar已经关闭,但行情时间还在上一个周期中,此时将 触发新的OnBarOpen,并且后面的Bar时间段与前一个时间段完全一样,后面Bar还无法正确OnBar.在图形显示上又会按后一个Bar为标准。

而如果设计的策略只是为了收取数据则应当设置成使用交易所时间,这样是为了保证不同电脑上接收到的行情数据都是一样的。

所以请问金字塔是否也能做到???
[此贴子已经被作者于2014/4/22 7:58:11编辑过]

--  作者:lichenghu
--  发布时间:2014/4/22 9:21:27
--  

TIME:取周期时间;返回序列数据
CURRENTTIME:用户本地计算机系统时间;--返回常数
TIME返回值是一组序列值,在不同的K线上能看到不同的值。如果是9点开盘,1分钟周期的第一个K线就是090100,而5分钟则是090500。
CURRENTTIME返回值只有一个,永远都是计算机最新系统时间。DYNAINFO(207) 返回值只有一个,永远都是交易所最近一笔行情时间。如果用户需要精确的时间做某些事情,请使用CURRENTTIME。图表程序化交易必须要使用一组序列数据,故尽量不要在图表程序化交易策略上使用返回常数的CURRENTTIME

 

交易所及行情时间,那么直接使用DYNAINFO(207)。这个也是无法避免不同电脑直接的微差的


--  作者:nicko
--  发布时间:2014/4/22 9:44:51
--  
 但我在公式中并未使用CURRENTIME等时间控制符 怎么还是会在两个系统中出现不一样的K线呢 能不能让系统增加交易所时间为准(好像以前版本有的吧)

--  作者:lichenghu
--  发布时间:2014/4/22 9:45:59
--  

没有的,K是由tick数据生成的。您盘后补充的K线是直接由服务器生成推送到您本地的,怎么避免?


--  作者:nicko
--  发布时间:2014/4/22 10:24:30
--  
 那你们生成的盘后数据是根据什么数据产生的呢?难道不是TICK数据? 我只是要求在即时的实盘中能获得与交易所发布的同样数据(即使慢一两秒也不要紧),不然实盘是永远不能做的 那有意义吗

--  作者:lichenghu
--  发布时间:2014/4/22 10:34:05
--  

都是由tick数据生成的,每台服务器时间都会有微差。而且tick可能存在并笔情况

 

您仔细对比下tick数据,没有不一样的。只不过划分成K线后对应K线数据会有微差