按照理解,结算价为当日 成交量加权的均价 ,既是均价必定在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年半前遇到这个问题
弄了解决方案后
又删除了
你可以换个角度去思考
这个误差
只是策略中换月时
依托结算价的动量计算会感觉不爽
解决方案会显得非常臃肿
但并不妨碍回溯、实盘一致性
将错就错 策略而言 利大于弊
没太懂 得再想想
呃
你再问问老刘
他基础知识扎实
哈哈哈哈哈哈你一说基础知识 都感觉像个梗了
可以看看我两年前的帖子
看了你这个 ,我明白了上面一个同学为什么说“结算价是昨天收盘形成的”
基础数据是数组,如果没有更新当天的,[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之间,不是今天的两者之间
啊 我查了下 如果跟昨天的价格有关情况,只能是当日无成交
如果当日有成交,大部分合约都是当日的价格加权均价