//+------------------------------------------------------------------+ //| Gimmebar.mq4 | //| See Joe Ross Trading Manual on Gimme-Bars (e.g. from the | //| library on www.trading-naked.com) //|Bolllitouch - yet another perky mod | //+------------------------------------------------------------------+ #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 Pink #property indicator_color4 LightBlue #property indicator_color5 Pink #property indicator_color6 LightBlue //---- indicator parameters extern int BobaPeriod= 20; extern int BobaDeviations= 2; extern bool Use_Sound=true; //---- indicator buffers double BufferBand1[]; double BufferBand2[]; double BufferSell[]; double BufferBuy[]; double BufferSellEntry[]; double BufferBuyEntry[]; string UD=""; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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) { sellbuf[i]= High[i] + markerdist*Point; if (i < 2 ) { UD="m Top"; DoAlert(UD); } } if (Low[i]<=band2) { buybuf[i]= Low[i] - markerdist*Point; if (i < 2 ) { UD="m Bottom."; DoAlert(UD); } } // 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]High[i+1]+1*Point) { // buybuf2[i]= High[i+1]+1*Point; // } } /* if (DebugLogger) Print(TimeOffset(offset), "BG-GimmeBar ", ""); */ return (0); } //+------------------------------------------------------------------+ void DoAlert(string UD) { if (!NewBar() || !Use_Sound) return; PlaySound ("Alert2"); Alert (Symbol()," ",Period(),"m Boll Touch at ",UD); } bool NewBar() { static datetime dt = 0; if (dt != Time[0]) { dt = Time[0]; return(true); } }