//+------------------------------------------------------------------+ //| 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 link "" #property version "1.00" #property strict //--- #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 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; } //--- SetIndexLabel(0,("TrendUp "+(string)cciPeriod)); SetIndexLabel(1,("TrendDown "+(string)cciPeriod)); for(i=limit-2; i>=0; i--) { //--- cciTrendNow=iCCI(NULL,0,cciPeriod,PRICE_TYPICAL,i)+70; cciTrendPrevious=iCCI(NULL,0,cciPeriod,PRICE_TYPICAL,i+1)+70; //--- if(cciTrendNow>st && cciTrendPreviousst) { TrendDown[i+1]=TrendUp[i+1]; } //--- if(cciTrendNow>0) { TrendUp[i]=Low[i]-Point*UpDownShift; TrendDown[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); } //+------------------------------------------------------------------+