如题:
程序代码如下:
intLookBackDays:=20;
BolBandTrig:=2;
upBand_1:STKINDI('','boll.upper(20,2)',0,DATAPERIOD);
downBand_1:STKINDI('','boll.lower(20,2)',0,DATAPERIOD);
upBand_2:STKINDI('','boll.upper(intLookBackDays,BolBandTrig)',0,DATAPERIOD);
downBand_2:STKINDI('','boll.lower(intLookBackDays,BolBandTrig)',0,DATAPERIOD);
在图上,upBand_1等正确显示,而upBand_2显示有问题,二者的区别在于后者使用了变量。在金字塔中函数引用不能使用变量?麻烦了,怎么解决?提供直接的类似 BollBand()函数解决? 如果我想引用自定义的函数呢?
另外在公式帮助中没有Boll函数的说明,请补充。
谢谢。
在引号中间应该是不能使用参数了,因为那是被当做字符串处理了。
一个变通的办法是将参数数字转换成字符串,将字符串变量作为stkindi的参数。
我按照您的意见改成如下代码也不行:
intLookBackDays:=20;
BolBandTrig:=2;
s1:=NUMTOSTR(intLookBackDays,0);
s2:=NUMTOSTR(BolBandTrig,0);
upBand1:STKINDI('','boll.upper(20,2)',0,DATAPERIOD);
downBand1:STKINDI('','boll.lower(20,2)',0,DATAPERIOD);
//upBand:STKINDI('','boll.upper(intLookBackDays,BolBandTrig)',0,DATAPERIOD);
//downBand:STKINDI('','boll.lower(intLookBackDays,BolBandTrig)',0,DATAPERIOD);
upBand_2:STKINDI('',"'boll.upper('+s1+','+s2+')'",0,DATAPERIOD);
downBand_2:STKINDI('',"'boll.lower('+s1+','+s2+')'",0,DATAPERIOD);
请版主帮忙写一下,谢谢。
intLookBackDays:=20;
BolBandTrig:=2;
s1:=NUMTOSTR(intLookBackDays,0);
s2:=NUMTOSTR(BolBandTrig,0);
//upBand1:STKINDI('','boll.upper(20,2)',0,6);
//downBand1:STKINDI('','boll.lower(20,2)',0,6);
//upBand:STKINDI('','boll.upper(intLookBackDays,BolBandTrig)',0,DATAPERIOD);
//downBand:STKINDI('','boll.lower(intLookBackDays,BolBandTrig)',0,DATAPERIOD);
fs1:='boll.upper('+s1+','+s2+')' ;
upBand_2:STKINDI('',fs1,0,6);
//downBand_2:STKINDI('',"'boll.lower('+s1+','+s2+')'",0,DATAPERIOD);
谢谢,程序通过了。
我的第二个程序错误在于想当然多加了一对“”号,下面是改过的:
upBand_2:STKINDI('','boll.upper('+s1+','+s2+')',0,DATAPERIOD);
downBand_2:STKINDI('','boll.lower('+s1+','+s2+')',0,DATAPERIOD);
谢谢。
不过也确实不清楚,Stkind为什么不支持变量的调用,不会类似if 语句不能调用统计类函数吧?
s1:=NUMTOSTR(intLookBackDays,0);
s2:=NUMTOSTR(BolBandTrig,0);
以上两句的意思是什么?
变成字符串。调用boll时参数不能直接用BOLBANTRIG这类的变量,需要变成字符串后在放入变量里面。
intLookBackDays:=20; s1:=NUMTOSTR(intLookBackDays,0);
//upBand1:STKINDI('','boll.upper(20,2)',0,6);
//upBand:STKINDI('','boll.upper(intLookBackDays,BolBandTrig)',0,DATAPERIOD); 这边为什么要fs1:='boll.upper('+s1+','+s2+')' ; 要加上+ +,不能直接用S1吗 |
这个不是问题,是不理解吧?
直接引用是要用双引号的,这个单引号不对的,然后'+s1+'写法是因为s1是字符不能直接代入的,要代入只能是数字,用'+s1+'写法是直接把s1对应的数字型数字给直接引入了
正确写法:
"boll.upper"('+s1+','+s2+')