您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

CrossOver/CrossUnder 运算规则求解 [开拓者 TB]

  • 咨询内容: 有 Ma1/Ma2 是序列变量;

    问题1:CrossOver(Ma1,Ma2),编译提示警告,说函数内有序列变量可能有错误是什么意思?
                 CrossOver不能用序列变量? 还是什么意思?应该怎么用?

    问题2:CrossOver(Ma1,Ma2) 和  ( Ma1[1] < Ma2[1] && Ma[0]>Ma2[0]) 等价么?
            实测两个不等价,为什么?

    问题3:CrossOver(Ma1,Ma2) 和 CrossOver(Ma1[1], Ma2[1]) 运算结果是不是应该相差1根K线?
            实测两个不等价(期望是相差1根K线,实际运结果不同),为什么?

     

  • TB技术人员: 本帖最后由 小米 于 2013-7-17 15:10 编辑

    首先,要确认一下,你下述三个问题的代码在校验过程中,都出了可能有逻辑错误的警告吗??
    如果有出,那你的上述这些测试结果基本上没有什么参考价值。

    1. crossover( ),crossunder()等函数的运算中,计算的参数是需要序列值的。
    如果这类函数的赋值运算放在条件里或是受限制,那么可能会因为取值范围的限制而不能得正确的计算结果。
    遇到这类的函数,请尝试加上一个中间变量,在条件外赋值,再代入条件内的判断使用。例如:
    1. vars
    2.     bool aa;
    3. begin
    4.     aa = crossover(ma1,ma2);
    5.     if(aa)  ......
    复制代码2. 如前面提示的,你的验证代码若是按第1条里那样写的,基本上可以将这两个写法视作等价的。
    略有不同,是在等到ma1[1]==ma2[1]时,crossover会顺延到下一个bar判断,若下一个bar的ma1[1]<ma2[1]成立,则crossover满足(具体运算规则可见系统内建函数的代码)。而你所写的 Ma1[1] < Ma2[1] && Ma[0]>Ma2[0]则会在ma1[1]==ma2[1]时将这个布尔为否了。。


    3. 在前面所说的正确方式下进行的运算,这两个写法的结果应该是相差一个K线的。
    1. vars
    2.      bool aa;
    3.      bool bb;
    4. begin
    5.     aa = crossover(ma1,ma2);
    6.     bb = crossover(ma1[1],ma2[1]);
    7. ....
    复制代码

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容