//+------------------------------------------------------------------+ //| Gimmebar.mq4 | //| See Joe Ross Trading Manual on Gimme-Bars (e.g. from the | //| library on www.trading-naked.com) | //+------------------------------------------------------------------+ #property copyright "by Shimodax, 2005" #property link "http://www.strategybuilder.com" //---- indicator settings #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 SlateBlue #property indicator_color2 SlateBlue #property indicator_color3 Crimson #property indicator_color4 SteelBlue #property indicator_color5 Crimson #property indicator_color6 SteelBlue //---- indicator parameters extern int BobaPeriod= 20; extern int BobaDeviations= 2; //---- indicator buffers double BufferBand1[]; double BufferBand2[]; double BufferSell[]; double BufferBuy[]; double BufferSellEntry[]; double BufferBuyEntry[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- 2 additional buffers are used for counting. IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2); // two bollies SetIndexBuffer(0,BufferBand1); SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,BobaPeriod); SetIndexBuffer(1,BufferBand2); SetIndexStyle(1,DRAW_LINE); SetIndexDrawBegin(1,BobaPeriod); // marks for gimmees SetIndexBuffer(2,BufferSell); SetIndexStyle(2,DRAW_ARROW); SetIndexDrawBegin(2,BobaPeriod); SetIndexArrow(2, 167); SetIndexEmptyValue(2, 0); SetIndexBuffer(3,BufferBuy); SetIndexStyle(3,DRAW_ARROW); SetIndexDrawBegin(3,BobaPeriod); SetIndexArrow(3, 167); SetIndexEmptyValue(3, 0); // marks for entries SetIndexBuffer(4,BufferSellEntry); SetIndexStyle(4,DRAW_ARROW); SetIndexDrawBegin(4,BobaPeriod); SetIndexArrow(4, 238); SetIndexEmptyValue(4, 0); SetIndexBuffer(5,BufferBuyEntry); SetIndexStyle(5,DRAW_ARROW); SetIndexDrawBegin(5,BobaPeriod); SetIndexArrow(5, 236); SetIndexEmptyValue(5, 0); //---- name for DataWindow and indicator subwindow label // IndicatorShortName("GimmeBar "); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars= IndicatorCounted(), lastbar; if (counted_bars>0) counted_bars--; lastbar= Bars - counted_bars; GimmeeBar(0, lastbar, BufferSell, BufferBuy, BufferSellEntry, BufferBuyEntry, BufferBand1, BufferBand2, BobaPeriod, BobaDeviations); return (0); } //+------------------------------------------------------------------+ //| Mark Gimmee-Bars and mark possible entries for deals | //+------------------------------------------------------------------+ double GimmeeBar(int offset, int lastbar, double &sellbuf[], double &buybuf[], double &sellbuf2[], double &buybuf2[], double &band1buf[], double&band2buf[], int period, int deviation) { double band1, band2; int markerdist= 5; // distance between bars and marker dots lastbar= MathMin(Bars-period, lastbar); //---- main loop for(int i= lastbar; i>=offset; i--){ sellbuf[i]= 0; buybuf[i]=0; sellbuf2[i]= 0; buybuf2[i]=0; band1= iBands(NULL,0, period, deviation, 0, PRICE_CLOSE, MODE_UPPER, i); band2= iBands(NULL,0, period, deviation, 0, PRICE_CLOSE, MODE_LOWER, i); band1buf[i]= band1; band2buf[i]= band2; // 1. Prices were rising. // 2. Prices touched the upper band. // 3. The price bar closed lower than it // opened when prices were previously rising. // or vice versa if (High[i]>band1 && Low[i]Close[i]) { sellbuf[i]= High[i] + markerdist*Point; } else if (High[i+1]>band1 && Low[i+i]High[i] && Low[i]Close[i]) { sellbuf[i]= High[i] + markerdist*Point; } else if (Low[i]band2 && Open[i+1]>Close[i+1] && Open[i]band2 && Open[i+1]>Close[i+1] && Low[i+1]band1 && Open[i]High[i+1]+1*Point) { buybuf2[i]= High[i+1]+1*Point; } } /* if (DebugLogger) Print(TimeOffset(offset), "BG-GimmeBar ", ""); */ return (0); } //+------------------------------------------------------------------+