以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [求助]请教Stdind 函数引用能否是变量?  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=224)

--  作者:bhwhui
--  发布时间:2009/11/22 4:18:41
--  [求助]请教Stdind 函数引用能否是变量?

如题:

程序代码如下:

 

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函数的说明,请补充。

 

谢谢。

 

 


--  作者:Likai
--  发布时间:2009/11/22 11:06:33
--  

在引号中间应该是不能使用参数了,因为那是被当做字符串处理了。

 

一个变通的办法是将参数数字转换成字符串,将字符串变量作为stkindi的参数。

[此贴子已经被作者于2009-11-22 12:21:17编辑过]

--  作者:bhwhui
--  发布时间:2009/11/22 15:23:00
--  

我按照您的意见改成如下代码也不行:

 

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);

 

请版主帮忙写一下,谢谢。


--  作者:Likai
--  发布时间:2009/11/22 16:59:20
--  

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);

 


--  作者:bhwhui
--  发布时间:2009/11/22 18:01:17
--  

谢谢,程序通过了。

我的第二个程序错误在于想当然多加了一对“”号,下面是改过的:

 

upBand_2:STKINDI(\'\',\'boll.upper(\'+s1+\',\'+s2+\')\',0,DATAPERIOD);
downBand_2:STKINDI(\'\',\'boll.lower(\'+s1+\',\'+s2+\')\',0,DATAPERIOD);

 

谢谢。

 

不过也确实不清楚,Stkind为什么不支持变量的调用,不会类似if 语句不能调用统计类函数吧?

 


--  作者:蔡宛宏
--  发布时间:2012/1/19 15:29:19
--  

s1:=NUMTOSTR(intLookBackDays,0);
s2:=NUMTOSTR(BolBandTrig,0);

 

以上两句的意思是什么?


--  作者:jinzhe
--  发布时间:2012/1/19 15:43:27
--  

变成字符串。调用boll时参数不能直接用BOLBANTRIG这类的变量,需要变成字符串后在放入变量里面。


--  作者:90也玩期货
--  发布时间:2013/8/31 15:54:42
--  

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);

 这边为什么要fs1:=\'boll.upper(\'+s1+\',\'+s2+\')\' ; 要加上+  +,不能直接用S1吗


--  作者:90也玩期货
--  发布时间:2013/9/9 15:19:38
--  
希望客户可以帮我解决一下,谢谢
--  作者:jinzhe
--  发布时间:2013/9/9 15:34:16
--  

这个不是问题,是不理解吧?

直接引用是要用双引号的,这个单引号不对的,然后\'+s1+\'写法是因为s1是字符不能直接代入的,要代入只能是数字,用\'+s1+\'写法是直接把s1对应的数字型数字给直接引入了

正确写法:

"boll.upper"(\'+s1+\',\'+s2+\')