设为首页 收藏本站 切换语言

请教如何在指标中编写,在两线之间画线段  

| 发表于 2021-4-12 23:13:26 | 显示全部楼层 |复制链接
各位老师,思路如下:
1.当两线之间距离由大变小时,在K棒对应的两指标线之间画线段;
2.当两线之间距离由小变大时,在K棒对应的两指标线之间画线段;
我的指标代码如下:
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 White
#property indicator_color2 Yellow
#property indicator_color3 Yellow
//---- input parameters
extern int BBI_Ma1 = 3;
extern int BBI_Ma2 = 6;
extern int BBI_Ma3 = 12;
extern int BBI_Ma4 = 24;
extern int Boll_Ma = 50;
extern int Boll_P = 2;
extern int Ma_Method = 0;//=0:Simple moving average,=1:Exponential moving average,=2:Smoothed moving average,=3:Linear weighted moving average
//---- indicator buffers
double up[];
double lower[];
double BBI[];                              
double BBI_std[];//standard deviation      
double BBI_av[];//average                  
double BBI_av2[];                        

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- first positions skipped when drawing
   SetIndexDrawBegin(0,BBI_Ma4+Boll_Ma*2);
   SetIndexDrawBegin(1,BBI_Ma4+Boll_Ma*2);
   SetIndexDrawBegin(2,BBI_Ma4+Boll_Ma*2);
//---- 3 indicator buffers mapping   
   SetIndexBuffer(0,BBI);
   SetIndexBuffer(1,up);
   SetIndexBuffer(2,lower);
   SetIndexBuffer(3,BBI_std);
   SetIndexBuffer(4,BBI_av);
    SetIndexBuffer(5,BBI_av2);
//---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_NONE);
   SetIndexStyle(4,DRAW_NONE);
   SetIndexStyle(5,DRAW_NONE);
//---- index labels
   SetIndexLabel(0,"BBI_av");
   SetIndexLabel(1,"BBI UPR");
   SetIndexLabel(2,"BBI DWR");
   IndicatorShortName("BBIboll band");
   SetIndexEmptyValue(0,0);
   SetIndexEmptyValue(1,0);
   SetIndexEmptyValue(2,0);
   SetIndexEmptyValue(3,0);
   SetIndexEmptyValue(4,0);
   SetIndexEmptyValue(5,0);

//---- initialization done
   return(0);   
  }

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();   
   double ma1,ma2,ma3,ma4,std;

   if(Bars<BBI_Ma4+Boll_Ma*2)return(-1);
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;//+BBI_Ma4+Boll_Ma;
//---- main loop
   while(limit>-1)
     {
       ma1 = iMA(NULL,0,BBI_Ma1,0,Ma_Method,PRICE_CLOSE,limit);
       ma2 = iMA(NULL,0,BBI_Ma2,0,Ma_Method,PRICE_CLOSE,limit);
       ma3 = iMA(NULL,0,BBI_Ma3,0,Ma_Method,PRICE_CLOSE,limit);
       ma4 = iMA(NULL,0,BBI_Ma4,0,Ma_Method,PRICE_CLOSE,limit);
       BBI[limit] = 0.25 * (ma1 + ma2 + ma3 + ma4);   

       BBI_av[limit] = iMAOnArray(BBI,0,Boll_Ma,0,Ma_Method,limit);  

       limit --;
     }                                                   

   limit=Bars-counted_bars;
   while(limit>-1)
     {

       BBI_av2[limit] = iMAOnArray(BBI_av,0,Boll_Ma,0,Ma_Method,limit);   
       std = 0;      
      std = iStdDevOnArray(BBI_av,0,Boll_Ma,Ma_Method,0,limit);
      up[limit] = BBI_av[limit] + Boll_P * std;            //指标线上轨
      lower[limit] = BBI_av[limit] - Boll_P * std;       //指标线下轨                     
       limit --;
     }
    Comment("BBI_av: ",BBI_av[0],"  ",up[0],"  ",lower[0]);  

//---- done
   return(0);
  }
举报

评论 使用道具

精彩评论6

latage
未及格
| 发表于 2021-4-13 15:50:38 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

qwe11
CCC
| 发表于 2021-5-5 14:08:16 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

nanaliu
CC
| 发表于 2021-10-29 11:12:20 | 显示全部楼层
看看。。支持下,。。。。
举报

点赞 评论 使用道具

duqiangyx
DD
| 发表于 2021-12-21 13:45:02 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

交易者
DDD
| 发表于 2022-1-11 21:24:28 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

紫竹青荷
CC
| 发表于 2022-5-8 17:05:08 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)