1、在引用公式的时候,如果参数超出范围,会有“引用公式过多....”的错误。实际上,是参数超出范围,应该属于程序提示错误没有区分。
2、我的如下代码也引起。“引用公式过多....” 貌似是把close赋值给变量引起的。
///////////////////////////// 逐K线模式
VARIABLE:mxk=0;
VARIABLE:Kwf=1;
VARIABLE:dl=0;
Bnmin:=3 ;
BnBT:=2;
URSI:=1;
YJ:=2;
RSIF:=3;
dl:=0;
dl:=close; // 这里如果换成了具体数字,就不会弹出“引用公式过多....”的警告。
Kwf:=DL ;
Bnmins:=numtostr(Bnmin,0);
BnBTs:=numtostr(BnBT,0);
URSIs:=numtostr(URSI,0);
YJs:=numtostr(yj,0);
RSIFs:=numtostr(RSIF,0);
Kwfs:=numtostr(Kwf,0);
PT0:= STKINDIEX('','Formula3.tx('&Bnmins&','&BnBTs&','&URSIs&','&yjs&','&rsifs&','&kwfs&')',0,1, 0 , 300 );
// PT0:= STKINDIEX('','Formula3.tx',0,1, 0 , 300 ); 这里用默认参数的,不会有“引用公式过多....”
//////////////////////////////////////////////////////////// Formula3 代码 逐K线模式
INPUT:Bnmin(3,1,8,1), BnBT(2,1,8,1), URSI(1 , 0 ,1 , 1) , YJ(2 , 0, 1000, 1),RSIF(3, 3, 100,1) , Kwf(20,-400, 400,10);
VARIABLE: tx=1;
VARIABLE :DATA=0;
DATA:=close ;
//TX:="MACD.DEA"(DATA ,data-11,9);
TX:= "SFJ@SDATA"(10 ,data ); // 这个函数是DLL 输出的函数,逐K线模式,这里是返回一个随机数字。
另外 测试了下, 真的在公式中引用了50个以上的公式,没有问题。 看起来问题就是出在参数处理上面。
首先感谢您的测试,感谢对我们软件的支持
然后说下这个问题
其实你的测试已经很具体的,但是有个关键性的问题那就是根本没考虑到close,close在每根k线上的数值是不一样的,这个就造成了每根k线上都引用不同参数的公式,造成了实际上的重复引用,所以当前k线过多时会报错。你试试看把当前k线图缩小到50根k线之内,再看看是不是不会报错了。
我看了下, 我的3.53版 MA的计算方式是逐K模式,3.41版是序列模式,难道是这个原因?