咨询编写

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

回复:有什么好办法处理吗

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

主要你还是没有理解回溯的原理,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里

回复:是那个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,还怎么处理这个问题啊