全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
多图层计算问题
kelong 分享到
2024-04-09 11:55

有两个问题在代码中,求大佬解决一下:

Vars

Series<Numeric> myjs; //序列变量

Global Numeric myjs2;

Global Integer dyid1; //增加的数据源id

Events

//初始化事件函数

OnInit()

{

//订阅辅助图层 这里应该不需要Range,如果周期为1分钟 就订阅2分钟周期

If(Frequency()==\"1m\")

{

dyid1 = SubscribeBar(Symbol, \"2m\", 20240101, 0, Enum_Data_RolloverBackWard);

Print(\"已订阅2m周期,dyid1=\" + Text(dyid1));

}

}

//当Bar更新变化时驱动,相当于收到Tick数据就更新

OnBar(ArrayRef <Integer> indexs)

{

}

//当下一个Bar开始前,最后一次当前bar驱动,参数indexs表示更新的图层编号数组

OnBarClose(ArrayRef <Integer> indexs)

{

Integer i = 0;

Range[i=0:DataCount-1]

{

//序列变量 这里可以修改 两个图层也能获取到

myjs = 1;

//判断相应图层执行

If(indexs[i]==0)

{

//问题1:当1分钟K线出现新bar的时候,但2分钟没有产生新bar,这里会执行2次(如果1分钟和2分钟同时产生新bar的时候没问题)

//原因:循环第1遍的时候 indexs[i]=0,i=0,循环第2遍的时候 indexs[i]=0,i=1

//请教如何解决这个问题?

//问题2:这里为什么不能修改序列变量myjs的值?所以我用了myjs2 = myjs2+1;但是执行2次后就不准确了,所以产生了问题1

myjs = myjs+1;

//用于打印K线时间

String dyintime = DateTimeToString(Date+Time);

Print(dyintime + \":图层(\" + Text(indexs[i]) + \")myjs = \" + Text(myjs) + \",变量i = \" + Text(i));

}

//在订阅图层dyid1执行

Else If(indexs[i]==dyid1 And dyid1!=0)

{

//用于打印K线时间

String dyintime = DateTimeToString(Date+Time);

Print(dyintime + \":订阅图层(\" + Text(indexs[i]) + \")myjs = \" + Text(myjs) + \",变量i = \" + Text(i));

}

}

Print(\">>>>>>>>>>>>>> 跳出了循环。 \");

}

kyover

第一个问题我其实没有看懂你在干什么

如果是要限定某个图层驱动才执行某个业务逻辑,那么直接遍历indexs参数不就好了吗,为什么还要加个range呢?

第二个问题,什么叫不能修改myjs的值?你要怎么修改?

整个代码放上来,我不知道你想做什么。请把你需要实现的业务逻辑说清楚,然后再通过注释把怎么实现的描述清楚。现在的内容完全看不懂。

2024-04-09 13:32
kelong
@kyover

\"\"

2024-04-09 19:02
kyover
@kelong

这...所以问题呢?

2024-04-10 13:08
kelong
@kyover

再请教一下:

在订阅图层id1中往erwei数组中添加yiwei数组的三种方式哪个最好?

ArrayPushBack(Data1.erwei, Data1.yiwei);    //1

Data1.ArrayPushBack(Data1.erwei, Data1.yiwei);    //2

Data1.ArrayPushBack(erwei, yiwei);    //3

2024-04-10 11:43
kyover
@kelong

这种工具性无内部缓存数据的函数其实三个写法都一样。

2024-04-10 13:09
kelong
@kyover

谢谢,之前问的问题是由于我自己把逻辑没搞清楚

2024-04-10 13:56
您未登录,请先 登录注册 后发表评论
顶部