TREND_alexcud_Sig_En





//+------------------------------------------------------------------+
//| based on:                                                        |
//| Èíäèêàòîð íà îñíîâå èíäèêàòîðà âçÿòîãî îòñþäà                    |
//| http://codebase.mql4.com/ru/1729                                 |
//| TREND_alexcud v_2. mq4                                           |
//| Copyright © 2007, Aleksander Kudimov                             |
//| alexcud@rambler.ru                                               |
//| plots arrows in chart window                                     |
//| Ðèñóåò ñòðåëêè â îñíîâíîì îêíå                                   |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Sergej Solujanov"
#property link "irasol@bk.ru"

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

#property indicator_width1 2
#property indicator_width2 2



//  Äëÿ TF1 - TF3 äîïóñòèìî  óñòàíîâèòü
//  ñëåäóþùèå çíà÷åíèÿ:  TF1-3 folowing values:
//     1   1 ìèíóòà min
//     5   5 ìèíóò
//    15   15 ìèíóò
//    30   30 ìèíóò
//    60    1 ÷àñ   hour
//   240    4 ÷àñà
//  1440    1 äåíü   day 
// 10080    1 íåäåëÿ  week 
// 43200    1 ìåñÿö    mnth
//
extern int TF1 = 15;
extern int TF2 = 60;
extern int TF3 = 240;
extern int maTrendPeriodv_1 = 5;
extern int maTrendPeriodv_2 = 8;
extern int maTrendPeriodv_3 = 13;
extern int maTrendPeriodv_4 = 21;
extern int maTrendPeriodv_5 = 34;
extern int CountBars = 2000;   // max bars to count Êîëè÷åñòâî áàðîâ äëÿ ïðîðèñîâêè ñòðåëîê
extern bool showComment  = true;
double  UPBuffer[];
double  DOWNBuffer[];
int     Shift;
int     TFperiod[], MAperiod[];
int     ResUP[], ResDown[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+

int init()
 {
 IndicatorShortName("asd");
 SetIndexStyle(0, DRAW_ARROW);
 SetIndexArrow(0, 228);        // arrow buy ñòðåëêà äëÿ áàé
 SetIndexStyle(1, DRAW_ARROW);
 SetIndexArrow(1, 230);        //  arrow sell ñòðåëêà äëÿ ñåëë 
 SetIndexBuffer(0,UPBuffer);
 SetIndexBuffer(1,DOWNBuffer);
 SetIndexDrawBegin(0, Bars - CountBars);
 SetIndexDrawBegin(1, Bars - CountBars);

 ArrayResize (TFperiod,3);
 ArrayResize (MAperiod,5);
 ArrayResize (ResUP,3);
 ArrayResize (ResDown,3);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
   int    i, i00; 
   int    limit,shift,shi1;                  
datetime  Tbar;
   int    counted_bars = IndicatorCounted(); 
   int    iTF, iPer; 
   int    UP, Down; 
   int    uptrend, old;
   double MaSUR, MaPrev;
string    gotrend;

   if(Bars <= CountBars + 1) return(0);
   
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars-1;
   if (limit>CountBars) limit=CountBars;
   
   TFperiod[0] = TF1; TFperiod[1] = TF2; TFperiod[2]=TF3;
   MAperiod[0]=maTrendPeriodv_1; MAperiod[1]=maTrendPeriodv_2;
   MAperiod[2]=maTrendPeriodv_3; MAperiod[3]=maTrendPeriodv_4;
   MAperiod[4]=maTrendPeriodv_5;
   UPBuffer[CountBars-1] = Close[CountBars-1];
   uptrend = 1; 
   
for(shift = limit; shift >= 0; shift--) 
  {
  UP=0; Down=0;
  for(iTF=0; iTF<=2; iTF++)
      {
       UP=0; Down=0;

       for(iPer=0; iPer<=4; iPer++)
         {
         Tbar= iTime(NULL,0,shift);
         shi1=iBarShift(NULL,TFperiod[iTF],Tbar,false);
         MaSUR=iMA(NULL,TFperiod[iTF],MAperiod[iPer],0,MODE_SMA,PRICE_CLOSE, shi1);
         MaPrev=iMA(NULL,TFperiod[iTF],MAperiod[iPer],0,MODE_SMA,PRICE_CLOSE,shi1+1);
         if (MaSUR>MaPrev) UP++;
         if (MaSUR<MaPrev) Down++;
         }
       double ac0v = iAC(NULL, TFperiod[iTF], 0);
       double ac1v = iAC(NULL, TFperiod[iTF], 1);
       double ac2v = iAC(NULL, TFperiod[iTF], 2);
       double ac3v = iAC(NULL, TFperiod[iTF], 3);
       if ((ac1v>ac2v && ac2v>ac3v && ac0v<0 && ac0v>ac1v)
                      || (ac0v>ac1v && ac1v>ac2v && ac0v>0)) UP=UP+3;
       if ((ac1v<ac2v && ac2v<ac3v && ac0v>0 && ac0v<ac1v)
                      || (ac0v<ac1v && ac1v<ac2v && ac0v<0)) Down=Down+3;
       ResUP[iTF]=UP;
       ResDown[iTF]=Down;
     }
//   
   if(shift <= 1) 
       {
       for (i = 1; i <= CountBars; i++)
          if ((DOWNBuffer[i] != EMPTY_VALUE) || (UPBuffer[i] != EMPTY_VALUE))
             if (DOWNBuffer[i] != EMPTY_VALUE) 
                 {old = -1; i00=i;  uptrend = -1; break;}
             else 
                 {old = 1; i00= i; uptrend = 1; break;}
//       
       } 
   i=4;
   if (ResUP[0] > i && ResUP[1] > i && ResUP[2] > i) uptrend = 1;
   if (ResDown[0] > i && ResDown[1] > i && ResDown[2] > i) uptrend = -1;

   UPBuffer[shift] = EMPTY_VALUE;     // buffer 4 buy  áóôåð äëÿ áàé   ;
   DOWNBuffer[shift] = EMPTY_VALUE;   // buff 4 sell áóôåð äëÿ ñåëë

   if(old == -1 && uptrend == 1)
      {
        if (shift != 0) 
             {
              UPBuffer[shift+1] = High[shift];
              old=uptrend;
              }
             else 
              UPBuffer[shift+1] = Bid;
       }
//----
   if(old == 1 && uptrend == -1)
      {
        if (shift != 0) 
             {
              DOWNBuffer[shift+1] = Low[shift];
              old=uptrend;
              }
             else 
              DOWNBuffer[shift+1] = Ask;
       }
   if (shift != 0) old=uptrend; 
   if (uptrend == 1) gotrend = "UP";
        else gotrend = "DOWN";    

 if (showComment)
   {
   Comment("Trend ",gotrend," ",i00," bars", "\nResUp    ",
           ResUP[0]*12.5,"   ",ResUP[1]*12.5,"   ",ResUP[2]*12.5,
           "\nResDn    ",ResDown[0]*12.5,"   ",ResDown[1]*12.5,"   ",ResDown[2]*12.5);
    }

 }  
return;
}





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:

Moving average indicator
Bill Williams Accelerator/Decelerator oscillator


Custom Indicators Used:

Order Management characteristics:

Other Features: