以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 -- 不要漏了分号。 其他地方可以不用改,因为反正周期小于10的情况下,ma也是没有值的,这是符合正常逻辑的,毕竟不到10个周期计算不出来10周期均线。 前面那个macd那里要改是因为用ma得话,它始终会包含一个没有值的K的情况。
|