开拓者期货期权程序化系统交易论坛

标题: Lowest函数出现错误 [打印本页]

作者: useboy    时间: 2018-5-15 15:51:04     标题: Lowest函数出现错误

各位大神,我做了段移动止盈的代码,调用了HIGHEST 和 LOWEST 函数,在测试时LOWEST函数出现错误信号,在做空的时候,在同一根BAR上出现开平仓,而HIGHEST函数不会,不知是什么原因?求大神指点一下。
代码如下:
  //移动止盈代码
        OpenCount = CurrentBar - GetGlobalVar(1); //计算开仓K线到当前K线的个数
        If(MarketPosition == 1  )
        {
                MostHigh=Highest(High , OpenCount); //计算开仓后到当前K线为止的最高价
                If(MostHigh-GetGlobalVar(0)>=WinPoint*MinMove*PriceScale) //开仓后最大浮盈(以价格计算)超过止盈起始值
                {BuyStopWin = MostHigh-(MostHigh - GetGlobalVar(0)) * StopWin;} //计算止盈价格
                If(Close <= BuyStopWin) //达到止盈条件时止盈
                {Sell(0, Min(Open, BuyStopWin));}
        }
        If(MarketPosition == -1 )
        {
                MostLow=Lowest(Low , OpenCount);
                If(GetGlobalVar(0)-MostLow >=WinPoint*MinMove*PriceScale)
                {SellStopWin = MostLow + (GetGlobalVar(0) - MostLow) * StopWin;}
                If(Close >= SellStopWin)
                {BuyToCover(0, Max(Open, SellStopWin));}
        }

测试结果如下图:
[attach]36868[/attach]
作者: 小米    时间: 2018-5-15 16:58:53

highest,lowest等是序列函数,不可以放在条件内进行运算,否则可能因为取值的受限而导致运算结果有误。
建议使用中间变量,在条件外将lowest赋值给中间变量,再将中间变量代入条件中使用即可。
作者: useboy    时间: 2018-5-15 17:13:21

小米 发表于 2018-5-15 16:58
highest,lowest等是序列函数,不可以放在条件内进行运算,否则可能因为取值的受限而导致运算结果有误。
建 ...

1、同样的函数,HIGHEST就没出现问题,真奇怪。
2、我已经设置了中间变量,MOSTHIGH 和 MOSTLOW,但MOSTHIGH没问题,而MOSTLOW有问题。
3、该错误不一定是由LOWEST函数引起的,可能是其他原因造成的。
作者: 小米    时间: 2018-5-16 08:48:36

useboy 发表于 2018-5-15 17:13
1、同样的函数,HIGHEST就没出现问题,真奇怪。
2、我已经设置了中间变量,MOSTHIGH 和 MOSTLOW,但MOSTH ...

1,highest与lowest是一样的逻辑,一样的用法。。你所说的highest没有问题只是碰巧在当前的运算下没有遇到问题而已。。建议还是以前面所说的方式来使用,善用中间变量。
2,可以使用commentary来调试一下问题到底在哪里
3,建议使用序列变量来替换你代码中的全局变量,再看看。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2