//+------------------------------------------------------------------+ //| 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 Red #property indicator_color4 LightBlue #property indicator_color5 Red #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); // 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); // 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 Down"; DoAlert(UD); } } if (Low[i]<=band2) { buybuf[i]= Low[i] - markerdist*Point; if (i < 2 ) { UD="m Up."; 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]<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); } //+------------------------------------------------------------------+ void DoAlert(string UD) { if (!NewBar() || !Use_Sound) return; PlaySound ("Alert2"); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool NewBar() { static datetime dt =0; if (dt!=Time[0]) { dt=Time[0]; return(true); } } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
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 time 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:
It issuies visual alerts to the screen