以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  周日升级3.52版本后遇到的问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=77043)

--  作者:donlee88
--  发布时间:2015/3/29 11:53:23
--  周日升级3.52版本后遇到的问题
同样的模型,同样的数据,在模型中如果有同品种调用的语句,就没有办法测试(即测试结果都是0)

clzd:STKINDI(\'\',\'wqclzd.仓\',0,17,0),PRECISION0,LINETHICK0,colorwhite;
在模型中增加上述语句(同品种同周期调用,3分钟周期),且clzd在模型中不用任何用途,只是增加个clzd,模型测试结果=0;如果去掉上述语句,模型就能正常测试了。
注1:数据在版本升级前后没有改动,在升级前,有上述语句的模型是可以正常测试的。
注2:模型可以在图形状态下正常运行,就是不能测试





--  作者:wzsunshao
--  发布时间:2015/3/29 17:33:48
--  
前段时间我反应过同样的问题,新版在测试时对STKINDI函数的处理能力明显有不足。
--  作者:王锋
--  发布时间:2015/3/29 17:53:45
--  

有没有完整可以进行测试的公式范例?

这样我们才可能有针对性的去解决该问题


--  作者:donlee88
--  发布时间:2015/3/29 20:14:41
--  
公式范例:
////////////////////////////////////////////特殊条件///////////////////////////////////////////////

小短:=3;
aa:=0.01;

/////////////////////////////////////////////冬令时//////////////////////////////////////////////////

bz:=0;//=1代表冬令时

冬令时:=if(bz=0,000000,010000);
cond0:=if(date()<>ref(date(),1),1,0);//夏令时初始时间
cond1:=if((time>010000 and time<=013000 and time-ref(time,1)>8000) or time=010300,1,0);//冬令时初始时间
cond:=if(bz=0,cond0,cond1);

/////////////////////////////////////////////常规参数//////////////////////////////////////////////////


xx1:=5;

N:=barslast(cond),PRECISION0,linethick0,coloryellow;//设置当日起点为N=0
ksx:=wma(c,66),PRECISION4,LINETHICK0,coloryellow;// 200分钟的wma
Msx:=MA(CLOSE,380),PRECISion4,LINETHICK0,COLORred;//折算60图的20均线

仓:holding,LINETHICK0,coloryellow;//持仓数量

/////////////////////////////////////////////////开仓条件//////////////////////////////////////////////////////

bk31:=longcross(ksx,msx,38);
bk3:=if(sum(bk31,38)>0 and ksx>msx+2*aa and c<ksx+xx1*aa,1,0);
bkzh1:=if(bk3>0,1,0);//用于开平

sk31:=longcross(msx,ksx,38);
sk3:=if(sum(sk31,38)>0 and ksx<msx-2*aa and c>ksx-xx1*aa,1,0);
skzh1:=if(sk3>0,1,0);//用于开平

///////////////////////////////////////////////////////////////////////平仓动作///////////////////////////////////////////////////////////////////////

timexk1:=if(time<>231500+冬令时,1,0);

sell(timexk1*n>1 and skzh1>0,仓,limitr,c);//出现反手情况先平仓,增加点差,保证成交
sellSHORT(timexk1*n>1 and bkzh1>0,仓,limitr,c);//出现反手情况先平仓,增加点差,保证成交

/////////////////////////////////////////////////////////////////////////开仓动作//////////////////////////////////////////

clzd:STKINDI(\'\',\'wqclzd.仓\',0,17,0),PRECISION0,LINETHICK0,colorwhite;

{开多}BUY(bkzh1>0 and 仓<小短 and 小短>0,小短,limitr,c);
{开空}BUYSHORT(skzh1>0 and 仓>-小短 and 小短>0,小短,limitr,c);



以上公式,用于测试原油cl00 的3分钟图,取消倒数第三行的clzd,就可以测试,有了clzd,测试结果就是000000

公式wqclzd,没有问题且有200条以上的语句,如果,将公式wqclzd简化到50条语句以下,上述范例就能运行了

这个在改版前,用200条语句的wqclzd是可以正常测试的



--  作者:donlee88
--  发布时间:2015/3/29 20:22:23
--  
进一步测试,上述的2个模型,在另外2台电脑上进行测试,可行(同样模型,同样设置,同样的数据),唯一区别是第一台电脑上4g内存,第2、3台电脑分别是8g,12g的内存,所以,怀疑是stkindi函数在调用过程中内存不够产生的问题

此问题在改版前是不存在的:)

--  作者:donlee88
--  发布时间:2015/3/29 20:29:01
--  
多次测试后发现的问题总结:

2个模型,1调用2,同周期同品种,如果在1里面没有调用语句,1 可以正常测试;如果在1里面有调用语句,且不使用调用的结果,仅仅是增加一个调用,只要模型2是复杂的,那么1就没有办法测试(注模型2里面没有调用语句),只要在模型1的调用语句前面加//,测试又是可行的,所以,问题在stkindi函数中


--  作者:王锋
--  发布时间:2015/3/29 21:51:23
--  

你可以用排除法减小测试数据量后,再看看问题是否还依然存在?

此外新版你是更换新目录安装的还是升级安装的?如果你是更换新目录安装的,建议你检查新安装的是否存在选项上的问题?比如在你测试数据比较大时应该在64位系统下测试,可以使用到最大4G内存,还有虚拟内存选项是否强制勾选以尽可能测试时减小内存占用。

金字塔后面很快也会发布64位版本,届时内存的4G瓶颈将会彻底得到解决

[此贴子已经被作者于2015/3/29 22:29:34编辑过]

--  作者:donlee88
--  发布时间:2015/3/30 6:12:14
--  
1、原本可以测试3年的,现在只测试20120101-20120401,3个月数据也无法进行;
2、新版本是升级安装的,没有更换目录;
3、一直使用的是win7 64位系统
4、强制使用虚拟内存后,还是无法测试(原来使用的是“自动使用”)
5、关键在于改版前是可以的,就是升级了下,就不可以了。。。。。。。


--  作者:FexTel
--  发布时间:2015/3/30 8:52:33
--  

1,新版增加引用自动补充数据功能,有可能出现在这块上。引用数据量大,补充量导致

2,后续会考虑此功能的合理性,是否做更正。谢谢