//+------------------------------------------------------------------+
//|                                                PriceTrender2.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Gold
#property indicator_color3 Lime
extern int TimeFrame = 60,
           Price = 0,
           Ma1Type = 0,
           Ma1Price = 0,
           Ma1Length = 24,
           Ma2Type = 0,
           Ma2Price = 0,
           Ma2Length = 5;
extern string note12 = "--------------------------------------------";
extern string note13 = "turn on Alert = true; turn off = false";
extern bool AlertOn = true;
           
double price[],trend[],trend2[];
string AlertPrefix; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
SetIndexBuffer(0,price);
SetIndexBuffer(1,trend);
SetIndexBuffer(2,trend2);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
SetIndexLabel(0,"Price");
SetIndexLabel(1,"MA 1");
SetIndexLabel(2,"MA 2");
   AlertPrefix=Symbol()+" ("+GetTimeFrameStr()+"):  ";
    
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
string GetTimeFrameStr() {
   switch(Period())
   {
      case 1 : string TimeFrameStr="M1"; break;
      case 5 : TimeFrameStr="M5"; break;
      case 15 : TimeFrameStr="M15"; break;
      case 30 : TimeFrameStr="M30"; break;
      case 60 : TimeFrameStr="H1"; break;
      case 240 : TimeFrameStr="H4"; break;
      case 1440 : TimeFrameStr="D1"; break;
      case 10080 : TimeFrameStr="W1"; break;
      case 43200 : TimeFrameStr="MN1"; break;
      default : TimeFrameStr=Period();
   } 
   return (TimeFrameStr);
   }
//+------------------------------------------------------------------+
bool NewBar()
{
   static datetime lastbar;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}   
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    limit, bigshift; 
   int    counted_bars=IndicatorCounted(); 
//---- 
   if (counted_bars<0) return(-1); 
   if (counted_bars>0) counted_bars--; 
   limit=Bars-counted_bars; 
    
   for (int i=limit; i>=0; i--) 
   { 
      bigshift = iBarShift(Symbol(),TimeFrame,Time[i]); 
      
      price[i] = getPrice(bigshift);
      trend[i] = iMA(Symbol(),TimeFrame,Ma1Length,0,Ma1Type,Ma1Price,bigshift);
      trend2[i] = iMA(Symbol(),TimeFrame,Ma2Length,0,Ma2Type,Ma2Price,bigshift);
      if ((trend[i] > price[i]) && (trend[i+1] < price[i+1]))
      {
           if (NewBar())
         {
             if (AlertOn) Alert(AlertPrefix + " MA1 " + "crosses UP price");
  	      }
      }
      if ((trend[i] < price[i]) && (trend[i+1] > price[i+1]))
      {
         if (NewBar())
         {
             if (AlertOn) Alert(AlertPrefix+ " MA1 " + "crosses DOWN price");
  	      }
     }
      if ((trend2[i] > price[i]) && (trend2[i+1] < price[i+1]))
      {
           if (NewBar())
         {
             if (AlertOn) Alert(AlertPrefix + " MA2 " + "crosses UP price");
  	      }
      }
      if ((trend2[i] < price[i]) && (trend2[i+1] > price[i+1]))
      {
         if (NewBar())
         {
             if (AlertOn) Alert(AlertPrefix+ " MA2 " + "crosses DOWN price");
  	      }
     }
   } 
//----
 
   return(0);
  }
//+------------------------------------------------------------------+
double getPrice(int shift)
{
   switch(Price)
   {
      case 0 : return ( iClose(Symbol(),TimeFrame,shift) );
      case 1 : return (iOpen(Symbol(),TimeFrame,shift));
      case 2 : return (iHigh(Symbol(),TimeFrame,shift));
      case 3 : return (iLow(Symbol(),TimeFrame,shift));
      case 4 : return ((iLow(Symbol(),TimeFrame,shift)+iHigh(Symbol(),TimeFrame,shift))/2);
      case 5 : return ((iClose(Symbol(),TimeFrame,shift)+iLow(Symbol(),TimeFrame,shift)+iHigh(Symbol(),TimeFrame,shift))/3);
      case 6 : return ((iOpen(Symbol(),TimeFrame,shift)+iClose(Symbol(),TimeFrame,shift)+iLow(Symbol(),TimeFrame,shift)+iHigh(Symbol(),TimeFrame,shift))/4);
   }
}
             
            
            
            
Comments