BBands Stops Bar Indicator
Overview
The "BBands Stops Bar" is a MetaTrader 4 (MT4) script designed to assist traders by identifying trend signals and stop points using Bollinger Bands. This explanation will describe the logic of this indicator in simple terms, making it accessible for individuals without programming experience.
Key Concepts
-
Bollinger Bands: These are technical analysis tools that consist of a middle band (a moving average) and two outer bands (standard deviations away from the middle). They help identify overbought or oversold conditions in a market.
-
Trend Identification: The script determines whether the market is trending upwards, downwards, or sideways by comparing the current price to Bollinger Bands.
Indicator Components
-
Bands Calculation:
- Uses historical closing prices to compute the upper and lower bands of Bollinger Bands for a specified period.
- Adjusts these bands slightly based on a "Money Risk" factor to create modified stop points (
bsmax
andbsmin
).
-
Trend Determination:
- If the current price is above the previous upper band, it suggests an upward trend.
- Conversely, if below the lower band, it indicates a downward trend.
-
Signal Generation:
- Provides signals for potential buy or sell points based on when prices cross these modified bands (
bsmax
andbsmin
).
- Provides signals for potential buy or sell points based on when prices cross these modified bands (
-
Stop Points:
- Determines stop-loss levels that adjust according to market trends.
- Maintains consistency in stops unless the trend reverses.
-
Alerts and Notifications:
- Generates alerts if a significant trend change is detected, notifying traders of potential opportunities or risks.
User Customization
-
Periodicity: Users can set the time frame for analysis, such as daily, weekly, etc.
-
Length and Deviation: Parameters like the length of the moving average and standard deviation multiplier can be adjusted to refine the sensitivity of the bands.
-
Signal Type: Options include showing only stop points, trend signals, or both.
-
Alerts: Users can enable or disable sound alerts when a significant trend change is detected.
Practical Use
Traders use this indicator to make informed decisions by identifying potential entry and exit points based on market trends. By adjusting the parameters, traders can tailor the indicator to suit different trading strategies and risk appetites.
In summary, the "BBands Stops Bar" helps traders visualize market conditions and manage trades more effectively by leveraging Bollinger Bands for trend analysis and stop point determination.
//+------------------------------------------------------------------+
//| BBands Stops Bar.mq4 |
//| Modified to Bar type by cja |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| BBands Stops.mq4 |
//| Copyright © 2006, TrendLaboratory Ltd. |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, TrendLaboratory Ltd."
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"
#property indicator_separate_window
#property indicator_buffers 6
/*#property indicator_color1 White
#property indicator_color2 Red
#property indicator_color3 White*/
#property indicator_color4 Red
#property indicator_color5 White
#property indicator_color6 Red
#property indicator_width5 3
#property indicator_width6 3
#property indicator_minimum 0
#property indicator_maximum 1
//---- input parameters
extern int TimeFrame= 0;
extern int Length=3; // Bollinger Bands Period
extern int Deviation=1; // Deviation was 2
extern double MoneyRisk=1.00; // Offset Factor
extern int Signal=1; // Display signals mode: 1-Signals & Stops; 0-only Stops; 2-only Signals;
extern int Line=1; // Display line mode: 0-no,1-yes
extern int Nbars=1000;
//---- indicator buffers
double UpTrendBuffer[];
double DownTrendBuffer[];
double UpTrendSignal[];
double DownTrendSignal[];
double UpTrendLine[];
double DownTrendLine[];
extern bool SoundON=true;
bool TurnedUp = false;
bool TurnedDown = false;
string TimeFrameStr;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexBuffer(0,UpTrendBuffer);
SetIndexBuffer(1,DownTrendBuffer);
SetIndexBuffer(2,UpTrendSignal);
SetIndexBuffer(3,DownTrendSignal);
SetIndexBuffer(4,UpTrendLine);
SetIndexBuffer(5,DownTrendLine);
SetIndexStyle(0,DRAW_NONE,0,0);
SetIndexStyle(1,DRAW_NONE,0,0);
SetIndexStyle(2,DRAW_NONE,0,2);
SetIndexStyle(3,DRAW_NONE,0,2);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexStyle(5,DRAW_HISTOGRAM);
SetIndexArrow(0,164);
SetIndexArrow(1,164);
SetIndexArrow(2,174);
SetIndexArrow(3,174);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
SetIndexLabel(0,"UpTrend Stop");
SetIndexLabel(1,"DownTrend Stop");
SetIndexLabel(2,"UpTrend Signal");
SetIndexLabel(3,"DownTrend Signal");
SetIndexLabel(4,"UpTrend Line");
SetIndexLabel(5,"DownTrend Line");
//----
SetIndexDrawBegin(0,Length);
SetIndexDrawBegin(1,Length);
SetIndexDrawBegin(2,Length);
SetIndexDrawBegin(3,Length);
SetIndexDrawBegin(4,Length);
SetIndexDrawBegin(5,Length);
switch(TimeFrame)
{
case 1 : TimeFrameStr="Period M1"; break;
case 5 : TimeFrameStr="Period M5"; break;
case 15 : TimeFrameStr="Period M15"; break;
case 30 : TimeFrameStr="Period M30"; break;
case 60 : TimeFrameStr="Period H1"; break;
case 240 : TimeFrameStr="Period H4"; break;
case 1440 : TimeFrameStr="Period D1"; break;
case 10080 : TimeFrameStr="Period W1"; break;
case 43200 : TimeFrameStr="Period MN1"; break;
default : TimeFrameStr=" Current Timeframe "; TimeFrame=0;
}
short_name="BBands Stops Bar [" +TimeFrameStr+" ]";
IndicatorShortName(short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Bollinger Bands_Stop_v1 |
//+------------------------------------------------------------------+
int start()
{
int i,shift,trend;
double smax[25000],smin[25000],bsmax[25000],bsmin[25000];
for (shift=Nbars;shift>=0;shift--)
{
UpTrendBuffer[shift]=0;
DownTrendBuffer[shift]=0;
UpTrendSignal[shift]=0;
DownTrendSignal[shift]=0;
UpTrendLine[shift]=EMPTY_VALUE;
DownTrendLine[shift]=EMPTY_VALUE;
}
for (shift=Nbars-Length-1;shift>=0;shift--)
{
smax[shift]=iBands(NULL,TimeFrame,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);
smin[shift]=iBands(NULL,TimeFrame,Length,Deviation,0,PRICE_CLOSE,MODE_LOWER,shift);
if (Close[shift]>smax[shift+1]) trend=1;
if (Close[shift]<smin[shift+1]) trend=-1;
if(trend>0 && smin[shift]<smin[shift+1]) smin[shift]=smin[shift+1];
if(trend<0 && smax[shift]>smax[shift+1]) smax[shift]=smax[shift+1];
bsmax[shift]=smax[shift]+0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);
bsmin[shift]=smin[shift]-0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);
if(trend>0 && bsmin[shift]<bsmin[shift+1]) bsmin[shift]=bsmin[shift+1];
if(trend<0 && bsmax[shift]>bsmax[shift+1]) bsmax[shift]=bsmax[shift+1];
if (trend>0)
{
if (Signal>0 && UpTrendBuffer[shift+1]==-1.0)
{
UpTrendSignal[shift]=bsmin[shift];
UpTrendBuffer[shift]=bsmin[shift];
if(Line>0) UpTrendLine[shift]=bsmin[shift];
if (SoundON==true && shift==0 && !TurnedUp)
{
Alert("BBands go Up",Symbol(),"-",Period());
TurnedUp = true;
TurnedDown = false;
}
}
else
{
UpTrendBuffer[shift]=bsmin[shift];
if(Line>0) UpTrendLine[shift]=bsmin[shift];
UpTrendSignal[shift]=-1;
}
if (Signal==2) UpTrendBuffer[shift]=0;
DownTrendSignal[shift]=-1;
DownTrendBuffer[shift]=-1.0;
DownTrendLine[shift]=EMPTY_VALUE;
}
if (trend<0)
{
if (Signal>0 && DownTrendBuffer[shift+1]==-1.0)
{
DownTrendSignal[shift]=bsmax[shift];
DownTrendBuffer[shift]=bsmax[shift];
if(Line>0) DownTrendLine[shift]=bsmax[shift];
if (SoundON==true && shift==0 && !TurnedDown)
{
Alert("BBands go Down",Symbol(),"-",Period());
TurnedDown = true;
TurnedUp = false;
}
}
else
{
DownTrendBuffer[shift]=bsmax[shift];
if(Line>0)DownTrendLine[shift]=bsmax[shift];
DownTrendSignal[shift]=-1;
}
if (Signal==2) DownTrendBuffer[shift]=0;
UpTrendSignal[shift]=-1;
UpTrendBuffer[shift]=-1.0;
UpTrendLine[shift]=EMPTY_VALUE;
}
}
return(0);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---