//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2

extern int    Timeframe1         = PERIOD_M1;   //first MA timeframe
extern int    Timeframe2         = PERIOD_M5;   //second MA timeframe
extern int    Timeframe3         = PERIOD_M15;  //third MA timeframe
extern int    Timeframe4         = PERIOD_H1;   //fourth MA timeframe
extern string note1              = "Trend streng Mode: 0=MA slope, 1=MA Cross, 2=both";
extern int    Calculation_Mode   = 0;
extern string note2              = "MA slope settings";
extern int    Ma_length          = 100;         
extern int    Ma_Method          = MODE_LWMA;   
extern int    Ma_Price           = PRICE_CLOSE;
extern int    Ma_lookback_tf1    = 15;
extern int    Ma_lookback_tf2    = 12; 
extern int    Ma_lookback_tf3    = 12; 
extern int    Ma_lookback_tf4    = 6;
extern int    Strong_Trend_Value_tf1 = 30;
extern int    Strong_Trend_Value_tf2 = 60;  
extern int    Strong_Trend_Value_tf3 = 140;  
extern int    Strong_Trend_Value_tf4 = 300;              
extern string note3              = "MA cross settings";
extern int    FastMa             = 35;          //fast MA Priod
extern int    FastMaShift        = 0;           //fast MA Shift
extern int    FastMAMethod       = MODE_LWMA;   //fast MA Mode
extern int    FastMAPrice        = PRICE_CLOSE; //fast MA Price
extern int    SlowMa             = 100;         //slow Ma Period
extern int    SlowMaShift        = 0;           //slow MA Shift
extern int    SlowMAMethod       = MODE_LWMA;   //slow MA Mode
extern int    SlowMAPrice        = PRICE_CLOSE; //slow MA Price
extern string note4              = "Color_Settings";
extern color  StrongUp           = Lime;
extern color  StrongDn           = Red;
extern color  WeakUp             = Green;
extern color  WeakDn             = FireBrick; 
extern color  NewTrend           = Yellow;
extern string note5              = "Arrow_Settings";
extern bool   ShowArrows         = false;
extern int    ArrowSize          = 2;
extern string note6              ="Arrow_Mode";
extern string note7              ="0=All Trends/first weaker CCi; 1=strong Trends/first weaker CCi";
extern string note8              ="2=All Trends/CCi Value; 3=strong Trends/CCi Value";
extern int    Arrow_Mode         = 0;
extern int    CCiPeriod          = 14;
extern int    Ma_lookback_for_Strong_Trend       = 15;
extern int    Strong_Trend_Value = 30;
extern int    plus_CCi_value_reach = 100;
extern int    minus_CCi_value_reach= -100;
extern int    plus_CCi_value_return  = 100;
extern int    minus_CCi_value_return = -100; 
extern int    TextOffSetFromRight= 2;           //x Position
extern int    TextOffSetFromTop  = 15;//100;    //y Position
extern int    DisplayCorner      = 1;            //corner
/*extern string arrowsIdentifier = "ac Arrows1";
extern double arrowsUpperGap   = 1.0;
extern double arrowsLowerGap   = 1.0;
extern color  arrowsUpColor    = LimeGreen;
extern color  arrowsDnColor    = Red;
extern int    arrowsUpCode     = 233;
extern int    arrowsDnCode     = 234;*/

extern string note9            = "turn on Alert = true; turn off = false";
extern bool   alertsOn         = false;
extern bool   alertsOnCurrent  = true;
extern bool   alertsMessage    = true;
extern bool   alertsSound      = true;
extern bool   alertsEmail      = false;
extern string soundfile        = "alert2.wav";

//
//

double CrossUp[];
double CrossDn[];
double trend[];
string TimeFrame1;
string TimeFrame2;
string TimeFrame3;
string TimeFrame4;
double smadifftf, smadiffpercenttf;
double smadifftf1, smadiffpercenttf1, smadifftf2, smadiffpercenttf2;
double smadifftf3, smadiffpercenttf3, smadifftf4, smadiffpercenttf4;
double DnBuffer[];
double UpBuffer[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{  IndicatorBuffers(5); 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0); SetIndexArrow(0, 233);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0); SetIndexArrow(1, 234);
   SetIndexBuffer(2, trend);
   SetIndexBuffer(3, UpBuffer);
   SetIndexBuffer(4, DnBuffer);
   return(0);
}
int deinit() {
                   ObjectDelete("zeroline");
                   ObjectDelete("time1");
                   ObjectDelete("time2");
                   ObjectDelete("time3");
                   ObjectDelete("time4");
                   ObjectDelete("time1_value");
                   ObjectDelete("time2_value");
                   ObjectDelete("time3_value");
                   ObjectDelete("time4_value");
                   ObjectDelete("time1_value2");
                   ObjectDelete("time2_value2");
                   ObjectDelete("time3_value2");
                   ObjectDelete("time4_value2");
                  // deleteArrows();
  return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() {
  
  
  
  
  
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         
   //
   //
   if (Timeframe1==PERIOD_M1) TimeFrame1="M1"; else if (Timeframe1==PERIOD_M5) TimeFrame1="M5"; else if (Timeframe1==PERIOD_M15) TimeFrame1="M15"; else if (Timeframe1==PERIOD_M30) TimeFrame1="M30"; else if (Timeframe1==PERIOD_H1) TimeFrame1="H1"; else if (Timeframe1==PERIOD_H4) TimeFrame1="H4"; else if (Timeframe1==PERIOD_D1) TimeFrame1="D1"; else if (Timeframe1==PERIOD_W1) TimeFrame1="W1"; else if (Timeframe1==PERIOD_MN1) TimeFrame1="MN";
   if (Timeframe2==PERIOD_M1) TimeFrame2="M1"; else if (Timeframe2==PERIOD_M5) TimeFrame2="M5"; else if (Timeframe2==PERIOD_M15) TimeFrame2="M15"; else if (Timeframe2==PERIOD_M30) TimeFrame2="M30"; else if (Timeframe2==PERIOD_H1) TimeFrame2="H1"; else if (Timeframe2==PERIOD_H4) TimeFrame2="H4"; else if (Timeframe2==PERIOD_D1) TimeFrame2="D1"; else if (Timeframe2==PERIOD_W1) TimeFrame2="W1"; else if (Timeframe2==PERIOD_MN1) TimeFrame2="MN";
   if (Timeframe3==PERIOD_M1) TimeFrame3="M1"; else if (Timeframe3==PERIOD_M5) TimeFrame3="M5"; else if (Timeframe3==PERIOD_M15) TimeFrame3="M15"; else if (Timeframe3==PERIOD_M30) TimeFrame3="M30"; else if (Timeframe3==PERIOD_H1) TimeFrame3="H1"; else if (Timeframe3==PERIOD_H4) TimeFrame3="H4"; else if (Timeframe3==PERIOD_D1) TimeFrame3="D1"; else if (Timeframe3==PERIOD_W1) TimeFrame3="W1"; else if (Timeframe3==PERIOD_MN1) TimeFrame3="MN";
   if (Timeframe4==PERIOD_M1) TimeFrame4="M1"; else if (Timeframe4==PERIOD_M5) TimeFrame4="M5"; else if (Timeframe4==PERIOD_M15) TimeFrame4="M15"; else if (Timeframe4==PERIOD_M30) TimeFrame4="M30"; else if (Timeframe4==PERIOD_H1) TimeFrame4="H1"; else if (Timeframe4==PERIOD_H4) TimeFrame4="H4"; else if (Timeframe4==PERIOD_D1) TimeFrame4="D1"; else if (Timeframe4==PERIOD_W1) TimeFrame4="W1"; else if (Timeframe4==PERIOD_MN1) TimeFrame4="MN";
   
   //
//--------------------------
     
                     ObjectCreate("zeroline", OBJ_LABEL, 0, 0, 0);
         ObjectSet("zeroline", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("zeroline", OBJPROP_YDISTANCE, TextOffSetFromTop);
         ObjectSet("zeroline", OBJPROP_XDISTANCE, TextOffSetFromRight);  
         ObjectSetText("zeroline","---------------------",8,"Arial",SkyBlue);     
                  ObjectCreate("time1", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time1", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time1", OBJPROP_YDISTANCE, TextOffSetFromTop+10);
         ObjectSet("time1", OBJPROP_XDISTANCE, TextOffSetFromRight+60);  
         ObjectSetText("time1",TimeFrame1,8,"Arial",SkyBlue);
                  ObjectCreate("time2", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time2", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time2", OBJPROP_YDISTANCE, TextOffSetFromTop+30);
         ObjectSet("time2", OBJPROP_XDISTANCE, TextOffSetFromRight+60);  
         ObjectSetText("time2",TimeFrame2,8,"Arial",SkyBlue);
                  ObjectCreate("time3", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time3", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time3", OBJPROP_YDISTANCE, TextOffSetFromTop+50);
         ObjectSet("time3", OBJPROP_XDISTANCE, TextOffSetFromRight+60);  
         ObjectSetText("time3",TimeFrame3,8,"Arial",SkyBlue);
                  ObjectCreate("time4", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time4", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time4", OBJPROP_YDISTANCE, TextOffSetFromTop+70);
         ObjectSet("time4", OBJPROP_XDISTANCE, TextOffSetFromRight+60);  
         ObjectSetText("time4",TimeFrame4,8,"Arial",SkyBlue);
         
         //------------------------
         
         if (Calculation_Mode ==0 || Calculation_Mode ==2)
         {                   
         ObjectCreate("time1_value", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time1_value", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time1_value", OBJPROP_YDISTANCE, TextOffSetFromTop+10);
         ObjectSet("time1_value", OBJPROP_XDISTANCE, TextOffSetFromRight); 
         
         ObjectCreate("time2_value", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time2_value", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time2_value", OBJPROP_YDISTANCE, TextOffSetFromTop+30);
         ObjectSet("time2_value", OBJPROP_XDISTANCE, TextOffSetFromRight); 

         ObjectCreate("time3_value", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time3_value", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time3_value", OBJPROP_YDISTANCE, TextOffSetFromTop+50);
         ObjectSet("time3_value", OBJPROP_XDISTANCE, TextOffSetFromRight); 
                
         ObjectCreate("time4_value", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time4_value", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time4_value", OBJPROP_YDISTANCE, TextOffSetFromTop+70);
         ObjectSet("time4_value", OBJPROP_XDISTANCE, TextOffSetFromRight);
         }
         //------------------------
         if (Calculation_Mode ==1 || Calculation_Mode ==2)
         {
                  ObjectCreate("time1_value2", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time1_value2", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time1_value2", OBJPROP_YDISTANCE, TextOffSetFromTop+10);
         ObjectSet("time1_value2", OBJPROP_XDISTANCE, TextOffSetFromRight+30); 
         
         ObjectCreate("time2_value2", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time2_value2", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time2_value2", OBJPROP_YDISTANCE, TextOffSetFromTop+30);
         ObjectSet("time2_value2", OBJPROP_XDISTANCE, TextOffSetFromRight+30); 

         ObjectCreate("time3_value2", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time3_value2", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time3_value2", OBJPROP_YDISTANCE, TextOffSetFromTop+50);
         ObjectSet("time3_value2", OBJPROP_XDISTANCE, TextOffSetFromRight+30); 
                
         ObjectCreate("time4_value2", OBJ_LABEL, 0, 0, 0);
         ObjectSet("time4_value2", OBJPROP_CORNER, DisplayCorner);
         ObjectSet("time4_value2", OBJPROP_YDISTANCE, TextOffSetFromTop+70);
         ObjectSet("time4_value2", OBJPROP_XDISTANCE, TextOffSetFromRight+30); 
         }  
//------------------------------  


      double P1fastMA = iMA(NULL,Timeframe1,FastMa,FastMaShift,FastMAMethod,FastMAPrice,0);
      double P1slowMA = iMA(NULL,Timeframe1,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,0);
      double currsma1 = iMA(NULL,Timeframe1,Ma_length,0,Ma_Method,Ma_Price,1);
      double prevsma1 = iMA(NULL,Timeframe1,Ma_length,0,Ma_Method,Ma_Price,Ma_lookback_tf1);
      double P1cci =iCCI(NULL,Timeframe1,CCiPeriod,PRICE_TYPICAL,0);
      double P1cci1 =iCCI(NULL,Timeframe1,CCiPeriod,PRICE_TYPICAL,1);
      double P1cci2 =iCCI(NULL,Timeframe1,CCiPeriod,PRICE_TYPICAL,2);
        
         if (Calculation_Mode ==1 || Calculation_Mode ==2)
         {
         if (iClose(NULL,Timeframe1,0)>=P1fastMA && iClose(NULL,Timeframe1,0)>=P1slowMA && P1fastMA>=P1slowMA) ObjectSetText("time1_value2",CharToStr(233),11,"Wingdings",StrongUp);
         if (iClose(NULL,Timeframe1,0)< P1fastMA && iClose(NULL,Timeframe1,0)> P1slowMA && P1fastMA> P1slowMA) ObjectSetText("time1_value2",CharToStr(238),11,"Wingdings",WeakUp);  
         //
         if (iClose(NULL,Timeframe1,0)<=P1fastMA && iClose(NULL,Timeframe1,0)<=P1slowMA && P1fastMA<=P1slowMA) ObjectSetText("time1_value2",CharToStr(234),11,"Wingdings",StrongDn);
         if (iClose(NULL,Timeframe1,0)> P1fastMA && iClose(NULL,Timeframe1,0)< P1slowMA && P1fastMA< P1slowMA) ObjectSetText("time1_value2",CharToStr(236),11,"Wingdings",WeakDn);  
         //
         if (iClose(NULL,Timeframe1,0)>=P1fastMA && iClose(NULL,Timeframe1,0)>=P1slowMA && P1fastMA<=P1slowMA) ObjectSetText("time1_value2",CharToStr(251),17,"Wingdings",NewTrend);
         if (iClose(NULL,Timeframe1,0)< P1fastMA && iClose(NULL,Timeframe1,0)< P1slowMA && P1fastMA> P1slowMA) ObjectSetText("time1_value2",CharToStr(251),17,"Wingdings",NewTrend);
         }
         
         if(currsma1 >= prevsma1) smadifftf1 = currsma1 - prevsma1;
         if(currsma1 <  prevsma1) smadifftf1 = prevsma1 - currsma1;
         
         
      double P2fastMA = iMA(NULL,Timeframe2,FastMa,FastMaShift,FastMAMethod,FastMAPrice,0);
      double P2slowMA = iMA(NULL,Timeframe2,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,0);
      double currsma2 = iMA(NULL,Timeframe2,Ma_length,0,Ma_Method,Ma_Price,1);
      double prevsma2 = iMA(NULL,Timeframe2,Ma_length,0,Ma_Method,Ma_Price,Ma_lookback_tf2);
      double P2cci =iCCI(NULL,Timeframe2,CCiPeriod,PRICE_TYPICAL,0);
      double P2cci1 =iCCI(NULL,Timeframe2,CCiPeriod,PRICE_TYPICAL,1);
      double P2cci2 =iCCI(NULL,Timeframe2,CCiPeriod,PRICE_TYPICAL,2);
        
         if (Calculation_Mode ==1 || Calculation_Mode ==2)
         {
         if (iClose(NULL,Timeframe2,0)>=P2fastMA && iClose(NULL,Timeframe2,0)>=P2slowMA && P2fastMA>=P2slowMA) ObjectSetText("time2_value2",CharToStr(233),11,"Wingdings",StrongUp);
         if (iClose(NULL,Timeframe2,0)< P2fastMA && iClose(NULL,Timeframe2,0)> P2slowMA && P2fastMA> P2slowMA) ObjectSetText("time2_value2",CharToStr(238),11,"Wingdings",WeakUp);  
         //
         if (iClose(NULL,Timeframe2,0)<=P2fastMA && iClose(NULL,Timeframe2,0)<=P2slowMA && P2fastMA<=P2slowMA) ObjectSetText("time2_value2",CharToStr(234),11,"Wingdings",StrongDn);
         if (iClose(NULL,Timeframe2,0)> P2fastMA && iClose(NULL,Timeframe2,0)< P2slowMA && P2fastMA< P2slowMA) ObjectSetText("time2_value2",CharToStr(236),11,"Wingdings",WeakDn);  
         //
         if (iClose(NULL,Timeframe2,0)>=P2fastMA && iClose(NULL,Timeframe2,0)>=P2slowMA && P2fastMA<=P2slowMA) ObjectSetText("time2_value2",CharToStr(251),17,"Wingdings",NewTrend);
         if (iClose(NULL,Timeframe2,0)< P2fastMA && iClose(NULL,Timeframe2,0)< P2slowMA && P2fastMA> P2slowMA) ObjectSetText("time2_value2",CharToStr(251),17,"Wingdings",NewTrend);
         }
         
         if(currsma2 >= prevsma2) smadifftf2 = currsma2 - prevsma2;
         if(currsma2 <  prevsma2) smadifftf2 = prevsma2 - currsma2;
         
      
      double P3fastMA = iMA(NULL,Timeframe3,FastMa,FastMaShift,FastMAMethod,FastMAPrice,0);
      double P3slowMA = iMA(NULL,Timeframe3,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,0);
      double currsma3 = iMA(NULL,Timeframe3,Ma_length,0,Ma_Method,Ma_Price,1);
      double prevsma3 = iMA(NULL,Timeframe3,Ma_length,0,Ma_Method,Ma_Price,Ma_lookback_tf3);
      double P3cci =iCCI(NULL,Timeframe3,CCiPeriod,PRICE_TYPICAL,0);
      double P3cci1 =iCCI(NULL,Timeframe3,CCiPeriod,PRICE_TYPICAL,1);
      double P3cci2 =iCCI(NULL,Timeframe3,CCiPeriod,PRICE_TYPICAL,2);

         if (Calculation_Mode ==1 || Calculation_Mode ==2)
         {    
         if (iClose(NULL,Timeframe3,0)>=P3fastMA && iClose(NULL,Timeframe3,0)>=P3slowMA && P3fastMA>=P3slowMA) ObjectSetText("time3_value2",CharToStr(233),11,"Wingdings",StrongUp);
         if (iClose(NULL,Timeframe3,0)< P3fastMA && iClose(NULL,Timeframe3,0)> P3slowMA && P3fastMA> P3slowMA) ObjectSetText("time3_value2",CharToStr(238),11,"Wingdings",WeakUp);  
         //
         if (iClose(NULL,Timeframe3,0)<=P3fastMA && iClose(NULL,Timeframe3,0)<=P3slowMA && P3fastMA<=P3slowMA) ObjectSetText("time3_value2",CharToStr(234),11,"Wingdings",StrongDn);
         if (iClose(NULL,Timeframe3,0)> P3fastMA && iClose(NULL,Timeframe3,0)< P3slowMA && P3fastMA< P3slowMA) ObjectSetText("time3_value2",CharToStr(236),11,"Wingdings",WeakDn);  
         //
         if (iClose(NULL,Timeframe3,0)>=P3fastMA && iClose(NULL,Timeframe3,0)>=P3slowMA && P3fastMA<=P3slowMA) ObjectSetText("time3_value2",CharToStr(251),17,"Wingdings",NewTrend);
         if (iClose(NULL,Timeframe3,0)< P3fastMA && iClose(NULL,Timeframe3,0)< P3slowMA && P3fastMA> P3slowMA) ObjectSetText("time3_value2",CharToStr(251),17,"Wingdings",NewTrend); 
         }
         
         if(currsma3 >= prevsma3) smadifftf3 = currsma3 - prevsma3;
         if(currsma3 <  prevsma3) smadifftf3 = prevsma3 - currsma3;
         
         
      double P4fastMA = iMA(NULL,Timeframe4,FastMa,FastMaShift,FastMAMethod,FastMAPrice,0);
      double P4slowMA = iMA(NULL,Timeframe4,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,0);
      double currsma4 = iMA(NULL,Timeframe4,Ma_length,0,Ma_Method,Ma_Price,1);
      double prevsma4 = iMA(NULL,Timeframe4,Ma_length,0,Ma_Method,Ma_Price,Ma_lookback_tf4);
      double P4cci =iCCI(NULL,Timeframe4,CCiPeriod,PRICE_TYPICAL,0);
      double P4cci1 =iCCI(NULL,Timeframe4,CCiPeriod,PRICE_TYPICAL,1);
      double P4cci2 =iCCI(NULL,Timeframe4,CCiPeriod,PRICE_TYPICAL,2);

         if (Calculation_Mode ==1 || Calculation_Mode ==2)
         {
         if (iClose(NULL,Timeframe4,0)>=P4fastMA && iClose(NULL,Timeframe4,0)>=P4slowMA && P4fastMA>=P4slowMA) ObjectSetText("time4_value2",CharToStr(233),11,"Wingdings",StrongUp);
         if (iClose(NULL,Timeframe4,0)< P4fastMA && iClose(NULL,Timeframe4,0)> P1slowMA && P4fastMA> P4slowMA) ObjectSetText("time4_value2",CharToStr(238),11,"Wingdings",WeakUp);  
         //
         if (iClose(NULL,Timeframe4,0)<=P4fastMA && iClose(NULL,Timeframe4,0)<=P4slowMA && P4fastMA<=P4slowMA) ObjectSetText("time4_value2",CharToStr(234),11,"Wingdings",StrongDn);
         if (iClose(NULL,Timeframe4,0)> P4fastMA && iClose(NULL,Timeframe4,0)< P4slowMA && P4fastMA< P4slowMA) ObjectSetText("time4_value2",CharToStr(236),11,"Wingdings",WeakDn);  
         //
         if (iClose(NULL,Timeframe4,0)>=P4fastMA && iClose(NULL,Timeframe4,0)>=P4slowMA && P4fastMA<=P4slowMA) ObjectSetText("time4_value2",CharToStr(251),17,"Wingdings",NewTrend);
         if (iClose(NULL,Timeframe4,0)< P4fastMA && iClose(NULL,Timeframe4,0)< P4slowMA && P4fastMA> P4slowMA) ObjectSetText("time4_value2",CharToStr(251),17,"Wingdings",NewTrend);
         }
         
         if(currsma4 >= prevsma4) smadifftf4 = currsma4 - prevsma4;
         if(currsma4 <  prevsma4) smadifftf4 = prevsma4 - currsma4;

         //
      
      int pipMult = 1000000;
      if (StringFind(Symbol(),"JPY",0) != -1) pipMult = 10000;
      if (StringFind(Symbol(),"XAU",0) != -1) pipMult = 1000;
      if (StringFind(Symbol(),"Cash",0) != -1) pipMult = 100;
  
         smadiffpercenttf1 = (smadifftf1/Ma_lookback_tf1) * pipMult;
         //
         smadiffpercenttf2 = (smadifftf2/Ma_lookback_tf2) * pipMult;
         //
         smadiffpercenttf3 = (smadifftf3/Ma_lookback_tf3) * pipMult;
         //
         smadiffpercenttf4 = (smadifftf4/Ma_lookback_tf4) * pipMult;     
         //
         //
       if (Calculation_Mode ==0 || Calculation_Mode ==2)  
       {  
       if (MathRound(smadiffpercenttf1)>=Strong_Trend_Value_tf1) {
          if (currsma1 > prevsma1) ObjectSetText("time1_value",MathRound(smadiffpercenttf1),11,"Arial Black",StrongUp); 
             else ObjectSetText("time1_value",MathRound(smadiffpercenttf1),11,"Arial Black",StrongDn);}
       else {
          if (currsma1 > prevsma1)ObjectSetText("time1_value",MathRound(smadiffpercenttf1),11,"Arial",WeakUp);
             else ObjectSetText("time1_value",MathRound(smadiffpercenttf1),11,"Arial",WeakDn);}
       //
       if (MathRound(smadiffpercenttf2)>=Strong_Trend_Value_tf2) {
          if (currsma2 > prevsma2) ObjectSetText("time2_value",MathRound(smadiffpercenttf2),11,"Arial Black",StrongUp); 
             else ObjectSetText("time2_value",MathRound(smadiffpercenttf2),11,"Arial Black",StrongDn);}
       else {
          if (currsma2 > prevsma2)ObjectSetText("time2_value",MathRound(smadiffpercenttf2),11,"Arial",WeakUp);
             else ObjectSetText("time2_value",MathRound(smadiffpercenttf2),11,"Arial",WeakDn);}
       //
       if (MathRound(smadiffpercenttf3)>=Strong_Trend_Value_tf3) {
          if (currsma3 > prevsma3) ObjectSetText("time3_value",MathRound(smadiffpercenttf3),11,"Arial Black",StrongUp); 
             else ObjectSetText("time3_value",MathRound(smadiffpercenttf3),11,"Arial Black",StrongDn);}
       else {
          if (currsma3 > prevsma3)ObjectSetText("time3_value",MathRound(smadiffpercenttf3),11,"Arial",WeakUp);
             else ObjectSetText("time3_value",MathRound(smadiffpercenttf3),11,"Arial",WeakDn);}
       //
       if (MathRound(smadiffpercenttf4)>=Strong_Trend_Value_tf4) {
          if (currsma4 > prevsma4) ObjectSetText("time4_value",MathRound(smadiffpercenttf4),11,"Arial Black",StrongUp); 
             else ObjectSetText("time4_value",MathRound(smadiffpercenttf4),11,"Arial Black",StrongDn);}
       else {
          if (currsma4 > prevsma4)ObjectSetText("time4_value",MathRound(smadiffpercenttf4),11,"Arial",WeakUp);
             else ObjectSetText("time4_value",MathRound(smadiffpercenttf4),11,"Arial",WeakDn);}
       } 
       //
         //
         
  for(i=Bars-CCiPeriod-1; i>=0; i--)
   {
 
      double PslowMA = iMA(NULL,0,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,i);
      double Pcci  =iCCI(NULL,0,CCiPeriod,PRICE_TYPICAL,i);
      double Pcci1 =iCCI(NULL,0,CCiPeriod,PRICE_TYPICAL,i+1);
      double Pcci2 =iCCI(NULL,0,CCiPeriod,PRICE_TYPICAL,i+2);
      double Pcci3 =iCCI(NULL,0,CCiPeriod,PRICE_TYPICAL,i+3);
      double currsma = iMA(NULL,0,Ma_length,0,Ma_Method,Ma_Price,i+1);
      double prevsma = iMA(NULL,0,Ma_length,0,Ma_Method,Ma_Price,i+Ma_lookback_for_Strong_Trend);  
            
      if(currsma >= prevsma) smadifftf = currsma - prevsma;
      if(currsma <  prevsma) smadifftf = prevsma - currsma;
      smadiffpercenttf = (smadifftf/Ma_lookback_for_Strong_Trend) * pipMult; 
      

      trend[i] = EMPTY_VALUE;
      trend[i+1] = trend[i];
      
      UpBuffer[i] = UpBuffer[i+1];
      DnBuffer[i] = DnBuffer[i+1];
      if (Pcci<minus_CCi_value_reach) UpBuffer[i] = 1;
      if (Pcci>plus_CCi_value_reach) DnBuffer[i] = 1;
      

     if (Arrow_Mode==3){ 
         if (Pcci>minus_CCi_value_return){if (UpBuffer[i]==1 && iClose(NULL,0,i)>PslowMA && smadiffpercenttf>=Strong_Trend_Value)trend[i]=1;UpBuffer[i] = 0;}
         if (Pcci<plus_CCi_value_return){if (DnBuffer[i]==1 && iClose(NULL,0,i)<PslowMA && smadiffpercenttf>=Strong_Trend_Value)trend[i]=-1;DnBuffer[i] = 0;}
         }
     if (Arrow_Mode==1){ 
         if (iClose(NULL,0,i)>PslowMA && Pcci2<-100 && Pcci3>Pcci2 && Pcci2<Pcci1 && smadiffpercenttf>=Strong_Trend_Value) trend[i] = 1;
         if (iClose(NULL,0,i)<PslowMA && Pcci2>100 && Pcci3<Pcci2 && Pcci2>Pcci1 && smadiffpercenttf>=Strong_Trend_Value) trend[i] = -1;
         } 
     if (Arrow_Mode==2){ 
         if (Pcci>minus_CCi_value_return){if (UpBuffer[i]==1 && iClose(NULL,0,i)>PslowMA)trend[i]=1; UpBuffer[i] = 0;}
         if (Pcci<plus_CCi_value_return){if (DnBuffer[i]==1 && iClose(NULL,0,i)<PslowMA)trend[i]=-1; DnBuffer[i] = 0;}
         }
     if (Arrow_Mode==0){ 
         if (iClose(NULL,0,i)>PslowMA && Pcci2<-100 && Pcci3>Pcci2 && Pcci2<Pcci1) trend[i] = 1;
         if (iClose(NULL,0,i)<PslowMA && Pcci2>100 && Pcci3<Pcci2 && Pcci2>Pcci1) trend[i] = -1;
         }
         //
         //
     if (ShowArrows){
         CrossUp[i] = EMPTY_VALUE;
         CrossDn[i] = EMPTY_VALUE;
        // deleteArrow(Time[i]);
         if (trend[i] !=trend[i+1])
         if (trend[i] == 1)
               CrossUp[i] = Low[i] - iATR(NULL,0,20,i)/2.0;
              // drawArrow(i,arrowsUpColor,arrowsUpCode,false);
         if (trend[i] == -1)
               CrossDn[i] = High[i]+ iATR(NULL,0,20,i)/2.0;
             //  drawArrow(i,arrowsDnColor,arrowsDnCode, true);
         }
  }
  
  
   if (alertsOn)
      {
        if (alertsOnCurrent)
           int whichBar = 0;
        else     whichBar = 1;

                
         if (trend[whichBar] != trend[whichBar+1])
         if (trend[whichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}
//+------------------------------------------------------------------+


void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          //
          //
          //
          //
          //

          if (trend[0] == 1) message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS),"CCi up ",doWhat);
          if (trend[0] == -1) message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS),"CCi down",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail && trend[0]==1)   SendMail(StringConcatenate(Symbol()," CCi up "),message);
             if (alertsEmail && trend[0]==-1)   SendMail(StringConcatenate(Symbol()," CCi down "),message);
             if (alertsSound)   PlaySound(soundfile);
      }
}

/*void drawArrow(int i,color theColor,int theCode,bool up)
{
   string name = arrowsIdentifier+":"+Time[i];
   double gap  = iATR(NULL,0,20,i);   
   
      //
      //
      //
      //
      //
      
      ObjectCreate(name,OBJ_ARROW,0,Time[i],0);
         ObjectSet(name,OBJPROP_ARROWCODE,theCode);
         ObjectSet(name,OBJPROP_COLOR,theColor);
         ObjectSet(name,OBJPROP_WIDTH,ArrowSize);
         if (up)
               ObjectSet(name,OBJPROP_PRICE1,High[i] + arrowsUpperGap * gap);
         else  ObjectSet(name,OBJPROP_PRICE1,Low[i]  - arrowsLowerGap * gap);
}

//
//
//
//
//

void deleteArrows()
{
   string lookFor       = arrowsIdentifier+":";
   int    lookForLength = StringLen(lookFor);
   for (int i=ObjectsTotal()-1; i>=0; i--)
   {
      string objectName = ObjectName(i);
         if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
   }
}

//
//
//
//
//

void deleteArrow(datetime time)
{
   string lookFor = arrowsIdentifier+":"+time; ObjectDelete(lookFor);
}*/