我用
STKINDI的方法,或者是callstock 的方法,存在2个问题:
1、电脑在接收行情的时候,非常卡,简直是鼠标都不能动
2、在图表历史回测上,只能调用到当天14:00后的数据,再往前的数据调取不到,不知道什么原因??开始以为是数据不全,可以不全数据,或者切换到分笔数据查看,数据是完整的。
要看你想取过来做什么了,如果盘中交易的话取最新的10笔比较容易,如果你要历史回测的话,很难
先实现简单的吧,就取来盘中交易的就好了,如何实现电脑不卡?我现在用CALLSTOCK函数,调取数据,盘中时卡的鼠标无法动作,行情基本慢了3-5秒,已经没有意义,改成调取5秒数据,也是一样。调取和实现的部份代码如下:
(只做股指,程序是调取多秒-5秒过去的11个最高值)
TBUF:DYNAINFO(207)-(INTPART(DYNAINFO(207)/100)) *100,nodraw; //当前秒数
if (holding <=0 && enterbars >= 1 ) then begin //调取5秒周期的过去11个周期的最高值
Fh0:callstock('IF00',vthigh,12,0),nodraw;
Fh1:callstock('IF00',vthigh,12,-1),nodraw;
Fh2:callstock('IF00',vthigh,12,-2),nodraw;
Fh3:callstock('IF00',vthigh,12,-3),nodraw;
Fh4:callstock('IF00',vthigh,12,-4),nodraw;
Fh5:callstock('IF00',vthigh,12,-5),nodraw;
Fh6:callstock('IF00',vthigh,12,-6),nodraw;
Fh7:callstock('IF00',vthigh,12,-7),nodraw;
Fh8:callstock('IF00',vthigh,12,-8),nodraw;
Fh9:callstock('IF00',vthigh,12,-9),nodraw;
Fh10:callstock('IF00',vthigh,12,-10),nodraw;
Fh11:callstock('IF00',vthigh,12,-11),nodraw;
if barstatus = 2 then begin //判断当前1分钟有多少次5秒周期最高值突破指标 Preac8a
if Fh0>Preac8a && Tbuf>=5 then Hcount:=(Hcount+1);
if Fh1>Preac8a && Tbuf>=10 then Hcount:=(Hcount+1);
if Fh2>Preac8a && Tbuf>=15 then Hcount:=(Hcount+1);
if Fh3>Preac8a && Tbuf>=20 then Hcount:=(Hcount+1);
if Fh4>Preac8a && Tbuf>=25 then Hcount:=(Hcount+1);
if Fh5>Preac8a && Tbuf>=30 then Hcount:=(Hcount+1);
if Fh6>Preac8a && Tbuf>=35 then Hcount:=(Hcount+1);
if Fh7>Preac8a && Tbuf>=40 then Hcount:=(Hcount+1);
if Fh8>Preac8a && Tbuf>=45 then Hcount:=(Hcount+1);
if Fh9>Preac8a && Tbuf>=50 then Hcount:=(Hcount+1);
if Fh10>Preac8a && Tbuf>=55 then Hcount:=(Hcount+1);
end
end
高突破次数:Hcount,nodraw;
…… (省去中间部份代码)
if 平空条件 then begin
逃空:SELLSHORT(BARSTATUS<2 && HOLDING<0 ,ORDVOL,limitr,PKprice);
SELLSHORT(BARSTATUS=2 && HOLDING<0 && Tbuf>5 && Hcount > 2,ORDVOL,limitr,PKprice); //实盘中,如果5秒最高突破2次则平空
DAYTRADE:=(DAYTRADE + 1); //统计当天交易次数
end
原理:作用在行情1分钟固定1秒轮询方式下,做空时,5秒周期最低价向下突破2次就立刻平仓。
请指点,如何修正,电脑才不卡?(注意:电脑已经设置只有360内存周期,只连接唯一的期货行情,图表仅有唯一框架,没有附图,程序也做了相应的优化 )
1.参与运算的数据多,可考虑使用 快速 将使用的数据周期缩短
详见此帖方法3 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=3286
2.秒及分钟以上K线,历史回测的就是图上显示的数据
请参考此处16楼回帖http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=55104&authorid=0&page=0&star=2
首先建立一个自定义函数
Function LOADDATADEMO(Formula,N)
Set Grid = Formula.ParentGrid
Set MinuteData = Grid.GetMinuteData
if MinuteData.Count >= N then
LOADDATADEMO=MinuteData.NewPrice(MinuteData.Count-N)
else
LOADDATADEMO=-1 '没有这么多数据返回-1
End if
End Function
然后PEL公式这样调用即可
//只有在最后周期才进行调用的
if ISLASTBAR THEN
BEGIN
dd1:LOADDATADEMO(1);//调取最近1笔
dd10:LOADDATADEMO(10);//调取最近10笔
END;