BolliToucher1_v1
Download scriptThis tool is designed to identify specific price action signals on a trading chart by monitoring how the market interacts with dynamic boundaries. It focuses on identifying "Gimme-Bars," which are specific price movements that suggest a potential reversal or exhaustion in the current trend.
Core Mechanism: The Bollinger Bands
The script utilizes a standard technical analysis tool known as Bollinger Bands. These consist of two outer lines (upper and lower) that expand and contract based on market volatility.
- The Upper Band represents a high-price threshold.
- The Lower Band represents a low-price threshold.
How the Logic Works
The script continuously scans the price history to find instances where the market "touches" or exceeds these boundaries. It looks for two primary scenarios:
1. Upper Bound Interaction (Potential Sell Signal) The script monitors for moments when the price reaches or exceeds the Upper Band. When this happens, it places a visual marker on the chart. In trading terms, this identifies an area where prices may have become overextended relative to recent movement, signaling a potential cooling-off period or downward turn.
2. Lower Bound Interaction (Potential Buy Signal) Similarly, the script monitors for moments when the price drops to or below the Lower Band. It places a distinct visual marker at these points to highlight areas where prices may be stretched to the downside, potentially indicating a "dip" that could lead to an upward move.
Visual and Audible Feedback
To ensure the user can react in real-time, the script provides three types of feedback:
- Dynamic Lines: It draws the Bollinger Bands directly on your chart so you can see the current "boundaries" of the market.
- Visual Markers: It places specific icons (arrows/dots) exactly where a boundary touch occurs, making it easy to scan the chart for historical and current signals.
- Real-Time Alerts: If the script detects a touch on either the top or bottom band in real-time, it will trigger an audible sound and a pop-up alert on your screen. These alerts are programmed to occur only once per new candle to avoid repetitive noise.
Summary for the Trader
Essentially, this script acts as an automated "spotter." Instead of you having to constantly watch the price lines to see if they hit a specific boundary, the tool highlights these intersections automatically. It identifies high-interest zones where the market has reached its extreme limit, allowing you to focus on those specific moments for potential trade opportunities.
//+------------------------------------------------------------------+
//| 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]<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");
Alert (Symbol()," ",Period(),"m Boll Touch at ",UD);
}
bool NewBar()
{
static datetime dt = 0;
if (dt != Time[0])
{
dt = Time[0];
return(true);
}
}
Comments