RMI相對動量指標(biāo),是由羅吉·阿爾特曼(Roger Altman)發(fā)明,是相對強(qiáng)弱指標(biāo)(RSI)加上動量成分后的一個(gè)變種。早期研究了很久的RSI指標(biāo),但還真沒注意過這個(gè)RMI,這也是第一次接觸它。它的具體算法,沒在百度里找到,這里我也不寫出來了,直接看代碼吧,也不難的。
先看它用到的第一個(gè)函數(shù),快速求和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);//聲明數(shù)值參數(shù)Length,初值5.//
Numeric OverSold(20) ;//聲明數(shù)值參數(shù)OverSold,初值20.//
Numeric OverBought(80) ; //聲明數(shù)值參數(shù)OverBought,初值80.//
Vars??
NumericSeries TmpValue;//聲明數(shù)值序列變量TmpValue。//
NumericSeries TmpValue1;//聲明數(shù)值序列變量TmpValue1.//
NumericSeries TmpValue2;//聲明數(shù)值序列變量TmpValue2.//
Numeric RMIValue;?//聲明數(shù)值變量RMIValue。//
Begin
TmpValue = Close - Close[4];//變量TmpValue = 當(dāng)前K線收盤價(jià) - 前第四根k線收盤價(jià)。//
TmpValue1 = SummationFC(IIf(TmpValue>0,TmpValue,0),Length);//函數(shù)SummationFC沒什么可以說的,就是把括號里對應(yīng)的值返回這個(gè)函數(shù)求值了。IIf()這個(gè)也解讀過了,就是變量TmpValue > 0條件成立,則取值TmpValue值,要是不成立,則取值0.//
TmpValue2 = SummationFC(abs(TmpValue),Length);//函數(shù)abs()就是不管括號里的值為正負(fù),最后都只能顯為正數(shù)。//
If(TmpValue2 <> 0)//序列變量TmpValue2值不等于0的。//
RMIValue = TmpValue1/TmpValue2 * 100;//依據(jù)上面求得的值代入,變量RMIValue = 序列變量TmpValue1 / 序列變量TmpValue2 * 100.//
Else//序列變量TmpValue2值等于0的。//
RMIValue = 0;//變量RMIValue = 0.//
PlotNumeric("RMI",RMIValue);//畫線RMI,值為RMIValue值。//
PlotNumeric("超買",OverBought);//畫線超買,值為80了。//
PlotNumeric("超賣",OverSold);//畫線超賣,值為20了。//
End
最后我也不想再隨意給寫上什么買賣程序化了,因?yàn)樗鶵SI或者KD真的挺像的,這里給個(gè)建議,就是要用這些指標(biāo)時(shí),能不能把價(jià)格對比一下,比如,close與close[1]的,close[1]與close[2]的,close[2]與close[3]的,等等。同理的,把變量RMIValue,聲明成序列變量,也可以對比一下。這做成的程序化會不會好點(diǎn)呢?當(dāng)然,我懶得去測試了,有興趣的朋友自己去試試看吧。