see IndicatorBuffers function description and it's link "indicator_buffers".
see also "Features of Custom Indicators Creation"
see also "Features of Custom Indicators Creation"
Ahh okay! I think I misunderstood another post here on the forum then.
Markus
Markus
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Below is a code that would use 10 but only 8 show in the indicator window (there should be two more red lines on level -100 and -200 in the window for HistoLevelM1 and M2).
(I know that I could use regular levels, but I want them colored, hence the implementation as indicator buffers).
Markus
//+------------------------------------------------------------------+ //| WoodiesCCI.mq4 | //| thorr | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "histogram colour update by thor@gmx.co.uk Moneytec chat: thorr; created by Luis Damiani; converted by Rosh" #property indicator_separate_window #property indicator_buffers 10 #property indicator_color1 Yellow #property indicator_color2 White #property indicator_color3 DimGray #property indicator_color4 Red #property indicator_color5 RoyalBlue #property indicator_color6 Blue #property indicator_color7 Blue #property indicator_color8 Black #property indicator_color9 Red #property indicator_color10 Red //---- input parameters extern int A_period=50; extern int B_period=12; extern int neutral = 6; extern int num_bars=5000; // parameters int i=0; bool initDone=true; int bar=0; int prevbars=0; int startpar=0; int cs=0; int prevcs=0; string commodt="nonono"; int frame=0; int bars=0; int count = 0, thisbar = 0; double now, prev; bool flag; //---- buffers double FastWoodieCCI[]; double SlowWoodieCCI[]; double HistoWoodieCCI[]; double HistoRed[]; double HistoBlue[]; double HistoLevel0[]; double HistoLevelP1[]; double HistoLevelP2[]; double HistoLevelM1[]; double HistoLevelM2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); SetIndexBuffer(0,FastWoodieCCI); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3); SetIndexBuffer(1,SlowWoodieCCI); SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexBuffer(2,HistoWoodieCCI); SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexBuffer(3,HistoRed); SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1); SetIndexBuffer(4,HistoBlue); SetIndexStyle(5,DRAW_LINE,STYLE_DOT,1); SetIndexBuffer(5,HistoLevelP2); SetIndexStyle(6,DRAW_LINE,STYLE_DOT,1); SetIndexBuffer(6,HistoLevelP1); SetIndexStyle(7,DRAW_LINE,STYLE_DOT,1); SetIndexBuffer(7,HistoLevel0); SetIndexStyle(8,DRAW_LINE,STYLE_DOT,1); SetIndexBuffer(8,HistoLevelM1); SetIndexStyle(9,DRAW_LINE,STYLE_DOT,1); SetIndexBuffer(9,HistoLevelM2); IndicatorShortName("ColouredWoodiesCCI("+A_period+","+B_period+")"); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); cs = A_period + B_period + num_bars; //checksum used to see if parameters have been changed if ((cs==prevcs) && (commodt == Symbol()) && (frame == (Time[4] - Time[5])) && ((Bars - prevbars) < 2)) startpar = Bars - prevbars; else startpar = -1; //params haven't changed only need to calculate new bar commodt = Symbol(); frame= Time[4] - Time[5]; prevbars = Bars; prevcs = cs; if (startpar == 1 | startpar == 0) bar = startpar; else initDone = true; if (initDone) { FastWoodieCCI[num_bars-1]=0; SlowWoodieCCI[num_bars-1]=0; HistoWoodieCCI[num_bars-1]=0; HistoBlue[num_bars-1]=0; HistoRed[num_bars-1]=0; bar=num_bars-2; initDone=false; } for (i = bar; i >= 0; i--) { HistoLevelM2[i]= -200; HistoLevelM1[i]= -100; HistoLevel0[i]= 0; HistoLevelP1[i]= 100; HistoLevelP2[i]= 200; FastWoodieCCI[i]=iCCI(NULL,0,B_period,PRICE_TYPICAL,i); SlowWoodieCCI[i]=iCCI(NULL,0,A_period,PRICE_TYPICAL,i); now = iCCI(NULL,0,A_period,PRICE_TYPICAL,i); if ((prev >= 0 && now < 0) || (prev < 0 && now >= 0)) { // change of sign detected flag = true; count = 0; } if (flag) { // neutral territory if (thisbar != i) count++; prev = now; HistoWoodieCCI[i] = now; if (count >= neutral) flag = false; thisbar = i; continue; } // Colour it! if (now > 0) HistoBlue[i] = now; if (now < 0) HistoRed[i] = now; prev = now; } return(0); }