金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 517|回复: 0

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

[复制链接]

34

主题

9187

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-4-1 00:13 | 显示全部楼层 |阅读模式
本帖最后由 技术006 于 2024-4-1 11:25 编辑

金字塔在逐K线模式下,部分统计函数依赖每根K线计算时的值,如果你在控制语句中使用他,就会因为在某些K线的执行过程中跳过正常的赋值操作,而带来计算结果的不正确,因此像MA,REF等函数金字塔是不能在IF THEN中使用的,详见



函数不能在IF THEN FOR循环控制语句中被引用的原理和解决方案


https://www.weistock.com/bbs/forum.php?mod=viewthread&tid=240



    用户在使用函数在逐K线模式下运行时同样要面临这个问题,如果你的用户函数在逐K线模式中有使用这类统计性质的函数,同样需要注意使用中的风险,最好的解决方案就是将用户函数放置到控制语句的前面使用,例如:


我们需要一个公式, 在第10跟K线之后求得5日均线的值, 如果不注意我们可能会这样写代码:



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


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


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



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

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


注意:


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

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

[PEL] 复制代码
WARNING_DISABLE:7;

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-22 02:38 , Processed in 0.172297 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表