//+------------------------------------------------------------------+ //| 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]<band1 && Open[i+1]<Close[i+1] && Open[i]>Close[i]) { sellbuf[i]= High[i] + markerdist*Point; } else if (High[i+1]>band1 && Low[i+i]<band1 && Open[i+1]<Close[i+1] && High[i+1]>High[i] && Low[i]<band1 && Open[i]>Close[i]) { sellbuf[i]= High[i] + markerdist*Point; } else if (Low[i]<band2 && High[i]>band2 && Open[i+1]>Close[i+1] && Open[i]<Close[i]) { buybuf[i]= Low[i] - markerdist*Point; } else if (Low[i+1]<band2 && High[i+i]>band2 && Open[i+1]>Close[i+1] && Low[i+1]<Low[i] && Low[i]>band1 && Open[i]<Close[i]) { buybuf[i]= Low[i] - markerdist*Point; } // Should such a price bar occur, a sell short order is to be executed // one tick below the low of the Gimmee bar. if (sellbuf[i+1]!=0 && Low[i]<Low[i+1]-1*Point) { sellbuf2[i]= Low[i+1]-1*Point; } if (buybuf[i+1]!=0 && High[i]>High[i+1]+1*Point) { buybuf2[i]= High[i+1]+1*Point; } } /* if (DebugLogger) Print(TimeOffset(offset), "BG-GimmeBar ", ""); */ return (0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_ARROW
Indicators Used:
Bollinger bands indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: