以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  这段代码有问题吗?  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=169489)

--  作者:一代天骄
--  发布时间:2019/4/22 9:26:44
--  这段代码有问题吗?
LC:=REF(CLOSE,1);
LO:=REF(OPEN,1);
CD:=ABS(LC-LO);
ACD:=CD/LO;
MACD:=MA(ACD,BARPOS);
MACD10:=MA(ACD,10);
B:MACD10/MACD;
为何运行的时候MACD,这个数字显示不出来

--  作者:FireScript
--  发布时间:2019/4/22 9:42:09
--  
 定义的缘故。

MACD:=MA(ACD,BARPOS);

这个acd不是每个K都能正常有值的,如果你换成C你发现就正常了。但是acd本身定义决定了在第一个k没有值。
处理办法是:
不要用ma函数。
macd:sum(acd,0)/(BARPOS-1);//这里使用BARPOS-1,因为第一个k acd没有值。所以均值周期应该用BARPOS-1

--  作者:一代天骄
--  发布时间:2019/4/22 9:59:39
--  
macd:sum(acd,0)/(BARPOS-1);//这里使用BARPOS-1,因为第一个k acd没有值。所以均值周期应该用BARPOS-1,这里面的sum(acd,o)里面的o 应该是barpos-1吧?
--  作者:FireScript
--  发布时间:2019/4/22 10:04:06
--  
 不是。那个0就是表示从最初值累计到现在的意思。
--  作者:一代天骄
--  发布时间:2019/4/22 10:06:57
--  
那0和barpos的意思一样?
--  作者:FireScript
--  发布时间:2019/4/22 10:12:35
--  
 不是的,你看下sum函数参数说明啊,它第二个参数为0是有特殊含义的。
--  作者:一代天骄
--  发布时间:2019/4/22 10:15:49
--  
另外,我定义一个小10周期的波动率的话,这个是不是也要修改,
LC:=REF(CLOSE,1);
LO:=REF(OPEN,1);
CD:=ABS(LC-LO);
ACD:=CD/LO;
MACD:SUM(ACD,0)/(BARPOS-1)
MACD10:MA(ACD,10);
B:MACD10/MACD;
其中的MACD10:MA(ACD,10);编译的时候好像显示不正常啊

--  作者:FireScript
--  发布时间:2019/4/22 10:25:23
--  
 
图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看
不要漏了分号。

其他地方可以不用改,因为反正周期小于10的情况下,ma也是没有值的,这是符合正常逻辑的,毕竟不到10个周期计算不出来10周期均线。
前面那个macd那里要改是因为用ma得话,它始终会包含一个没有值的K的情况。