关于结算价的疑问

按照理解,结算价为当日  成交量加权的均价 ,既是均价必定在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);
        
    }


关于setbaseperiod的几个疑问
关于OnTimer的疑问
关于多数据源对齐的 SetBeginBarMaxCount疑问
集合竞价时读取的昨日结算价是前日结算价
关于MLRS使用的疑问
关于 SetGlobalVar 的疑问
关于tick的疑问
关于用TB_SettlePrice获取结算价的问题
关于策略优化的参数设置疑问
关于NthLower用法的疑问

问题是什么?

当天的结算价自然是昨天交易的结果

除非你收盘后来取

问题是,基础数据中的结算价数组与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年半前遇到这个问题

弄了解决方案后

又删除了


你可以换个角度去思考

这个误差

只是策略中换月时

依托结算价的动量计算会感觉不爽

解决方案会显得非常臃肿

但并不妨碍回溯、实盘一致性

将错就错 策略而言 利大于弊

没太懂 得再想想

呃

你再问问老刘

他基础知识扎实

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

可以看看我两年前的帖子

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之间,不是今天的两者之间

啊 我查了下 如果跟昨天的价格有关情况,只能是当日无成交

如果当日有成交,大部分合约都是当日的价格加权均价