Super_Trend_v1

Download script
Author: Copyright � 2005, Jason Robinson (jnrtrading).
Super_Trend_v1

This script is a technical analysis tool designed to help traders identify the primary direction of the market—specifically, whether the current trend is moving upward or downward. It simplifies complex price action into clear visual signals on your trading chart.

Core Logic and Functionality

The tool operates by analyzing price momentum and volatility to draw dynamic lines that act as "trend boundaries." Here is a breakdown of how it processes information:

1. Adaptive Timeframe Intelligence The script is designed to be smart about the timeframe you are viewing. It features an "Automatic Timeframe" logic that adjusts its internal calculations based on whether you are looking at a 1-minute chart, a daily chart, or a monthly chart. This ensures that the sensitivity of the trend detection remains consistent and relevant regardless of your preferred viewing style.

2. Momentum Identification The tool utilizes a specific momentum indicator to "read" the strength of the market. It looks for "crossovers"—moments where the momentum shifts from one side of a threshold to another. When this shift is detected, the script identifies a potential change in trend direction (e.g., switching from an upward bias to a downward bias).

3. Dynamic Boundary Positioning Once a trend is established, the script calculates the position of the trend line based on several factors:

  • Price Extremes: It monitors the highs and lows of the candles to ensure the line stays consistent with actual market movement.
  • Buffer Zones: To prevent the lines from being too "noisy" or flickering constantly with every minor price tick, it applies a specific offset (a buffer). This distance is automatically adjusted based on your timeframe; for example, the gap between the line and the price will be larger on long-term charts (like Weekly) than on short-term charts (like 5-minute), providing a smoother visual experience.

4. Trend Continuity Filtering The logic includes "persistence checks." Instead of allowing the trend line to jump erratically, the script compares the current candle's behavior against the previous one. It checks if the price is closing in favor of the trend or if it is breaking out of previous boundaries. If the price action suggests a continuation of the current movement, the line holds its position; if the momentum fails to hold, the line adjusts accordingly.

Summary of Visual Output

  • Upward Trend: Represented by a green line that tracks below the price, acting as a floor or support level during bullish movements.
  • Downward Trend: Represented by a red line that tracks above the price, acting as a ceiling or resistance level during bearish movements.
Indicators Used
Commodity channel index
Miscellaneous
Implements a curve of type %1
15 Views
0 Downloads
0 Favorites
Super_Trend_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                   Supertrend.mq4 |
//|                   Copyright © 2005, Jason Robinson (jnrtrading). |
//|                                      http://www.jnrtrading.co.uk |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Jason Robinson (jnrtrading)."
#property link      "http://www.jnrtrading.co.uk"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 MediumSpringGreen
#property indicator_color2 Red

double TrendUp[];
double TrendDown[];
double NonTrend[];

int st = 0;

int UpDownShift;

extern int TrendCCI_Period = 14;
extern bool Automatic_Timeframe_setting;
extern int M1_CCI_Period = 14;
extern int M5_CCI_Period = 14;
extern int M15_CCI_Period = 14;
extern int M30_CCI_Period = 14;
extern int H1_CCI_Period = 14;
extern int H4_CCI_Period = 14;
extern int D1_CCI_Period = 14;
extern int W1_CCI_Period = 14; 
extern int MN_CCI_Period = 14;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

   SetIndexStyle(0, DRAW_LINE, 0, 2);
   SetIndexBuffer(0, TrendUp);
   SetIndexStyle(1, DRAW_LINE, 0, 2);
   SetIndexBuffer(1, TrendDown);
      
   switch(Period()) {
      case 1:     UpDownShift = 3; break;
      case 5:     UpDownShift = 5; break;
      case 15:    UpDownShift = 7; break;
      case 30:    UpDownShift = 9; break;
      case 60:    UpDownShift = 20; break;
      case 240:   UpDownShift = 35; break;
      case 1440:  UpDownShift = 40; break;
      case 10080: UpDownShift = 100; break;
      case 43200: UpDownShift = 120; break;
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit, i, cciPeriod;
   double cciTrendNow14, cciTrendPrevious14, cciTrendNow, cciTrendPrevious;

   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) counted_bars--;

   limit=Bars-counted_bars;
   
   if (Automatic_Timeframe_setting == true) {
      switch(Period()) {
         case 1:     cciPeriod = M1_CCI_Period; break;
         case 5:     cciPeriod = M5_CCI_Period; break;
         case 15:    cciPeriod = M15_CCI_Period; break;
         case 30:    cciPeriod = M30_CCI_Period; break;
         case 60:    cciPeriod = H1_CCI_Period; break;
         case 240:   cciPeriod = H4_CCI_Period; break;
         case 1440:  cciPeriod = D1_CCI_Period; break;
         case 10080: cciPeriod = W1_CCI_Period; break;
         case 43200: cciPeriod = MN_CCI_Period; break;
      }
   }
   else {   
      cciPeriod = TrendCCI_Period;
   }
   /*switch(cciPeriod) {
      case 14:  break;
   }*/
   //cciPeriod = TrendCCI_Period;
   SetIndexLabel(0, ("TrendUp " + cciPeriod));
   SetIndexLabel(1, ("TrendDown " + cciPeriod));
   for(i = limit; i >= 0; i--) {
   
      cciTrendNow = iCCI(NULL, 0, cciPeriod, PRICE_TYPICAL, i) + 70;
      cciTrendPrevious = iCCI(NULL, 0, cciPeriod, PRICE_TYPICAL, i+1) + 70;
      //cciTrendNow50 = iCCI(NULL, 0, 50, PRICE_TYPICAL, i) + 70;
      //cciTrendPrevious50 = iCCI(NULL, 0, 50, PRICE_TYPICAL, i+1) + 70;
      
      if (cciTrendNow > st && cciTrendPrevious < st) {
         TrendUp[i+1] = TrendDown[i+1];
         //TrendDown[i] = EMPTY_VALUE;
      }
      
      if (cciTrendNow < st && cciTrendPrevious > st) {
         TrendDown[i+1] = TrendUp[i+1];
         //TrendUp[i] = EMPTY_VALUE;
      }
      
      if (cciTrendNow > 0) {
         TrendUp[i] = Low[i] - Point*UpDownShift;
         TrendDown[i] = EMPTY_VALUE;
         if (Close[i] < Open[i] && TrendDown[i+1] != TrendUp[i+1]) {
            TrendUp[i] = TrendUp[i+1];
         }        
         if (TrendUp[i] < TrendUp[i+1] && TrendDown[i+1] != TrendUp[i+1]) {
            TrendUp[i] = TrendUp[i+1];
         }
         if (High[i] < High[i+1] && TrendDown[i+1] != TrendUp[i+1]) {
            TrendUp[i] = TrendUp[i+1];
         }
      }
      else if (cciTrendNow < 0) {
         TrendDown[i] = High[i] + Point*UpDownShift;
         TrendUp[i] = EMPTY_VALUE;
         if (Close[i] > Open[i] && TrendDown[i+1] != TrendUp[i+1]) {
            TrendDown[i] = TrendDown[i+1];
         }
         if (TrendDown[i] > TrendDown[i+1] && TrendDown[i+1] != TrendUp[i+1]) {
            TrendDown[i] = TrendDown[i+1];
         }
         if (Low[i] > Low[i+1] && TrendUp[i+1] != TrendDown[i+1]) {
            TrendDown[i] = TrendDown[i+1];
         }
      }
   }
         
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments