Doda-BBands_v1

Here's a breakdown of what this MetaTrader script does, explained in a way that someone without programming knowledge can understand:

This script is designed to analyze price charts and provide potential buy/sell signals based on modified Bollinger Bands. Bollinger Bands are a tool used in trading to measure the volatility of a market and identify potential overbought or oversold conditions.

Here's how it works step-by-step:

  1. Initialization: When the script starts, it sets up several things:

    • It creates visual buffers to store data that will be displayed on the chart. These buffers are like invisible spreadsheets where the script will put numbers representing things like potential stop-loss levels, buy/sell signals and line values.
    • It defines the colors and styles of the lines and arrows that will appear on the chart.
    • It sets up labels so you know what each line and arrow represents.
  2. Data Preparation: The script looks back at a certain number of past data points (defined by the "Nbars" input parameter, which defaults to 1000). It makes sure there's enough historical data to work with before it starts analyzing anything.

  3. Calculating Bollinger Bands: For each data point in the past (going from the most recent backward):

    • It calculates the Upper and Lower Bollinger Bands using a standard formula with a specified "Length" (period) and "Deviation" (standard deviation multiplier). Essentially, it draws two lines above and below a moving average of the price. These lines widen or narrow based on how volatile the price has been.
  4. Trend Determination: The script checks whether the current closing price is above the Upper Bollinger Band or below the Lower Bollinger Band from the previous period. This helps determine the direction of the trend:

    • If the price is above the Upper Band, it's considered an uptrend.
    • If the price is below the Lower Band, it's considered a downtrend.
    • If the price is within the bands, it's considered no clear trend.
  5. Adjusting Stop-Loss Levels: The script then adjusts potential stop-loss levels based on the trend and an additional "MoneyRisk" factor:

    • If it's an uptrend, the potential stop-loss level is based on the Lower Bollinger Band.
    • If it's a downtrend, the potential stop-loss level is based on the Upper Bollinger Band.
    • The "MoneyRisk" factor modifies these levels, potentially widening or narrowing the stop-loss distance.
  6. Signal Generation:

    • The script determines whether a new buy (uptrend) or sell (downtrend) signal should be displayed. This often happens when the trend changes from the previous period.
    • It draws an arrow on the chart at the price level corresponding to the potential stop-loss, indicating a possible entry point.
    • It can also display a line representing these stop-loss levels (controlled by the "Line" input).
  7. Alerts: Optionally, the script can trigger an alert (sound and/or message) when a new buy or sell signal is generated.

  8. Display: Finally, the script draws all the calculated values and signals on the chart, making it visually easy to see the potential trading opportunities.

In summary, this script uses modified Bollinger Bands to identify potential trends, calculates dynamic stop-loss levels based on those trends and a risk factor, and then visually displays buy/sell signals on the price chart. The trader can use these signals to inform their trading decisions.

Indicators Used
Bollinger bands indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
2 Views
0 Downloads
0 Favorites
Doda-BBands_v1
//+------------------------------------------------------------------+
//|                                          Gopal Krishan Doda      |
//|                                   http://www.DodaCharts.com      |
//|                         Modified version of Bollinger Bands      |
//|I'm not the original author of it. I've just modified the code    |
//|of existing indiator by TrendLaboratory.                          |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 RoyalBlue
#property indicator_color2 Red
#property indicator_color3 RoyalBlue
#property indicator_color4 Red
#property indicator_color5 RoyalBlue
#property indicator_color6 Red
//---- input parameters
extern int    Length=20;      // Bollinger Bands Period
extern int    Deviation=2;    // 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;

double mykijun;
double mytenkan;
int ii;

//---- indicator buffers
double UpTrendBuffer[];
double DownTrendBuffer[];
double UpTrendSignal[];
double DownTrendSignal[];
double UpTrendLine[];
double DownTrendLine[];
extern bool SoundON=true;
bool TurnedUp=false;
bool TurnedDown=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   ObjectCreate("mywebsite",OBJ_LABEL,0,0,0);

   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_ARROW,0,1);
   SetIndexStyle(1,DRAW_ARROW,0,1);
   SetIndexStyle(2,DRAW_ARROW,0,1);
   SetIndexStyle(3,DRAW_ARROW,0,1);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexArrow(2,108);
   SetIndexArrow(3,108);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
   short_name="BBands Stop("+Length+","+Deviation+")";
   IndicatorShortName(short_name);
   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);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("mywebsite");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if (Bars<Nbars) return(-1);
   
   int    shift,trend;
   double smax[],smin[],bsmax[],bsmin[];
   
   int size=Nbars;
   ArrayResize(smax,size);
   ArrayResize(smin,size);
   ArrayResize(bsmax,size);
   ArrayResize(bsmin,size);
   
   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,0,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);
      smin[shift]=iBands(NULL,0,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("DodaCharts-BBands going Up on ",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("DodaCharts-BBands going Down on ",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;
        }

     }

   ObjectSetText("mywebsite","Doda-Bollinger 1.0 | Powered by www.DodaCharts.com",10,"Arial",Red);
   ObjectSet("mywebsite",OBJPROP_XDISTANCE,2);
   ObjectSet("mywebsite",OBJPROP_YDISTANCE,15);
   ObjectSet("mywebsite",OBJPROP_CORNER,0);

   return(0);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---