期货软件TB系统源代码解读系列39-RMI

RMI相对动量指标,是由罗吉·阿尔特曼(Roger Altman)发明,是相对强弱指标(RSI)加上动量成分后的一个变种。早期研究了很久的RSI指标,但还真没注意过这个RMI,这也是第一次接触它。它的具体算法,没在百度里找到,这里我也不写出来了,直接看代码吧,也不难的。

先看它用到的第一个函数,快速求和SummationFC(前面解读过了),代码如下:

Params

NumericSeries Price(1);

Numeric Length(10);

Vars

NumericSeries SumValue(0);

Numeric i;

Begin

If(CurrentBar < Length)

{

SumValue = 0;

for i = 0 to Length - 1

{

SumValue = SumValue + Price[i];

}

}Else

{

SumValue = SumValue[1] + Price - Price[Length];

}

Return SumValue;

End

看真正RMI具体代码及解读如下了:

Params

Numeric Length(5);//声明数值参数Length,初值5.//

Numeric OverSold(20) ;//声明数值参数OverSold,初值20.//

Numeric OverBought(80) ; //声明数值参数OverBought,初值80.//

Vars  

NumericSeries TmpValue;//声明数值序列变量TmpValue。//

NumericSeries TmpValue1;//声明数值序列变量TmpValue1.//

NumericSeries TmpValue2;//声明数值序列变量TmpValue2.//

Numeric RMIValue; //声明数值变量RMIValue。//

Begin

TmpValue = Close - Close[4];//变量TmpValue = 当前K线收盘价 - 前第四根k线收盘价。//

TmpValue1 = SummationFC(IIf(TmpValue>0,TmpValue,0),Length);//函数SummationFC没什么可以说的,就是把括号里对应的值返回这个函数求值了。IIf()这个也解读过了,就是变量TmpValue > 0条件成立,则取值TmpValue值,要是不成立,则取值0.//

TmpValue2 = SummationFC(abs(TmpValue),Length);//函数abs()就是不管括号里的值为正负,最后都只能显为正数。//

If(TmpValue2 <> 0)//序列变量TmpValue2值不等于0的。//

RMIValue = TmpValue1/TmpValue2 * 100;//依据上面求得的值代入,变量RMIValue = 序列变量TmpValue1 / 序列变量TmpValue2 * 100.//

Else//序列变量TmpValue2值等于0的。//

RMIValue = 0;//变量RMIValue = 0.//

PlotNumeric("RMI",RMIValue);//画线RMI,值为RMIValue值。//

PlotNumeric("超买",OverBought);//画线超买,值为80了。//

PlotNumeric("超卖",OverSold);//画线超卖,值为20了。//

End

最后我也不想再随意给写上什么买卖程序化了,因为它跟RSI或者KD真的挺像的,这里给个建议,就是要用这些指标时,能不能把价格对比一下,比如,close与close[1]的,close[1]与close[2]的,close[2]与close[3]的,等等。同理的,把变量RMIValue,声明成序列变量,也可以对比一下。这做成的程序化会不会好点呢?当然,我懒得去测试了,有兴趣的朋友自己去试试看吧。

你可能感兴趣的:(期货软件TB系统源代码解读系列39-RMI)