以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- 有关用户函数在逐K线模式下的控制语句使用的风险提示说明 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=71135) |
-- 作者:王锋 -- 发布时间:2014/10/20 0:22:43 -- 有关用户函数在逐K线模式下的控制语句使用的风险提示说明 金字塔在逐K线模式下,部分统计函数依赖每根K线计算时的值,如果你在控制语句中使用他,就会因为在某些K线的执行过程中跳过正常的赋值操作,而带来计算结果的不正确,因此像MA,REF等函数金字塔是不能在IF THEN中使用的,详见
函数不能在IF THEN FOR循环控制语句中被引用的原理和解决方案 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=130
用户在使用函数在逐K线模式下运行时同样要面临这个问题,如果你的用户函数在逐K线模式中有使用这类统计性质的函数,同样需要注意使用中的风险,最好的解决方案就是将用户函数放置到控制语句的前面使用,例如:
我们需要一个公式, 在第10跟K线之后求得5日均线的值, 如果不注意我们可能会这样写代码:
DATA1:DRAWNULL;
上面的代码看似没有问题, 实际上你运行之后会发现只有在第15根K线之后才会有正确的结果, 不是我们之前需要的在第10根K线上,问题就在于在BARPOS<10的时候,用户函数没有得到正常的运算赋值操作导致的问题,改正后的代码如下:
DATA1:DRAWNULL;
将用户函数的执行放到IF语句之前让他每根K线都能得到执行以后,就可以得到我们需要的结果了.
当然,如果你的用户函数中不存在这类问题,是可以放在IF THEN等这类控制语句中的,金字塔不限制用户使用,但是会提示有风险存在,如果你需要忽略该风险.
注意: 1,只有当前公式运行模式和用户函数运行模式都为逐K线模式时才会出现问题,若用户函数为序列模式,则问题不存在 2,代码中的最前面加入如下语句可以屏蔽此风险警告: WARNING_DISABLE:7; [此贴子已经被作者于2014/10/20 10:24:42编辑过]
|