设为首页收藏本站

 找回密码
 注册
查看: 1874|回复: 1
打印 上一主题 下一主题

关于多图层合约的收盘价变动问题 [复制链接]

Rank: 10Rank: 10Rank: 10

精华
0
UID
235653
积分
19
帖子
15
主题
2
阅读权限
200
注册时间
2016-5-31
最后登录
2021-8-31
1#
发表于 2019-11-19 15:40:50 |显示全部楼层
注意onbaropen(arrayref<integer> indexs)的这个indexs指的是驱动事件域运行的图层编号 所以当你有两个数据源 而这两个数据源收到最新bar数据的时间可能是不一样的 有一个先后顺序
那么假使0号图层数据先到 那么indexs==0的状态下驱动onbaropen事件域运行 写入两行fileappend日志
然后1号图层数据后到 那么indexs==1的状态下驱动onbaropen事件域运行 再次写入两行fileappend日志 由于1号图层数据发生了更新,那么自然和上面两行日志价格不一样了
你可以尝试把indexs这个值以及bar时间等等参数也输出一下做一下验证

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
235653
积分
19
帖子
15
主题
2
阅读权限
200
注册时间
2016-5-31
最后登录
2021-8-31
2#
发表于 2019-11-20 17:02:06 |显示全部楼层
本帖最后由 kyover 于 2019-11-21 13:37 编辑
deyintouzi 发表于 2019-11-19 16:13
先谢过这位大哥,不过我的代码输出的内容是上一个bar的收盘价,这是按理说应该是一个定值,所以两个图层 ...


你还是没弄明白onbaropen的驱动机制 我给你讲个实际例子吧
现在有a、b两个图层 每个图层都有两根bar
a.close1 表示a图层的第1根bar的收盘价
b.close2 表示b图层的第2跟bar的收盘价
以此类推
当前2个图层分别有2根bar,这个时候由于2个合约接受新数据的时间不一定一致,假定a图层先出现了新的bar,那么此时的onbaropen是由于a图层出现新bar驱动运行,因为a图层出现了新的bar,那么在这新的第3根bar上,close[1]实际代表的是a.close2,也就是a图层的第2根bar的收盘价
所以fileappend输出的实际上是
data0.close[1] == a.close2
而b图层并没有出现新的bar,所以
data1.close[1] == b.close1

这个时候,图上是有5根bar的,a图层3根,b图层2根

接下来,b图层收到新数据,驱动onbaropen运行
那么此时,图上有6根bar了,a图层3根,b图层3根
这个时候
data0.close[1] = a.close2
data1.close[1] = b.close2

所以第1行的输出不变,而第2行的输出变化了,从b.close1变成了b.close2
你可以去验证一下对不对
如果是第1行变了,那说明图层2数据来的更快一点

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-21 23:28

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部