14评论

0收藏

将Ma写成RSI 并显示区间色柱

avatar wobusir | 6150 人阅读 | 14 人评论 | 2014-12-31

2695685851975158469.jpg

#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 100
#property indicator_buffers 5
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Magenta
#property indicator_color5 DodgerBlue

extern int Ma周期= 14;
extern int 开买水平线= 80;
extern int 开卖水平线= 20;
extern int MainTrendLong= 51;
extern int MainTrendShort= 49;

double 蓝RSI[];
double 正缓组[];
double 负缓组[];

double bdn[];
double bup[];
double sdn[];
double sup[];

//-----------初始化-----------+

int init()
  {
   string 简称;

   IndicatorBuffers(7);

   SetIndexBuffer(0, 蓝RSI);
   SetIndexBuffer(2, bup);
   SetIndexBuffer(1, bdn);
   SetIndexBuffer(3, sdn);
   SetIndexBuffer(4, sup);

   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 3);
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 1);
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1);
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 1);
   SetIndexStyle(4, DRAW_HISTOGRAM, STYLE_SOLID, 1);

   SetIndexBuffer(5, 正缓组);
   SetIndexBuffer(6, 负缓组);

   简称= "RSIOMA("+Ma周期+")";
   IndicatorShortName(简称);

   SetIndexDrawBegin(0, Ma周期);

   return(0);
  }

//------------主函数-------------+

int start()
  {
   SetLevelValue(0, 开买水平线);
   SetLevelValue(1, 开卖水平线);
   SetLevelValue(2, MainTrendLong);
   SetLevelValue(3, MainTrendShort);
   SetLevelStyle(STYLE_DOT, 1, Yellow);

   int    已计= IndicatorCounted();
   double 前后差幅;
   double 负向均值;
   double 正向均值;

   if(Bars<=Ma周期)
      return(0);

   if(已计<1)
      for(int i=1; i<=Ma周期; i++)
         蓝RSI[Bars-i]= 0.0;

   i= Bars-Ma周期-1;
   if(已计>=Ma周期)
      i= Bars-已计-1;

   while(i>=0){
      double 跌差和= 0.0,
             涨差和= 0.0;

      //--使用
      if(i==Bars-Ma周期-1){
         int k= Bars-2;

         while(k>=i){
            double 现Mak= iMA(Symbol(), 0, Ma周期, 0, MODE_EMA, PRICE_CLOSE, k);
            double 前Mak= iMA(Symbol(), 0, Ma周期, 0, MODE_EMA, PRICE_CLOSE, k+1);

            前后差幅= 现Mak-前Mak;

            if(前后差幅>0)
               涨差和 += 前后差幅;     // +涨差幅和
            else  
               跌差和 -= 前后差幅;     // -跌差幅和

            k--;
           }
         正向均值= 涨差和/Ma周期;      // 正向均值
         负向均值= 跌差和/Ma周期;      // 负向均值
        }
      //--使用
      else{
         double 现Mai= iMA(Symbol(), 0, Ma周期, 0, MODE_EMA, PRICE_CLOSE, i);
         double 前Mai= iMA(Symbol(), 0, Ma周期, 0, MODE_EMA, PRICE_CLOSE, i+1);

         前后差幅= 现Mai-前Mai;

         if(前后差幅>0)
            涨差和= 前后差幅;
         else  
            跌差和= -前后差幅;

         正向均值= (正缓组[i+1]*(Ma周期-1)+涨差和)/Ma周期;
         负向均值= (负缓组[i+1]*(Ma周期-1)+跌差和)/Ma周期;
        }
      //--
      正缓组= 正向均值;
      负缓组= 负向均值;

      //--计算RSI
      if(负向均值==0.0)   // 先过滤除数为0的情况
         蓝RSI= 0.0;
      else{
         蓝RSI= 100.0-100.0/(1+正向均值/负向均值);

         //--按条件显示区域色柱
         bdn= 0;
         bup= 0;
         sdn= 0;
         sup= 0;

         if(蓝RSI>MainTrendLong)
            bup= -10;

         if(蓝RSI<MainTrendShort)
            bdn= -10;

         if(蓝RSI<20 && 蓝RSI>蓝RSI[i+1])
            sup= -10;

         if(蓝RSI>80 && 蓝RSI<蓝RSI[i+1])
            sdn= -10;
        }
      i--;
     }
   return(0);
  }

//+----------------------------------------------+

""
还没有人打赏,支持一下

评论|共 14 个

开健回家可

发表于 2014-12-31 10:59:13 | 显示全部楼层

围观中~~~

幸福一生

发表于 2014-12-31 11:23:25 | 显示全部楼层

支持楼主

ainiya0y

发表于 2014-12-31 22:52:04 | 显示全部楼层

[s:132]

hdadad1

发表于 2015-1-1 04:01:31 | 显示全部楼层

路过。。看下先。

宅里香

发表于 2015-1-3 15:03:26 | 显示全部楼层

谢谢楼主分享!!!

fanhongli123

发表于 2020-4-6 15:31:50 | 显示全部楼层

写的真的很不错

llb1986

发表于 2020-6-8 16:57:46 | 显示全部楼层

谢谢楼主,共同发展

夏雪宜

发表于 2020-6-27 19:42:06 | 显示全部楼层

看帖回帖是美德!:lol

欧元美元

发表于 2020-8-15 10:11:19 | 显示全部楼层

谢谢楼主分享

12下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则