以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  写的获取上一日结算价的代码导致程序崩溃  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=92062)

--  作者:lance0307
--  发布时间:2016/2/25 19:17:50
--  写的获取上一日结算价的代码导致程序崩溃
todaybarcount:=TODAYBAR;
a1:=0;
v1:=0;
for pos=barpos-todaybarcount downto barpos-todaybarcount-59 do begin
if pos<1 or (pos>=1 and date[pos]!=date[barpos-todaybarcount]) then begin
break;
end
else begin
a1:=a1+amount[pos];
v1:=v1+vol[pos];
end
end
last1jsj:=a1/v1/multiplier;
last1jsj:=INTPART(last1jsj/MINDIFF);
last1jsj:=last1jsj*MINDIFF;
请问这段代码有什么问题存在吗?为什么一架载就会导致程序崩溃提示内存不足

我是写成一个指标,  其他的地方会调用这个指标并传入1M周期


--  作者:admin
--  发布时间:2016/2/25 19:49:41
--  
你用的序列模式还是逐K线?
--  作者:admin
--  发布时间:2016/2/25 20:21:48
--  
for pos=barpos-todaybarcount downto barpos-todaybarcount-59 do begin
你在这句话上进入死循环了,建议你使用单步跟踪模式调试一下你的代码

--  作者:lance0307
--  发布时间:2016/2/26 9:49:16
--  
我是逐K线模式
--  作者:lance0307
--  发布时间:2016/2/26 9:53:27
--  
这个循环哪里有死循环,请麻烦分析

我这段代码如果不写成指标,直接放到策略代码里加载到1M的图表上是没有问题的,结算价也是对的,我都检验过了

就是不能写成指标

--  作者:lance0307
--  发布时间:2016/2/26 10:03:30
--  
我是这样调用这个指标的,图表1M周期


if tradedate != Date then BEGIN
last1jsj:=STKINDI(STKLABEL,\'getlastjsj.getlastjsj\',0,1,0);
end

这样调用指标就会导致程序崩溃

但如果直接按下面这种方式直接写在策略里面就没有问题
if tradedate != Date then BEGIN
todaybarcount:=TODAYBAR; 
a1:=0; 
v1:=0;
 for pos=barpos-todaybarcount downto barpos-todaybarcount-59 do begin 
 if pos<1 or (pos>=1 and date[pos]!=date[barpos-todaybarcount]) then begin 
 break; 
 end 
 else begin 
 a1:=a1+amount[pos];
 v1:=v1+vol[pos];
 end 
end 
last1jsj:=a1/v1/multiplier;
last1jsj:=INTPART(last1jsj/MINDIFF); 
last1jsj:=last1jsj*MINDIFF;
end

--  作者:yukizzc
--  发布时间:2016/2/26 10:38:57
--  
被应用公式和引用的公式都用逐k
--  作者:lance0307
--  发布时间:2016/2/26 11:27:07
--  
可以了
谢谢!