欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 有关用户函数在逐K线模式下的控制语句使用的风险提示说明

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2351人关注过本帖树形打印复制链接

主题:有关用户函数在逐K线模式下的控制语句使用的风险提示说明

帅哥哟,离线,有人找我吗?
王锋
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
有关用户函数在逐K线模式下的控制语句使用的风险提示说明  发帖心情 Post By:2014/10/20 0:22:43    Post IP:58.246.57.26[只看该作者]

    金字塔在逐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;
IF BARPOS >= 10 THEN
BEGIN
    DATA1:=#MA.MA1(5)#; //使用用户函数读取MA的5日均线结果
END;

 

上面的代码看似没有问题, 实际上你运行之后会发现只有在第15根K线之后才会有正确的结果, 不是我们之前需要的在第10根K线上,问题就在于在BARPOS<10的时候,用户函数没有得到正常的运算赋值操作导致的问题,改正后的代码如下:

 

DATA1:DRAWNULL;
DATA2:=#MA.MA1(5)#; //使用用户函数读取MA的5日均线结果
IF BARPOS >= 10 THEN
BEGIN
    DATA1:=DATA2;
END;

 

将用户函数的执行放到IF语句之前让他每根K线都能得到执行以后,就可以得到我们需要的结果了.

    

当然,如果你的用户函数中不存在这类问题,是可以放在IF THEN等这类控制语句中的,金字塔不限制用户使用,但是会提示有风险存在,如果你需要忽略该风险.

 

注意:

1,只有当前公式运行模式和用户函数运行模式都为逐K线模式时才会出现问题,若用户函数为序列模式,则问题不存在

2,代码中的最前面加入如下语句可以屏蔽此风险警告:

  WARNING_DISABLE:7;

[此贴子已经被作者于2014/10/20 10:24:42编辑过]


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部