有您的持续关注
我们会做得更好

指标BBands Stop 利用布林带特性标识止损参考点位



BBands Stop 指标利用布林带特性标识止损参考点位。

BBands Stop 指标图表效果如下:BBands Stop 指标BBands Stop 指标源码如下:

//+------------------------------------------------------------------+
//|                                                  BBands Stop.mq4 |
//|                                     Copyright 2014, QQ:125808047 |
//+------------------------------------------------------------------+
#property copyright "www.125808047.com"
#property link      "http://www.125808047.com/"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Cyan
#property indicator_color2 Magenta
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_color5 Green
#property indicator_color6 Pink

extern int    布周期   = 20;
extern int    布偏距   = 2;       // 布偏距 was 2
extern double 资金风险 = 1.00;    // Offset Factor
extern int    显示棒数 = 1000;
extern int    信显样式 = 1;       // 显示信号方式: 0-只有止损; 1-信号加止损; 2-只有信号;
extern bool   使用线形 = true;    // 显示线形方式: 0-无, 1-有;
extern bool   使用声音 = true;

double 涨趋点[];
double 跌趋点[];
double 涨信箭[];
double 跌信箭[];
double 涨势线[];
double 跌势线[];
bool   趋势为涨= false;
bool   趋势为跌= false;

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

int init()
  {
   string 简称;
  
   //---- indicator line
   SetIndexBuffer(0, 涨趋点);
   SetIndexBuffer(1, 跌趋点);
   SetIndexBuffer(2, 涨信箭);
   SetIndexBuffer(3, 跌信箭);
   SetIndexBuffer(4, 涨势线);
   SetIndexBuffer(5, 跌势线);
  
   SetIndexStyle(0, DRAW_ARROW, 0, 1);
   SetIndexStyle(1, DRAW_ARROW, 0, 1);
   SetIndexStyle(2, DRAW_ARROW, 0, 1);
   SetIndexStyle(3, DRAW_ARROW, 0, 1);
   SetIndexStyle(4, DRAW_LINE);
   SetIndexStyle(5, DRAW_LINE);
  
   SetIndexArrow(0, 159);
   SetIndexArrow(1, 159);
   SetIndexArrow(2, 217);
   SetIndexArrow(3, 218);
  
   IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
  
   //--
   简称= "BBands Stop("+布周期+", "+布偏距+")";
   IndicatorShortName(简称);
   SetIndexLabel(0, "涨趋 Stop");
   SetIndexLabel(1, "跌趋 Stop");
   SetIndexLabel(2, "涨趋 信号");
   SetIndexLabel(3, "跌趋 信号");
   SetIndexLabel(4, "涨趋 Line");
   SetIndexLabel(5, "跌趋 Line");

   SetIndexDrawBegin(0, 布周期);
   SetIndexDrawBegin(1, 布周期);
   SetIndexDrawBegin(2, 布周期);
   SetIndexDrawBegin(3, 布周期);
   SetIndexDrawBegin(4, 布周期);
   SetIndexDrawBegin(5, 布周期);
   return(0);
  }
 
int deinit()
  {
  Comment("www.125808047.com");
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

  int start()
  {
   string 收趋位;
   double 布上轨[25000],
          布下轨[25000],
          顶止损[25000],
          底止损[25000];
         
   //--初归位
   for(int i=显示棒数; i>=0; i--){
      涨趋点[i]= 0;
      跌趋点[i]= 0;
      涨信箭[i]= 0;
      跌信箭[i]= 0;
      涨势线[i]= EMPTY_VALUE;
      跌势线[i]= EMPTY_VALUE;
     }
  
   for(i=显示棒数-布周期-1; i>=0; i--){
      布上轨[i]= iBands(NULL, 0, 布周期, 布偏距, 0, PRICE_CLOSE, MODE_UPPER, i);
      布下轨[i]= iBands(NULL, 0, 布周期, 布偏距, 0, PRICE_CLOSE, MODE_LOWER, i);
      //以上语句写后 涨趋点[i]等几个变量已有了数值,这是为何?
      //答:因为在for循环语句中,循环体内的变量已被赋值了,且结果值为最后一次赋值.
     
      //--确定收盘价位置
      if(Close[i]>布上轨[i+1])
         收趋位= "前顶外";
      if(Close[i]<布下轨[i+1])
         收趋位= "前底外";
     
      //--只显示超过或等于前一轨值的轨值
      if(收趋位=="前顶外")
         if(布下轨[i]<布下轨[i+1])
            布下轨[i]= 布下轨[i+1];
      if(收趋位=="前底外")
         if(布上轨[i]>布上轨[i+1])
            布上轨[i]= 布上轨[i+1];
           
      //--根据轨值计算止损价
      顶止损[i]= 布上轨[i]+0.5*(资金风险-1)*(布上轨[i]-布下轨[i]);
      底止损[i]= 布下轨[i]-0.5*(资金风险-1)*(布上轨[i]-布下轨[i]);
 
      if(收趋位=="前顶外")
         if(底止损[i]<底止损[i+1])
            底止损[i]= 底止损[i+1];
      if(收趋位=="前底外")
         if(顶止损[i]>顶止损[i+1])
            顶止损[i]= 顶止损[i+1];
     
      //--
      if(收趋位=="前顶外"){
         if(信显样式>0 && 涨趋点[i+1]==-1.0){
         //涨趋点[i+1]==-1.0 为何在定义完布上轨和布下轨后就被赋值的,这样的条件从何而讲?
         //答:条件来自上一层条件语句,即"if(收趋位=="前顶外"){",因为主函数start()是来一次数据则刷新计算一遍,故有涨趋点[i+1]==-1.0存在的可能性; 在定义完布上轨和布下轨后就被赋值,是因为首先计算前一涨趋点的值做为应用,当应用完成后,再给当前跌趋点[i]赋新值以备下次引用.
            涨信箭[i]= 底止损[i];
            涨趋点[i]= 底止损[i];
            if(使用线形==true)
               涨势线[i]= 底止损[i];
            if(使用声音==true && i==0 && 趋势为涨==false){
               Alert("BBands going Up on ", Symbol(), "-", Period());
               趋势为涨= true;
               趋势为跌= false;
              }
           }
         else{
            涨趋点[i]= 底止损[i];
            if(使用线形==true)
               涨势线[i]= 底止损[i];
            涨信箭[i]= -1;
           }
          
         if(信显样式==2)
            涨趋点[i]= 0;  
           
         跌信箭[i]= -1;
         跌趋点[i]= -1.0;
         跌势线[i]= EMPTY_VALUE;
        }
     
      //--
      if(收趋位=="前底外"){
         if(信显样式>0 && 跌趋点[i+1]==-1.0){
            跌信箭[i]= 顶止损[i];
            跌趋点[i]= 顶止损[i];
            if(使用线形==true)
               跌势线[i]= 顶止损[i];
            if(使用声音==true && i==0 && 趋势为跌==false){
               Alert("BBands going Down on ", Symbol(), "-", Period());
               趋势为跌= true;
               趋势为涨= false;
              }
           }
         else{
            跌趋点[i]= 顶止损[i];
            if(使用线形==true)
               跌势线[i]= 顶止损[i];
            跌信箭[i]= -1;
           }
          
         if(信显样式==2)
            跌趋点[i]= 0; 
             
         涨信箭[i]= -1;
         涨趋点[i]= -1.0;
         涨势线[i]= EMPTY_VALUE;
        }
     }
   return(0);
  }

如您喜欢此文章请点下面分享按钮↴峰汇在线 » 指标BBands Stop 利用布林带特性标识止损参考点位
上一篇:
下一篇:
分享到:更多 ()