关于结算价的疑问

按照理解,结算价为当日 成交量加权的均价 ,既是均价必定在High 和Low之间。但通过数据中心取出的结算价,会偏离High 和Low的范围,该怎么理解这种差异呢?Vars //此处添加变量 Dic<Array<Numeric>> aa("TB_SettlePrice"); Series<Numeric> settle_P; Events //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { settle_P=aa[0][0]; Commentary("aa[0][0]="+text(aa[0][0])); PlotNumeric("settle_P", settle_P); }

问题是什么?当天的结算价自然是昨天交易的结果除非你收盘后来取

回复:问题是,基础数据中的结算价数组与K线的对齐方式没搞明白在10月6日,已经可以取到9月30日最新K线的结算价但用 aa[0][0]; // aa是取的基础数据的结算价 取到的数据是9月29日的,跟最新K线没对齐用aa[-1][0] 才能取到9月30日的结算价这么设计是为了防止使用未来数据吗?

回复:你说的这种没取到、数据对齐情况没问题的、合理的序列变量是Data0对齐的最后交易日是30日那只应获得29日结算价前面说的如果非要取当天的只能校验18:30~20:55时间段根据你查询的基础数据那就是15:15~21:55了或者用15:15+TrueDate

回复:但是这个当日结算价始终是个未来实盘或回溯都没有意义那么回溯:只能用30s or 1m切片自己模拟着算实盘:Q出来用

回复:至于你说的换月因为用888机制决定了换月必然有问题的要么选择忽略每月一次这个误差要么自己模拟着算那光888是没有意义的需要动态订阅数据源其实略复杂的不是你感觉得的那样

回复:你再稍微想一下就明白换月这个事了我是1年半前遇到这个问题弄了解决方案后又删除了你可以换个角度去思考这个误差只是策略中换月时依托结算价的动量计算会感觉不爽解决方案会显得非常臃肿但并不妨碍回溯、实盘一致性将错就错 策略而言 利大于弊

回复:没太懂 得再想想

回复:呃你再问问老刘他基础知识扎实

回复:哈哈哈哈哈哈你一说基础知识 都感觉像个梗了

回复:类似于:“多读书”哈哈哈

回复:主要是因为结算价是盘后发布的,那就自然对齐到第二天的bar去了,所以要到第二天的bar才能取到前一天的结算价,那么作图的时候自然要把结算价曲线往前平移一根bar才能正确显示

可以看看我两年前的帖子 https://bbs.tbquant.net/thread/forum11139

回复:看了你这个 ,我明白了上面一个同学为什么说“结算价是昨天收盘形成的”基础数据是数组,如果没有更新当天的,[0][0]确实是昨天的数据不过 现在的时间点取到的数据 应该是完整的,为什么还会错位?即无法取到最新的一个数据。按照你帖子里的代码,回溯一位画,看上去合理了但你贴子里换月的情况,仍然没有解决哎

回复:换月是有问题需要算法解决我也没去解决最多一月一次无所谓的😁

除权没

回复:K线忘记不复权了,K线设置改成“不复权”,代码不变,还是有这个问题

回复:不想开电脑了上班时候看看应该是个很简单的写法

回复:不过如果你要打印到图表是不是要回溯一个bar如果没记错的话因为得到的是前一个结算价不是当天的

回复:settle_P[1]试试

回复:嘿嘿嘿 发现个好玩的上面老哥建议plot前回溯一位,出现的状况是无法取到最新的一天的数据。PlotNumeric("settle_P", settle_P,0,Green,1); //回溯一位,数据定位好像对了,但是无法取到9月30的,即使基础数据已经有了因为数据是延迟一天,所以取未来一天的数据,就可以取到最新一天的了settle_P=aa[-1][0]; //这样可以取到9月30日的了不知道盘中会出现什么状况还有换月的时候的异常也没解决

回复:实盘当然不能未来只能取前一天的当日结算价需要自己计算系统有完整的算法代码

回复:不好意思最近每天宿醉搞岔了主要还是老刘说的基础知识不扎实结算价应该是前一日的也就是要打印在前一个bar上才能对齐当日的应该没有因为无法确定当日何时结算只能被动等待结算数据的推送逻辑上行情数据应该有这个字段也就是原始行情带日内均价你用Q函数测试验证一下(实时行情也许是可以的,但回溯未必,下面是原因)但是TBQ的基础数据是开拓者自己编制的不会按照tick级存储本地基础数据

回复:也就是需要测试一、实时行情的Q函数是否能够获得日内均价即结算价,来实现依托日内均价的算法(我自己的策略只需要最新价和昨天结算价动量算法)二、回溯状态可能要叠加时间,确保结算完成(>18:30),再用未来函数,策略回溯会因为时间存在回溯不稳定性

回复:或者如果一定需要日线onbaropen时先清除品种的自定义基础数据然后把Q出来的均价在数据切片不是tick级的情况下干脆自己写文件或写基础数据库这样的话兼顾前一天用TBQ的基础数据当天用自定义的基础数据

回复:但如果策略基于这类算法实际上隐含的使用了未来除了无法记录超量数据也是tbq不提供当日的原因之一吧

结算价是昨天收盘形成的,在昨天的High和Low之间,不是今天的两者之间

回复:啊 我查了下 如果跟昨天的价格有关情况,只能是当日无成交如果当日有成交,大部分合约都是当日的价格加权均价