br>
Copyright ?2006Roman Ignatov |
//|
mailto:roman.ignatov@gmail.com
|
//+------------------------------------------------------------------+
#property copyright 'Copyright ?200 Roman Ignatov'
#property link
'
mailto:roman.ignatov@gmail.com'
#property indicator_separate_window //指标画在付图上
#property indicator_buffers 2
//设定后面要计算的2个曲线,每个线用一个数组表示
#property indicator_color1 Red
//第一条线的颜色为红色
#property indicator_style1 STYLE_SOLID //线为实体的
#property indicator_width1 2
//宽度为2
#property indicator_color2 Yellow
//第二条技术指标线为黄色
#property indicator_style2 STYLE_DOT
//线为虚线
//Smooth Factor,平滑因子
extern int SF = 5; // original 5
//相对强弱指数,周期
extern int RSI_Period = 14; // original 14
//DAR factor DAR 因子
extern double DARFACTOR = 4.236; //original 4.236
//通过修改这个参数可以更早的进场(为什么?)
int Wilders_Period;
//wilders 周期,
Wilders是发明RSI的人. QQE指标其实就是RSI指标的组合计算和优化
int StartBar;
//起始的K线
//定义后面计算或指标的数组
double TrLevelSlow[];
//True range
level,真实波动水平
double AtrRsi[];
//相对强弱指数的平均真实波动幅度
double MaAtrRsi[];
//相对强弱指数的平均真实波动幅度的移动平均
double Rsi[];
//相对强弱指数
double RsiMa[];
//相对强弱指数的移动平均
int init()
//初始化变量和参数,初始化函数,指标加载的时候计算一次
{
Wilders_Period = RSI_Period * 2 - 1;
//Wilders周期
if (Wilders_Period < SF)
//保证计算开始的Bar的点有效
StartBar =
SF;
else
StartBar =
Wilders_Period;
IndicatorBuffers(6);//指定计算需要的数组数量
SetIndexBuffer(0, RsiMa);
//指定第一个数组对应的名字叫RsiMa
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID,
2);//设定指标线的样式,画线,实线,宽度为2
SetIndexLabel(0, 'Value 1');
//设定指标线的名称为'value 1'
SetIndexDrawBegin(0, StartBar);
//设置画线的起始点
SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
//设定指标线1的样式,为画虚线,默认宽度为一
SetIndexBuffer(1, TrLevelSlow);
//指标线对应的数组
SetIndexLabel(1, 'Value 2');
//设定指标线的名称为'value 2'
SetIndexDrawBegin(1, StartBar);
//设定画指标线的起始的位置
SetIndexBuffer(2, AtrRsi);
//设定第2个指标线对应的数组
SetIndexBuffer(3, MaAtrRsi);
//设定第3个指标线对应的数组
SetIndexBuffer(4, Rsi);
//设定第4个指标线对应的数组
IndicatorShortName(StringConcatenate('QQE(', SF,
')'));//指标的简称
return(0);
}
int start()
{
int counted, i;
double rsi0, rsi1, dar, tr, dv;
if(Bars <= StartBar)
//Bars是当前的Bar数量,序号为从右向左0.....N
return
(0);
counted = IndicatorCounted();
//返回缓存的数量,也就是已经计算了多少的Bar了
if(counted < 1)
//如果还没有计算过,所有的数组初始值附值为0
for(i =
Bars - StartBar; i < Bars; i++)
{
TrLevelSlow[i] = 0.0;
AtrRsi[i] = 0.0;
MaAtrRsi[i] = 0.0;
Rsi[i] = 0.0;
RsiMa[i] = 0.0;
}
//计算出需要计算的Bar的数字
counted = Bars - counted - 1;
//在刚开始还未计算出任何bar的情况下,计算出从左边第一个bar一直到右边第零个bar的值.在已经计算出n个值的情况下,就不在计算了.也就是只计算出新出现Bar位置的参数值
for (i = counted; i >= 0; i--)
Rsi[i] =
iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, i); //求RSI的值
for (i = counted; i >= 0; i--)
{
RsiMa[i] =
iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i); //计算RSI的移动平均值
AtrRsi[i] =
MathAbs(RsiMa[i + 1] - RsiMa[i]);
//计算出RSI移动平均值的波动幅度
}
for (i = counted; i >= 0; i--)
MaAtrRsi[i]
= iMAOnArray(AtrRsi, 0, Wilders_Period, 0, MODE_EMA, i);
//在Wilders_Period周期内计算波动幅度的移动平均值
//计算真实波动水平 TrLevelSlow
//先分析Counted = Bars情况下,其他的依次循环
i = counted + 1;
tr = TrLevelSlow[i];
//先把当前位置的真实波动水平记录到tr中
rsi1 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA,
i);
//记录当前的Rsi相对强弱指数到rsi1中去
while (i > 0)
{
i--;
rsi0 =
iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i); //依次计算次第个序列位置上的ris值
dar =
iMAOnArray(MaAtrRsi, 0, Wilders_Period, 0, MODE_EMA, i) *
DARFACTOR; //计算次第位置上的dar值,也就是平滑过的AtrRsi的值.
dv =
tr;
if (rsi0
< tr)
//如果次第位置上的rsi0值小于上一个位置的真实波动水平
{
tr = rsi0 + dar;
if (rsi1 < dv)
if (tr >
dv)
tr = dv;
}
else if
(rsi0 > tr)
{
tr = rsi0 - dar;
if (rsi1 > dv)
if (tr <
dv)
tr = dv;
}
TrLevelSlow[i] = tr;
rsi1 =
rsi0;
}
return(0);
}
该指标有两条线,一条为RSI的移动平均线周期比较短,另外一条为MaAtrRsi求移动平均,周期为Wilders_Period,为慢线.
第一条线,反映的是价格运行的相对强弱的指数平均,就是RSI的均线.另外的一条反映的是RSI的振幅的变化情况.
第一条向上反映的是价格走高,向下的话,反映的是价格走低,对整个的K线起到了平滑作用.第二条线反映了RSI的变化情况,对于其蕴涵的意义还需要进一步的了解.
注释:
相对强弱指数指标 (RSI)
相对强弱指数技术指标(RSI)是追寻震荡指标的价格,该震荡指标的取值范围在0-100之间。当WILDER在引进这个指数时,他建议使用一个14天的RSI指标。自他提出这个建议以后,人们使用9天和25天的RSI指标也非常的普遍了。
分析RSI指标最为普遍的方法是:我们要寻找这样一个分离的情况,在那点上,证券的价格是创新高的,但RSI指标并未能超过它以前的那个高度。这样的分离暗示着一个迫近的相反趋势。当RSI指标那时开始反转,并且下降到它最近的那个低谷,人们称之为“失败摇摆”,“失败摇摆”被看作为是即将到来的一个相反趋势的确认。
使用RSI指标来做图表分析的方法:
- 顶部和底部
RSI指标通常上升到70以上或者是下降到30以下。在构成价格图表之前,该指标一般形成这样的顶部和底部趋势;
- 图表的形成
RSI指标一般会形成象头,肩膀和三角形这样的图表图案,这些图形可能在价格图表上是看不到了;
- 失败摇摆 (支持或抗拒;渗透或爆发)
在这个时候,RSI指标一般会超过上一个高点(波峰)或下降到下一个低点(低谷);
- 支持或抗拒水平
RSI指标在表现支持或抗拒水平的时候比价格本身更为的清楚.
- 分离
就上述讨论的一样,当价格水平创出新高(低),但这种新高(低)的趋势并没有被RSI指标所确认的时候,分离的情况就发生了。价格通常会修正并且沿着RSI指标的方向进行移动.
计算方法:
RSI =
100-(100/(1+U/D))
注释:
U — 价格变化正值的平均数
D — 价格变化负值的平均数