设为首页收藏本站

 找回密码
 注册
楼主: deyintouzi
打印 上一主题 下一主题

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

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
跳转到指定楼层
1#
发表于 2019-11-18 13:20:12 |显示全部楼层 |倒序浏览
        问题如上,下图举例:
        
        版主下午好,为什么我的公式调用了2个图层后,onBarOpen会运行两次,同时第二个图层输出得到的收盘价会不同呢?


附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
2#
发表于 2019-11-18 14:25:00 |显示全部楼层
本帖最后由 deyintouzi 于 2019-11-18 14:27 编辑
小米 发表于 2019-11-18 13:52
软件导航页---TB量化学院--TBL语言--01公式运行机制--02多数据源的onbar机制
可以将上述内容着重看一下,其 ...

版主,我用的是同一周期的啊,都是用1分钟周期的图层....
我在1分钟的螺纹连续上用SubscribeBar调用了1分钟的原油连续,代码如下:
OnInit()
        {
                layers[0]=SubscribeBar("sc888.INE","1m",20191101.0900);                //订阅10min的sc888数据
                myMinMove = minmove*pricescale;
        }
        OnBarOpen(ArrayRef<Integer> indexs)
        {        
              If(BarStatus == 2)
                {
                        FileAppend("D:\\输出文件\\d_"+SymbolName+".Log","Open->时间:"+Text(CurrentTime)+",Data0.Close="+Text(Close[1]));
                        FileAppend("D:\\输出文件\\d_"+SymbolName+".Log","Open->时间:"+Text(CurrentTime)+",data1.Close="+Text(data1.Close[1]));
                }
        }

主要问题还是为什么onBarOpen运算两次后,原油的收盘价竟然是不一样的

使用道具 举报

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
3#
发表于 2019-11-19 13:48:46 |显示全部楼层
小米 发表于 2019-11-18 15:54
以你的公式以及输出的日志,你是通过什么判断得到出会运行两次这样的结论。
这个运行两次是指什么时间范 ...

版主,怎么这么久也没有回复啊?我把上面的程序再次简单化了,问题还是一样....
如果你是认为我说的不对,那你可以尝试运行一下,运行后你就发现问题啦!
简化版如下:
Params
Vars
        Global Array<Integer> layers;                //记录订阅bar之后返回的图层号
Events
        //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
        OnInit()
        {
                layers[0]=SubscribeBar("sc888.INE","1m",20191101.0900);                //订阅10min的sc888数据
        }
        OnBarOpen(ArrayRef<Integer> indexs)
        {
            If(BarStatus == 2)
                {
                        FileAppend("D:\\输出文件\\d_"+SymbolName+".Log","Open->时间:"+Text(CurrentTime)+",Data0.Close="+Text(Close[1]));
                        FileAppend("D:\\输出文件\\d_"+SymbolName+".Log","Open->时间:"+Text(CurrentTime)+",data1.Close="+Text(data1.Close[1]));
                }
        }

使用道具 举报

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
4#
发表于 2019-11-19 16:13:24 |显示全部楼层
kyover 发表于 2019-11-19 15:40
注意onbaropen(arrayref indexs)的这个indexs指的是驱动事件域运行的图层编号 所以当你有两个数据源 而这两 ...

先谢过这位大哥,不过我的代码输出的内容是上一个bar的收盘价,这是按理说应该是一个定值,所以两个图层运行时间不同,结果也应该是一样的吧。
不过我刚才重新运行程序,发现onOpenBar好像由运算两次变成1次了,这次只输出了2条数据,好奇怪...昨天还是输出4条数据的.

使用道具 举报

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
5#
发表于 2019-11-20 09:27:32 |显示全部楼层
本帖最后由 deyintouzi 于 2019-11-20 09:30 编辑
小米 发表于 2019-11-18 15:54
以你的公式以及输出的日志,你是通过什么判断得到出会运行两次这样的结论。
这个运行两次是指什么时间范 ...

版主早上好,我发现我的程序首次运行日志只有2行,然后每一分钟过后日志输出就变成4行了,请解惑!
代码在6楼,在策略交易用1min周期运行即可,例图如下:




附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
6#
发表于 2019-11-21 09:26:50 |显示全部楼层
kyover 发表于 2019-11-20 17:02
你还是没弄明白onbaropen的驱动机制 我给你讲个实际例子吧
现在有a、b两个图层 每个图层都有两根bar
a.cl ...

赞,那么再请教大哥一个问题:如何指定使用最后一个图层的数据呢?我的目的就是想要用到两个图层的都出现新bar后的数据,而不是半新半旧的数据

使用道具 举报

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
7#
发表于 2019-11-21 15:36:39 |显示全部楼层
小米 发表于 2019-11-21 14:57
没法预知哪个图层的数据先来哪个图层的后到,以及何时会到啊。
如果是不太活跃的合约,可能整个bar的时间 ...


那么请问版主能增加一个这样的函数吗?不需要判断先来后到,只需判断最后到的图层就好了
否则,跨品种进行数据比较都会出现信号闪烁的问题,而且公式运行结果就达不到预期了

使用道具 举报

Rank: 2

精华
0
UID
284763
积分
108
帖子
49
主题
19
阅读权限
30
注册时间
2019-10-15
最后登录
2021-3-3
8#
发表于 2019-11-21 17:19:52 |显示全部楼层
小米 发表于 2019-11-21 17:05
我会提交你的建议。
但是感觉可能性不大。。必竟运行机制是固定的。

谢谢版主,希望版主能尽量帮忙推荐一下这个建议,不然一些套利策略或对冲策略因为这个图层的问题来一个信号闪烁,最后开仓和平仓数量对不上就很大问题了....

使用道具 举报

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

bottom

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

GMT+8, 2024-5-21 11:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部