各位老师好,社区搜索colsed的用法,得到一位贴主phoenix129写的代码
https://bbs.tbquant.net/thread/forum13043
略微做了下修改,确实在3分钟上可以获取每日的收盘价,但发现理解不了,onopen那儿明明插入的是开盘价,为什么最终可以显示每天的收盘的,希望各位老师可以解惑一下,非常感谢
Params
Integer Days(20);
Vars
Global Array<Numeric> arrClose20;
Events
/*OnInit(){
String tSymbol = \"rb888.SHFE\";
TimeStamp startDate= PreTradingDay(tSymbol, CurrentDate, Days);
SubscribeBar(tSymbol, \"1m\", startDate, 0);
}*/
OnBarOpen(ArrayRef<Integer> indexs)
{
If(CurrentBar == 0 || TrueDate(0) != TrueDate(1)) ArrayInsert(arrClose20, 0, Open);
If(GetArraySize(arrClose20) > Days) ArrayErase(arrClose20, GetArraySize(arrClose20) - 1, 1);
}
OnBar(ArrayRef<Integer> indexs)
{
Integer i;
Numeric TodayClose = CloseD(0);
If(Time == 0.145700) arrClose20[0] = TodayClose;
If(BarStatus != 2) Return;
//PrintClear;
For i = 0 To Days - 1
{
If(i == 0)
If(Time == 0.145700)
Print("今天 Close = " + Text(arrClose20[i]));
Else
Print("今天 Open = " + Text(arrClose20[i]));
Else
Print("前" + Text(i) + "天 Close = " + Text(arrClose20[i]));
}
Print(TextArray(arrClose20));
}这段逻辑是用open维护数组里面的数据,然后用这段代码If(Time == 0.145700) arrClose20[0] = TodayClose;在收盘前把open替换成close。这里的open可以理解为“占位”的作用