有两个问题在代码中,求大佬解决一下:
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(\">>>>>>>>>>>>>> 跳出了循环。 \");
}
第一个问题我其实没有看懂你在干什么
如果是要限定某个图层驱动才执行某个业务逻辑,那么直接遍历indexs参数不就好了吗,为什么还要加个range呢?
第二个问题,什么叫不能修改myjs的值?你要怎么修改?
整个代码放上来,我不知道你想做什么。请把你需要实现的业务逻辑说清楚,然后再通过注释把怎么实现的描述清楚。现在的内容完全看不懂。
再请教一下:
在订阅图层id1中往erwei数组中添加yiwei数组的三种方式哪个最好?
ArrayPushBack(Data1.erwei, Data1.yiwei); //1
Data1.ArrayPushBack(Data1.erwei, Data1.yiwei); //2
Data1.ArrayPushBack(erwei, yiwei); //3
这...所以问题呢?
这种工具性无内部缓存数据的函数其实三个写法都一样。
谢谢,之前问的问题是由于我自己把逻辑没搞清楚