咨询编写

老师你好,我写代码的时候,已经处理了这个除数为0的情况,但是输出的值,还是无效值。经过研究,发现是MP = MP[1];这个的问题,如果改成MP = high;输出的就是正常的。请老师指教一下,这是什么原因,有没有好的解决方法,谢谢data-href=data-href=

Params

//此处添加参数


Vars

//此处添加变量

Series<Numeric> MA;

Series<Numeric> MK;

Series<Numeric> LX;

Series<Numeric> Z;

Series<Numeric> MP;

Series<Numeric> HX;

Series<Numeric> XA_4;

Series<Numeric> XA_5;

Events

//此处实现事件函数

//初始化事件函数,策略运行期间,首先运行且只有一次

OnInit()

{

}



//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

MP = Highest(HIGH,399)-Lowest(LOW,399);

If(MP == 0)

{

MP = MP[1];

}


XA_4 = (CLOSE-Lowest(LOW,399))/MP*100;

XA_5 = SMA(XA_4,13,8);

HX = SMA(XA_5,13,8);

PlotNumeric(HX,HX,0,Red);

}

咨询编写
咨询编写
咨询编写
咨询编写问题
咨询编写
咨询编写
咨询编写问题
咨询编写是否正确
咨询编写
咨询编写

那有什么好办法处理吗

我把SMA公式用具体式子表示出来运行后,是因为第一个bar上mp = 0出现的问题,第一个bar上有0作为除数后,sma计算迭代后后面就全出错了

data-href=data-href=

有什么好办法处理吗

我想到办法解决了,感谢老兄花费那么多心思

主要你还是没有理解回溯的原理,MP = Highest(HIGH,399)-Lowest(LOW,399);,这个式子里MP等于前399bar里的最大值-最低值,要是你选取的历史数据小于你回溯的bar也就是399,会无法运行这个式子,导致mp=0,只有从头开始数第400个bar即以后的bar才能计算出结果。从式子本身来看,主要是两个结果,一种是当历史bar<=399时,mp取默认值=0,另一种是当历史bar>399时,mp = 最大值-最低值>0

兄弟,你说的这些其实我都懂,不过不是问题的关键。不知道你有没有遇到过,有些k线,他什么数据都没有,你去看看小周期的k线就懂了。这个mp==0那里,主要是为了处理这个问题的。这段代码,主要是为了处理一些小周期的无效数据的,就是k线是一条横线那种

                       If(MA == 0)

{

MA = MA[1];

}

运行了下你的代码,好像问题还是出现在XA_5和HX里

data-href=

是那个mp的问题,mp导致的计算不出来,你按上面我说的改成high就可以了

你mp回溯了399个bar,前399个bar里mp都等于0,MP = MP[1] = 0,简单点,你改成MP > 0

改成mp>0,还怎么处理mp等于0的情况?mp就不能是负数吗?

你mp计算的是399bar里的最大值-最低值,只要有数据肯定会>0。

或者你选择mp<>0,直接不等于0,更保险。

兄弟,这个是处理mp这个除数为0的情况的。用mp不等于0,还怎么处理这个问题啊