ExTrend





//+------------------------------------------------------------------+
//|                                                      ExTrend.mq4 |
//|                           Copyright © 2006, Alex Sidd (Executer) |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Alex Sidd (Executer)"
#property link      "mailto:work_st@mail.ru"
//----
#property indicator_separate_window
#property indicator_minimum -0.5
#property indicator_maximum 0.5
#property indicator_buffers 2
#property  indicator_color1  Green
#property  indicator_color2  Red
//----
double TrBufferUp[];
double TrBufferDn[];
//----
double FractUp1 = 0;
double FractUp2 = 0;
double FractDn1 = 0;
double FractDn2 = 0;
datetime FTimeUp1, FTimeUp2, FTimeDn1, FTimeDn2, curTime;
//+------------------------------------------------------------------+
//| ExTrend initialization function                                  |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
   IndicatorBuffers(2);
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, TrBufferUp);
   SetIndexDrawBegin(0, 1);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(1, TrBufferDn);
   SetIndexDrawBegin(1, 1);
   short_name = "ExTrend";
   IndicatorShortName(short_name);
   SetIndexLabel(0, "Up_Line");
   SetIndexLabel(1, "Down_Line");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| deinitialization function                                        |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("FractalLineUp");
   ObjectDelete("FractalLineDn");    
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Level Calculate Function                                         |
//| ôóíêöèÿ âçÿòà èç FractalLines Indicator                          |
//+------------------------------------------------------------------+
double LevelCalculate(double Price1, double Time1, double Price2, 
                      double Time2, double NewTime)
  {
   double level;
   if(Time2 != Time1) // Íà âñÿêèé ñëó÷àé, ÷òîáû íå áûëî äåëåíèÿ íà 0.
       level = (NewTime - Time1)*(Price2 - Price1) / (Time2-Time1) + Price1;
   else
       return(Price2);
   return(level);
  }
//+------------------------------------------------------------------+
//| Executer Trend Indicator                                         |
//+------------------------------------------------------------------+
int start()
  {
   int i, counted_bars = IndicatorCounted();
   i = Bars - 1;
   double Fup, Fdn, positive, negative;
   while(i >= 0)
     {
       negative = 0;
       positive = 0;
       Fup = iFractals(NULL, 0, MODE_UPPER, i + 3);
       Fdn = iFractals(NULL, 0, MODE_LOWER, i + 3);
       if(Fup > 0) 
         {
           if(FractUp1 == 0 && FractUp2 == 0) 
             {
               FractUp1 = Fup; 
               FTimeUp1 = Time[i+3];
             }
           if(FractUp1 != 0&&FractUp2 == 0 && FTimeUp1 != Time[i+3]) 
             {
               FractUp2 = Fup; 
               FTimeUp2 = Time[i+3];
             }
           if(FractUp1 != 0 && FractUp2 != 0 && FTimeUp2 != Time[i+3])
             {
               FractUp1 = FractUp2;
               FTimeUp1 = FTimeUp2;
               FractUp2 = Fup;
               FTimeUp2 = Time[i+3];
             } 
         }
       if(Fdn > 0) 
         {
           if(FractDn1 == 0 && FractDn2 == 0) 
             {
               FractDn1 = Fdn; 
               FTimeDn1 = Time[i+3];
             }
           if(FractDn1 != 0 && FractDn2 == 0 && FTimeDn1 != Time[i+3]) 
             {
               FractDn2 = Fdn; 
               FTimeDn2 = Time[i+3];
             }
           if(FractDn1 != 0 && FractDn2 != 0 && FTimeDn2 != Time[i+3])
             {
               FractDn1 = FractDn2;
               FTimeDn1 = FTimeDn2;
               FractDn2 = Fdn;
               FTimeDn2 = Time[i+3];
             } 
         }
       if(FractUp1 != 0 && FractUp2 != 0)
         {
           double lvlup = LevelCalculate(FractUp1, FTimeUp1, FractUp2, FTimeUp2, Time[i]);
           ObjectCreate("FractalLineUp", OBJ_TREND, 0,FTimeUp1, FractUp1, FTimeUp2, FractUp2);
           ObjectSet("FractalLineUp", OBJPROP_TIME1, FTimeUp1);
           ObjectSet("FractalLineUp", OBJPROP_PRICE1, FractUp1);
           ObjectSet("FractalLineUp", OBJPROP_TIME2, FTimeUp2);
           ObjectSet("FractalLineUp", OBJPROP_PRICE2, FractUp2);
           double y = (FTimeUp2 - FTimeUp1) / (240*60);
           double x = (FractUp2 - FractUp1)*(240);
           // if(x==0) x=1;
           positive = MathArctan(x / y);  //*180/3.14; //)
         }
       if(FractDn1 != 0 && FractDn2 != 0)
         {
           double lvldn = LevelCalculate(FractDn1, FTimeDn1, FractDn2, FTimeDn2, Time[i]);
           ObjectCreate("FractalLineDn", OBJ_TREND, 0, FTimeDn1, FractDn1, FTimeDn2, FractDn2);
           ObjectSet("FractalLineDn", OBJPROP_TIME1, FTimeDn1);
           ObjectSet("FractalLineDn", OBJPROP_PRICE1, FractDn1);
           ObjectSet("FractalLineDn", OBJPROP_TIME2, FTimeDn2);
           ObjectSet("FractalLineDn", OBJPROP_PRICE2, FractDn2);
           double a = (FTimeDn2 - FTimeDn1) / (240*60);
           double b = (FractDn2 - FractDn1)*(240);
           // if(b==0) b=1;
           negative = MathArctan(b / a);  //*180/3.14;
         }
       TrBufferUp[i+3] = positive;  //+negative;
       TrBufferDn[i+3] = negative;      
       i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Fractals


Custom Indicators Used:

Order Management characteristics:

Other Features: