SuperTrend

Here you can post and download custom indicators. PLEASE: Do not start topics unless you are posting your own indicator, they will be moved to appropriate section even if you do.

Moderator: admin

SuperTrend

Postby Apprentice » Wed Dec 12, 2012 2:01 pm

TS.png

CCI will trigger SuperTrend switch.
The user can specifies the distance from High / Low (in pips) after switch.
SuperTrend moves only in the direction of the trend.
If Price Filter is On.
And the price goes in the other direction, the Super Trend will hold its position.
Shift Values proposed by the author,
based on Chart Time Frame length in minutes.

case 1: Shift = 3;
case 5: Shift = 5;
case 15: Shift = 7;
case 30: Shift = 9;
case 60: Shift = 20;
case 240: Shift = 35;
case 1440: Shift = 40;
case 10080: Shift = 100;
case 43200: Shift = 120;

ST.lua
(3.8 KiB) Downloaded 2279 times
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 36258
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

Re: SuperTrend

Postby dtb71fx » Wed Dec 12, 2012 6:19 pm

I'm a little confused since there's so many "SuperTrend" indicators on this site... how is this one different from this SuperTrend:
http://fxcodebase.com/code/viewtopic.php?f=17&t=3102&hilit=supertrend

Is it fundamentally that this new one is based on CCI while the older was based on ATR? Or is there other crucial differences?
User avatar
dtb71fx
 
Posts: 9
Joined: Sat May 26, 2012 11:13 pm

Re: SuperTrend

Postby Apprentice » Thu Dec 13, 2012 3:55 am

This is an unfortunate coincidence.
Unfortunately I did not gave their names.
One thing is certain, their algorithms are completely different.
It his case, CCI is the trigger.
Line is higher / lower from High / Low, for X Pips set by user.

Your (the second) example.
The trend is determined, by Midian + / - ATR
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 36258
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

Re: SuperTrend

Postby elliotwave5 » Thu Dec 13, 2012 10:03 pm

is the st.lua file posted above in the response the same code as the following mt4 code that i seek a conversion for?

Code: Select all
#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);
  }
//+------------------------------------------------------------------+
elliotwave5
 
Posts: 13
Joined: Wed Aug 10, 2011 7:40 pm

Re: SuperTrend

Postby elliotwave5 » Sun Dec 16, 2012 6:36 am

Would it be possible to create an alert for the ST indicator - ie audio, visual, email alert when colour changes?
elliotwave5
 
Posts: 13
Joined: Wed Aug 10, 2011 7:40 pm

Re: SuperTrend

Postby Apprentice » Mon Dec 17, 2012 3:40 am

Your request is added to the development list.
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 36258
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

Re: SuperTrend

Postby elliotwave5 » Mon Dec 17, 2012 8:22 am

thank you
elliotwave5
 
Posts: 13
Joined: Wed Aug 10, 2011 7:40 pm



Re: SuperTrend

Postby Apprentice » Mon Aug 28, 2017 3:42 am

The indicator was revised and updated.
User avatar
Apprentice
FXCodeBase: Confirmed User
 
Posts: 36258
Joined: Thu Dec 31, 2009 11:59 am
Location: Zagreb, Croatia

Next

Return to Custom Indicators

Who is online

Users browsing this forum: No registered users and 12 guests