DDFX 3 BBStop v3

Download script
Author: Copyright � 2006, TrendLaboratory Ltd.
DDFX 3 BBStop v3

This tool is designed as a technical analysis indicator for the MetaTrader platform, specifically engineered to identify and visualize trend reversals and momentum shifts using a modified Bollinger Bands logic. Rather than simply showing standard volatility bands, it calculates dynamic "stop" levels to help traders determine when a current trend has exhausted itself or shifted direction.

Core Logic and Functionality

Trend Detection and Filtering The script continuously monitors price action relative to the upper and lower boundaries of a Bollinger Band. It identifies whether the market is currently in an "UpTrend" or a "DownTrend" based on where the closing price sits in relation to these bands. A key feature of this logic is its "memory"—it ensures that once a trend direction is established, the indicator maintains that perspective until a clear reversal condition is met, preventing "noise" from flickering signals on your chart.

Dynamic Stop Levels Instead of relying solely on the standard band edges, the script calculates specific "Stop Lines." These are mathematically derived lines that act as trailing support or resistance. The logic includes a risk-management component (via the MoneyRisk parameter) that adjusts how far these stop lines sit from the actual bands. This allows the tool to provide a more cushioned, less volatile reference point for where a trend might end.

Signal Generation and Alerts The indicator provides visual feedback in three distinct ways:

  • Visual Cues: It plots specific arrows or symbols on the chart to notify you of a trend shift (UpTrend Signal vs. DownTrend Signal).
  • Trend Lines: It can draw continuous lines representing the current active "Stop" level for the prevailing trend, allowing you to see the trailing boundary in real-time.
  • Audible Alerts: The script is equipped with an automated notification system. When the logic detects a significant shift (e.g., a transition from an upward move to a downward move), it can trigger a pop-up alert and sound to notify the trader immediately without requiring them to stare at the screen constantly.

Summary of User Experience

For a trader, this script acts as a dynamic "safety net." It automatically tracks the price, filters out minor fluctuations, and identifies the specific point where a trend's strength has broken down. By providing both visual arrows for entry/exit points and trailing lines for risk management, it offers a comprehensive way to visualize momentum and protect capital during volatile market swings.

Indicators Used
Bollinger bands indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
9 Views
0 Downloads
0 Favorites
DDFX 3 BBStop v3
/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "Copyright © 2006, TrendLaboratory Ltd."
#property link      "http://finance.groups.yahoo.com/group/TrendLaboratory"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Lime
#property indicator_color2 Yellow
#property indicator_color3 Lime
#property indicator_color4 Yellow
#property indicator_color5 Lime
#property indicator_color6 Yellow

extern int Length = 14;
extern int Deviation = 2;
extern double MoneyRisk = 1.0;
extern int Signal = 2;
extern int Line = 1;
extern int Nbars = 5500;
double g_ibuf_104[];
double g_ibuf_108[];
double g_ibuf_112[];
double g_ibuf_116[];
double g_ibuf_120[];
double g_ibuf_124[];
extern bool SoundON = TRUE;
bool gi_132 = FALSE;
bool gi_136 = FALSE;

int init() {
   SetIndexBuffer(0, g_ibuf_104);
   SetIndexBuffer(1, g_ibuf_108);
   SetIndexBuffer(2, g_ibuf_112);
   SetIndexBuffer(3, g_ibuf_116);
   SetIndexBuffer(4, g_ibuf_120);
   SetIndexBuffer(5, g_ibuf_124);
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
   SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 1);
   SetIndexStyle(3, DRAW_ARROW, STYLE_SOLID, 1);
   SetIndexStyle(4, DRAW_LINE);
   SetIndexStyle(5, DRAW_LINE);
   SetIndexArrow(0, 159);
   SetIndexArrow(1, 159);
   SetIndexArrow(2, 233);
   SetIndexArrow(3, 234);
   IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
   string ls_0 = "BBands Stop(" + Length + "," + Deviation + ")";
   IndicatorShortName(ls_0);
   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 start() {
   int li_8;
   double lda_12[25000];
   double lda_16[25000];
   double lda_20[25000];
   double lda_24[25000];
   for (int l_shift_4 = Nbars; l_shift_4 >= 0; l_shift_4--) {
      g_ibuf_104[l_shift_4] = 0;
      g_ibuf_108[l_shift_4] = 0;
      g_ibuf_112[l_shift_4] = 0;
      g_ibuf_116[l_shift_4] = 0;
      g_ibuf_120[l_shift_4] = EMPTY_VALUE;
      g_ibuf_124[l_shift_4] = EMPTY_VALUE;
   }
   for (l_shift_4 = Nbars - Length - 1; l_shift_4 >= 0; l_shift_4--) {
      lda_12[l_shift_4] = iBands(NULL, 0, Length, Deviation, 0, PRICE_CLOSE, MODE_UPPER, l_shift_4);
      lda_16[l_shift_4] = iBands(NULL, 0, Length, Deviation, 0, PRICE_CLOSE, MODE_LOWER, l_shift_4);
      if (Close[l_shift_4] > lda_12[l_shift_4 + 1]) li_8 = 1;
      if (Close[l_shift_4] < lda_16[l_shift_4 + 1]) li_8 = -1;
      if (li_8 > 0 && lda_16[l_shift_4] < lda_16[l_shift_4 + 1]) lda_16[l_shift_4] = lda_16[l_shift_4 + 1];
      if (li_8 < 0 && lda_12[l_shift_4] > lda_12[l_shift_4 + 1]) lda_12[l_shift_4] = lda_12[l_shift_4 + 1];
      lda_20[l_shift_4] = lda_12[l_shift_4] + (MoneyRisk - 1.0) / 2.0 * (lda_12[l_shift_4] - lda_16[l_shift_4]);
      lda_24[l_shift_4] = lda_16[l_shift_4] - (MoneyRisk - 1.0) / 2.0 * (lda_12[l_shift_4] - lda_16[l_shift_4]);
      if (li_8 > 0 && lda_24[l_shift_4] < lda_24[l_shift_4 + 1]) lda_24[l_shift_4] = lda_24[l_shift_4 + 1];
      if (li_8 < 0 && lda_20[l_shift_4] > lda_20[l_shift_4 + 1]) lda_20[l_shift_4] = lda_20[l_shift_4 + 1];
      if (li_8 > 0) {
         if (Signal > 0 && g_ibuf_104[l_shift_4 + 1] == -1.0) {
            g_ibuf_112[l_shift_4] = lda_24[l_shift_4];
            g_ibuf_104[l_shift_4] = lda_24[l_shift_4];
            if (Line > 0) g_ibuf_120[l_shift_4] = lda_24[l_shift_4];
            if (SoundON == TRUE && l_shift_4 == 0 && !gi_132) {
               Alert("BBands going Up on ", Symbol(), "-", Period());
               gi_132 = TRUE;
               gi_136 = FALSE;
            }
         } else {
            g_ibuf_104[l_shift_4] = lda_24[l_shift_4];
            if (Line > 0) g_ibuf_120[l_shift_4] = lda_24[l_shift_4];
            g_ibuf_112[l_shift_4] = -1;
         }
         if (Signal == 2) g_ibuf_104[l_shift_4] = 0;
         g_ibuf_116[l_shift_4] = -1;
         g_ibuf_108[l_shift_4] = -1.0;
         g_ibuf_124[l_shift_4] = EMPTY_VALUE;
      }
      if (li_8 < 0) {
         if (Signal > 0 && g_ibuf_108[l_shift_4 + 1] == -1.0) {
            g_ibuf_116[l_shift_4] = lda_20[l_shift_4];
            g_ibuf_108[l_shift_4] = lda_20[l_shift_4];
            if (Line > 0) g_ibuf_124[l_shift_4] = lda_20[l_shift_4];
            if (SoundON == TRUE && l_shift_4 == 0 && !gi_136) {
               Alert("BBands going Down on ", Symbol(), "-", Period());
               gi_136 = TRUE;
               gi_132 = FALSE;
            }
         } else {
            g_ibuf_108[l_shift_4] = lda_20[l_shift_4];
            if (Line > 0) g_ibuf_124[l_shift_4] = lda_20[l_shift_4];
            g_ibuf_116[l_shift_4] = -1;
         }
         if (Signal == 2) g_ibuf_108[l_shift_4] = 0;
         g_ibuf_112[l_shift_4] = -1;
         g_ibuf_104[l_shift_4] = -1.0;
         g_ibuf_120[l_shift_4] = EMPTY_VALUE;
      }
   }
   return (0);
}

Comments