//+------------------------------------------------------------------+
//|                                                         CCFp.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2010, Graff"
#property link      "http://www.mql5.com"
#property version   "0.2"

#property indicator_separate_window
#property indicator_buffers 7
#property indicator_plots   7
//---- plot MA
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_LINE
#property indicator_type4   DRAW_LINE
#property indicator_type5   DRAW_LINE
#property indicator_type6   DRAW_LINE
#property indicator_type7   DRAW_LINE

#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 Chocolate
#property indicator_color5 Maroon
#property indicator_color6 DarkOrange
#property indicator_color7 Purple
#property indicator_color8 Teal
//--- input parameters
input int Fast = 3;
input int Slow = 5;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input ENUM_TIMEFRAMES tf=0;
int                shift=0;
//--- indicator buffers:
double arrUSD[];
double arrEUR[];
double arrGBP[];
double arrCHF[];
double arrJPY[];
double arrAUD[];
double arrCAD[];
//double arrNZD[];

//Indictors handels:
// Fast
int hwd_EURUSDf;
int hwd_GBPUSDf;
int hwd_AUDUSDf;
int hwd_NZDUSDf;
int hwd_USDCADf;
int hwd_USDCHFf;
int hwd_USDJPYf;

// Slow
int hwd_EURUSDs;
int hwd_GBPUSDs;
int hwd_AUDUSDs;
int hwd_NZDUSDs;
int hwd_USDCADs;
int hwd_USDCHFs;
int hwd_USDJPYs;

string deb_txt;
string Prefix="ccfpWRules_";
//int y_pos=0;          // переменная Y координата для информационных объектов
int x_pos=0;          // переменная X координата для информационных объектов

int mwy_pos=0;          // переменная Y координата для информационных объектов
                        //int mwx_pos=0;          // переменная X координата для информационных объектов

static string symbs[]={"EURUSD","GBPUSD","AUDUSD","USDCAD","USDCHF","USDJPY"};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   int k=1;

   switch(_Period)
     {
      case PERIOD_M1:  k += 5; break;
      case PERIOD_M5:  k += 3; break;
      case PERIOD_M15: k += 2; break;
      case PERIOD_M30: k += 2; break;
      case PERIOD_H1:  k += 4; break;
      case PERIOD_H4:  k += 6; break;
      case PERIOD_D1:  k += 4; break;
      case PERIOD_W1:  k += 4; break;
     }
   k=1;
   hwd_EURUSDf=iMA("EURUSD",tf,Fast*k,shift,smootMode,price);
   hwd_GBPUSDf=iMA("GBPUSD",tf,Fast*k,shift,smootMode,price);
   hwd_AUDUSDf=iMA("AUDUSD",tf,Fast*k,shift,smootMode,price);
//hwd_NZDUSDf=iMA(Symbol(),tf,Fast,shift,smootMode,price);
   hwd_USDCADf=iMA("USDCAD",tf,Fast*k,shift,smootMode,price);
   hwd_USDCHFf=iMA("USDCHF",tf,Fast*k,shift,smootMode,price);
   hwd_USDJPYf=iMA("USDJPY",tf,Fast*k,shift,smootMode,price);

// Slow
   hwd_EURUSDs=iMA("EURUSD",tf,Slow*k,shift,smootMode,price);
   hwd_GBPUSDs=iMA("GBPUSD",tf,Slow*k,shift,smootMode,price);
   hwd_AUDUSDs=iMA("AUDUSD",tf,Slow*k,shift,smootMode,price);
//hwd_NZDUSDs=iMA(Symbol(),tf,Slow,shift,smootMode,price);
   hwd_USDCADs=iMA("USDCAD",tf,Slow*k,shift,smootMode,price);
   hwd_USDCHFs=iMA("USDCHF",tf,Slow*k,shift,smootMode,price);
   hwd_USDJPYs=iMA("USDJPY",tf,Slow*k,shift,smootMode,price);

   InitBuffer(0,arrUSD,"USD");
   InitBuffer(1,arrEUR,"EUR");
   InitBuffer(2,arrGBP,"GBP");
   InitBuffer(3,arrCHF,"CHF");
   InitBuffer(4,arrJPY,"JPY");
   InitBuffer(5,arrAUD,"AUD");
   InitBuffer(6,arrCAD,"CAD");/* */
//InitBuffer(7, arrNZD, "NZD"); 

   Prefix+=IntegerToString(tf)+"_";
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void InitBuffer(int Id,double &Array[],string Name)
  {
   int width=1;
   if(StringFind(Symbol(),Name,0)>=0) width=2;
   PlotIndexSetInteger(Id,PLOT_LINE_WIDTH,width);

//--- indicator buffers mapping
   SetIndexBuffer(Id,Array,INDICATOR_DATA);
//Print("Параметр AsSeries = ",AsSeries);
//Print("Индикаторный буфер после SetIndexBuffer() является таймсерией = ",         ArrayGetAsSeries(Array));
//--- set short indicator name
   IndicatorSetString(INDICATOR_SHORTNAME,"CCFp_by_Graff Period="+IntegerToString(tf)+" Fast="+IntegerToString(Fast)+" Slow="+IntegerToString(Slow));
//--- set AsSeries(dependes from input parameter)
   ArraySetAsSeries(Array,true);
//Print("Индикаторный буфер после ArraySetAsSeries(MABuffer,true); является таймсерией = ",ArrayGetAsSeries(Array));   
   PlotIndexSetString(Id,PLOT_LABEL,Name);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// Fast
   IndicatorRelease(hwd_EURUSDf);
   IndicatorRelease(hwd_GBPUSDf);
   IndicatorRelease(hwd_AUDUSDf);
   IndicatorRelease(hwd_NZDUSDf);
   IndicatorRelease(hwd_USDCADf);
   IndicatorRelease(hwd_USDCHFf);
   IndicatorRelease(hwd_USDJPYf);

// Slow
   IndicatorRelease(hwd_EURUSDs);
   IndicatorRelease(hwd_GBPUSDs);
   IndicatorRelease(hwd_AUDUSDs);
   IndicatorRelease(hwd_NZDUSDs);
   IndicatorRelease(hwd_USDCADs);
   IndicatorRelease(hwd_USDCHFs);
   IndicatorRelease(hwd_USDJPYs);

   DeleteObjectPrefix(Prefix);
   Comment("");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- check if all data calculated
   if(BarsCalculated(hwd_EURUSDf)<rates_total) return(0);
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<=0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      //--- last value is always copied
      to_copy++;
     }
//--- try to copy
// History download check
   if(isNewBar(PERIOD_M1))
     {
      for(int i=0;i<ArraySize(symbs);i++)
        {
         switch(CheckLoadHistory(symbs[i],_Period,TimeCurrent()-_Period*10))
           {
            case -1 : Print("Неизвестный символ ",symbs[i]);                                        break;
            case -2 : Print("Запрошенных баров больше, чем можно отобразить на графике ",symbs[i]); break;
            case -3 : Print("Выполнение было прервано пользователем ",symbs[i]);                    break;
            case -4 : Print("Индикатор не должен загружать собственные данные ",symbs[i]);          break;
            case -5 : Print("Загрузка окончилась неудачей ",symbs[i]);                              break;
            case  0 : Print("Все данные загружены ",symbs[i]);                                      break;
            case  1 :                                                                               break;//Print("Уже имеющихся данных в таймсерии достаточно");
            case  2 : Print("Таймсерия построена из имеющихся данных терминала ",symbs[i]);         break;
            default : Print("Результат выполнения не определен ",symbs[i]);
           }
        }
     }
//to_copy=50;
   for(int i=to_copy-1; i>=0; i--)
     {

      double EURUSD=ma(hwd_EURUSDs, hwd_EURUSDf, i);
      double GBPUSD=ma(hwd_GBPUSDs, hwd_GBPUSDf, i);
      double AUDUSD=ma(hwd_AUDUSDs, hwd_AUDUSDf, i);
      //double NZDUSD=ma("NZDUSD", Slow, MA_Method, Price, i)/ma("NZDUSD", Fast, MA_Method, Price, i);

      double USDCAD=ma(hwd_USDCADf, hwd_USDCADs, i);
      double USDCHF=ma(hwd_USDCHFf, hwd_USDCHFs, i);
      double USDJPY=ma(hwd_USDJPYf, hwd_USDJPYs, i);

      //double sum = EURUSD + GBPUSD + AUDUSD + NZDUSD + USDCHF + USDCAD + USDJPY;
      double sum=EURUSD+GBPUSD+AUDUSD+USDCHF+USDCAD+USDJPY;

      // рассчет валют
      arrUSD[i] = sum-6.0;
      arrEUR[i] = (sum-EURUSD+1.0)/EURUSD-6.0;
      arrGBP[i] = (sum-GBPUSD+1.0)/GBPUSD-6.0;
      arrAUD[i] = (sum-AUDUSD+1.0)/AUDUSD-6.0;
      //arrNZD[i] = (sum-NZDUSD+1.0)/NZDUSD-7.0;
      arrCAD[i] = (sum-USDCAD+1.0)/USDCAD-6.0;
      arrCHF[i] = (sum-USDCHF+1.0)/USDCHF-6.0;
      arrJPY[i] = (sum-USDJPY+1.0)/USDJPY-6.0;

     }//end block for(int i=0; i<limit; i++)  
   ChartRedraw();

   deb_txt="";
//Comment(rules(arrUSD[0],arrEUR[0],arrGBP[0],arrAUD[0],arrCAD[0],arrCHF[0],arrJPY[0]));
//Comment(ChartWindowOnDropped());
//=========================
   string a[][7];
   string b[][7];
   ArrayResize(a,6);ArrayResize(b,6);
   a[0][0] = DoubleToString(arrUSD[0]);
   a[1][0] = "USD_Green";
   a[0][1] = DoubleToString(arrEUR[0]);
   a[1][1] = "EUR_Blue";
   a[0][2] = DoubleToString(arrGBP[0]);
   a[1][2] = "GBP_Red";
   a[0][3] = DoubleToString(arrAUD[0]);
   a[1][3] = "AUD_DarkOrange";
   a[0][4] = DoubleToString(arrCAD[0]);
   a[1][4] = "CAD_Purple";
   a[0][5] = DoubleToString(arrCHF[0]);
   a[1][5] = "CHF_Chocolate";
   a[0][6] = DoubleToString(arrJPY[0]);
   a[1][6] = "JPY_Maroon";

   ArrayCopy(b,a);
   string x1,x2;
   int size=ArraySize(a)/6;

   for(int i=0; i<size; i++)
     {            // i - номер прохода
      for(int j=0; j<size; j++)
        {     // внутренний цикл прохода
         if(StringToDouble(a[0][i])>StringToDouble(a[0][j]))
           {
            x1=a[0][i];
            x2=a[1][i];
            a[0][i]=a[0][j];
            a[1][i]=a[1][j];
            a[0][j]=x1;
            a[1][j]=x2;
           }
        }
     }
   string res,symb; x_pos=3;mwy_pos=0;
   for(int i=0;i<ArraySize(a)/6;i++)
     {
      //txt=txt+a[0][i]+" "+a[1][i]+"\n";
      //res+=a[0][i]+",";
      //symb+=a[1][i]+",";
      ch_draw(StringSubstr(a[1][i],0,3),zero_rule(StringToDouble(a[0][i])),StringToColor(StringSubstr(a[1][i],4,StringLen(a[1][i])-4)));
      //Comment(StringSubstr(a[1][i],4,StringLen(a[1][i])-4));
     }
/*
   ch_draw("USD",zero_rule(arrUSD[0]),Green);
   ch_draw("EUR",zero_rule(arrEUR[0]),DarkBlue);
   ch_draw("GBP",zero_rule(arrGBP[0]),Red);
   ch_draw("CHF",zero_rule(arrCHF[0]),Chocolate);
   ch_draw("JPY",zero_rule(arrJPY[0]),Maroon);
   ch_draw("AUD",zero_rule(arrAUD[0]),DarkOrange);
   ch_draw("CAD",zero_rule(arrCAD[0]),Purple);*/
/**/
   mch_draw("EUR>CHF",rule(arrEUR[0],arrCHF[0]),LimeGreen);
   mch_draw("EUR>CAD",rule(arrEUR[0],arrCAD[0]),LimeGreen);
   mch_draw("EUR>USD",rule(arrEUR[0],arrUSD[0]),LimeGreen);
   mch_draw("EUR>GBP",rule(arrEUR[0],arrGBP[0]),LimeGreen);
   mch_draw("EUR>AUD",rule(arrEUR[0],arrAUD[0]),LimeGreen);
   mch_draw("EUR>JPY",rule(arrEUR[0],arrJPY[0]),LimeGreen);
//
   mch_draw("Rule 1",vpr(arrEUR[0]),YellowGreen);
   mch_draw("EUR-CHF-R",vpr_eurchf(arrEUR[0],arrCHF[0],arrAUD[0]),YellowGreen);
   mch_draw("Rules",rules(arrUSD[0],arrEUR[0],arrGBP[0],arrAUD[0],arrCAD[0],arrCHF[0],arrJPY[0]),YellowGreen);
   Comment(deb_txt);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
double ma(int hwdf,int hwds,int i)
  {
   double buff[];
   double bufs[];

   if(CopyBuffer(hwdf,0,i,1,buff)<=0) return(-1);
   if(CopyBuffer(hwds,0,i,1,bufs)<=0) return(-1);

   double res=0;
   res+=buff[0]/bufs[0];
   ArrayFree(buff);
   ArrayFree(bufs);
   return(res);

  }
//+------------------------------------------------------------------+
//|           Highter or lower than zero                             |
//+------------------------------------------------------------------+
int zero_rule(double c)
  {
   if(c==0) return(0); // no signal
   if(c>0)  return(1); // buy
   if(c<0) return(-1); // sell
   return(0);
  }
//+------------------------------------------------------------------+
//|           Which currency higher                                  |
//+------------------------------------------------------------------+
int rule(double e,double c)
  {
   if(e==c) return(0);
   if(e>c)  return(1);
   if(e<c) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Very profitable rule                                   |
//+------------------------------------------------------------------+
int vpr(double e)
  {
//if(e>-0.000305 && e<-0.00003) return(0);
   if(e >= -0.00003) return(1);
   if(e <= -0.00004) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Very profitable rule 2 Based on EUR CHF AUD            |
//+------------------------------------------------------------------+
int vpr_eurchf(double e,double c,double aud)
  {
   if(e==c || e==aud) return(0);
   if(e>c  &&  e>aud) return(1);
   if(e<c) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
int rules(double usd,double eur,double gbp,double aud,double cad,double chf,double jpy)//string
  {
   string mes;
   if(eur<=-0.000075 && gbp>0.000525 && usd>-0.000685 && aud>0.001140) { mes+=" DOWN  (22 / 0)";}
   if(eur>0.000115 && chf<=0.000705 && gbp<=0.000590 && eur>0.000635 && gbp>-0.000345 && usd>-0.000370 && gbp>0.000085) { mes+=" UP  (3 / 42)";}
   if(eur<=-0.000035 && chf>-0.000015 && chf<=0.000995 && gbp>0.000025 && cad>0.000030 && usd<=-0.000110) { mes+=" DOWN  (22 / 1)";}
   if(eur<=-0.000035 && usd>-0.000075 && usd<=0.000375 && eur<=-0.000745 && eur>-0.001200) { mes+=" DOWN  (26 / 1)";}
   if(eur>0.000115 && gbp<=-0.000135 && eur>0.000675 && jpy>0.001155) { mes+=" UP  (3 / 25)";}
   if(eur<=-0.000075 && cad<=0.000365 && jpy<=0.001515 && jpy>0.000635 && jpy<=0.000865) { mes+=" DOWN  (25 / 2)";}
   if(eur > 0.000115 && gbp <= -0.000135 && usd <= 0.000315 && usd > -0.001145 && eur > 0.000750 && gbp <= -0.000675 ) { mes += " UP  (7 / 33)";}
   if(eur <= -0.000245 && gbp > 0.000035 && chf <= 0.000885 && aud <= 0.000245 && aud > -0.001305 && chf <= 0.000025 ) { mes += " DOWN  (31 / 1)";}
   if(eur>-0.000035 && gbp<=-0.000135 && gbp>-0.000625 && chf<=0.000085 && eur<=0.000295) { mes+=" UP  (5 / 30)";}
   if(eur<=0.000115 && chf>-0.000045 && chf<=0.001575 && gbp>-0.000150 && chf>0.000225 && jpy<=0.000225 && jpy>-0.000215) { mes+=" DOWN  (29 / 4)";}
   if(eur>-0.000245 && gbp<=0.000125 && eur>0.000315 && usd<=0.000175 && usd>-0.001145 && aud>-0.000575 && eur>0.000675 && chf>-0.000665) { mes+=" UP  (3 / 34)";}
   if(eur <= -0.000235 && eur <= -0.001235 && gbp > -0.000600 && cad <= 0.000090 && chf <= 0.001215 ) { mes += " DOWN  (26 / 3)";}
   if(eur > -0.000245 && chf <= 0.000705 && usd <= -0.000045 && aud <= 0.001305 && eur <= -0.000140 ) { mes += " UP  (2 / 22)";}
   if(eur<=-0.000075 && jpy<=0.001830 && usd<=0.000305 && jpy>0.000835 && eur>-0.000495 && aud>-0.001705) { mes+=" DOWN  (28 / 2)";}
   if(eur > -0.000155 && gbp <= -0.000155 && chf <= -0.000225 && chf > -0.000540 && gbp > -0.000780 ) { mes += " UP  (1 / 13)";}
   if(eur > -0.000545 && gbp <= -0.000755 && gbp > -0.001515 && aud <= 0.000285 && cad <= -0.000345 ) { mes += " UP  (4 / 19)";}
   if(eur<=-0.000765 && aud>0.000965 && cad<=0.000435 && chf>-0.000475) { mes+=" DOWN  (13 / 1)";}
   if(eur > 0.000115 && cad > -0.000165 && cad <= 0.000415 && aud <= -0.000055 && aud > -0.000735) { mes += " UP  (4 / 28)";}
   if(chf > 0.000755 && eur > -0.000235 && chf <= 0.000925 && jpy > -0.000910 && usd <= 0.000715 ) { mes += " DOWN  (13 / 2)";}
   if(aud > -0.000305 && eur <= 0.000345 && jpy <= -0.000645 && chf > -0.000375 && eur > 0.000175) { mes += " DOWN  (14 / 1)";}
   if(usd<=0.000605 && cad<=0.000215 && chf<=0.000985 && jpy>0.000110 && cad>-0.000105 && gbp>-0.000255) { mes+=" UP  (1 / 19)";}
   if(eur<=-0.000155 && eur<=-0.001465 && chf<=-0.000850 && chf>-0.005170) { mes+=" DOWN  (14 / 1)";}
   if(gbp<=0.000275 && aud>0.000515 && eur>0.000320 && aud<=0.001085 && chf<=-0.000890) { mes+=" UP  (0 / 12)";}
   if(gbp>-0.000505 && gbp<=-0.000045 && gbp>-0.000175 && chf>-0.000205 && eur<=-0.000040) { mes+=" DOWN  (14 / 1)";}
   if(gbp<=0.000275 && chf<=0.001255 && eur>0.000205 && eur<=0.000655 && gbp>-0.000055 && cad>0.000365) { mes+=" UP  (0 / 9)";}
   if(gbp>0.000905 && gbp<=0.001215 && eur>0.000240 && chf<=0.000135) { mes+=" DOWN  (11 / 1)";}
   if(cad<=-0.000465 && jpy>-0.000205 && aud>-0.000755 && chf>0.000275 && usd<=0.000400) { mes+=" UP  (1 / 26)";}
   if(aud <= 0.000885 && aud > -0.000305 && usd <= 0.000225 && gbp <= 0.000115 && chf <= 0.000115 && aud > 0.000420) { mes += " DOWN  (21 / 3)";}
   if(chf > 0.000295 && eur > 0.000275 && usd <= 0.000345 && aud <= 0.000390 && eur <= 0.001215 && aud > -0.000880 ) { mes += " DOWN  (24 / 1)";}
   if(eur>0.000135 && aud>0.000330 && aud<=0.001655 && cad<=0.000470 && usd<=0.000515) { mes+=" UP  (8 / 39)";}
   if(cad <= 0.000385 && chf <= -0.000265 && cad > 0.000235 && usd <= -0.000425 ) { mes += " DOWN  (8 / 1)";}
   if(chf <= -0.000875 && chf > -0.001285 && aud > -0.000205 && eur > -0.000245 ) { mes += " DOWN  (21 / 4)";}
   if(chf <= -0.000665 && chf > -0.000855 && usd <= 0.000570) { mes += " UP  (2 / 19)";}
   if(cad <= -0.000825 && jpy <= 0.001455 && jpy > 0.001190 ) { mes += " DOWN  (14 / 3)";}
   if(jpy > 0.001035 && jpy <= 0.002705 && eur > -0.000510 && aud <= -0.001630 && usd <= 0.001065 ) { mes += " UP  (2 / 18)";}
   if(cad <= -0.000035 && jpy <= 0.000435 && chf <= 0.000530 && chf > 0.000280 && usd <= 0.001200 ) { mes += " DOWN  (12 / 1)";}
   if(aud > -0.000745 && aud <= -0.000305 && chf <= 0.001095 && eur <= 0.000360 && eur > -0.001280 ) { mes += " UP  (3 / 34)";}
   if(cad <= -0.000195 && eur <= 0.000385 && chf <= 0.000195 && chf > -0.000065 && eur <= 0.000005 ) { mes += " DOWN  (14 / 0)";}
   if(aud<=0.000115 && aud>-0.000405 && gbp<=0.000065 && usd>0.000095) { mes+=" DOWN  (22 / 7)";}
   if(aud<=-0.000185 && gbp<=-0.000645 && usd<=-0.000905) { mes+=" DOWN  (10 / 1)";}
   if(usd <= -0.000435 && jpy <= -0.000105 && jpy> -0.000655 && cad> -0.000520) { mes += " UP  (3 / 18)";}
   if(usd > -0.000845 && aud > 0.000980 && usd <= -0.000235 && usd > -0.000435) { mes += " DOWN  (19 / 4)";}
   if(chf <= -0.001155 && gbp <= 0.000270 && eur> -0.000310 && eur <= 0.000870) { mes += " UP  (1 / 15)";}
   if(eur <= 0.000785 && eur> 0.000055 && usd> -0.000215 && gbp <= -0.000035 && usd <= 0.000835 && eur <= 0.000470) { mes += " DOWN  (19 / 1)";}
   if(chf > -0.000385 && cad <= 0.001070 && aud > -0.001040 && eur > 0.000115 && eur <= 0.000585 && chf > 0.000295) { mes += " UP  (0 / 16)";}
   if(chf>0.000685 && chf<=0.001825 && aud>-0.000595 && cad>-0.000125 && usd<=-0.000260) { mes+=" DOWN  (13 / 1)";}
   if(aud>-0.000680 && aud<=0.000405 && aud>0.000225 && usd<=0.000365) { mes+=" UP  (2 / 15)";}
   if(jpy > -0.001010 && gbp > 0.000015 && eur <= -0.000170 && usd > -0.000175 && usd <= 0.000380) { mes += " DOWN  (15 / 3)";}
   if(cad > 0.000135 && aud > -0.000125 && aud <= 0.001145 && aud > 0.000510 && eur <= -0.000245 ) { mes += " UP  (1 / 18)";}
   if(jpy>-0.000810 && eur<=0.000540 && jpy<=0.001035 && eur>0.000170) { mes+=" DOWN  (19 / 3)";}
   if(eur>-0.000155 && cad>0.000155 && usd<=-0.000100 && usd>-0.001190 && jpy<=-0.001000) { mes+=" UP  (4 / 18)";}
   if(cad>0.000060 && chf>-0.000190 && gbp>-0.000020 && gbp<=0.000255) { mes+=" DOWN  (11 / 3)";}
   if(aud<=0.000320 && aud>-0.001685 && gbp>-0.001050 && jpy>0.001005 && jpy<=0.001495) { mes+=" UP  (3 / 17)";}
   if(aud > 0.000370 && jpy > -0.001155 && cad > -0.000180 && cad <= 0.001055 && eur <= -0.000315) { mes += " DOWN  (17 / 3)";}
   if(cad <= 0.000990 && cad > 0.000130 && gbp <= 0.000270 && gbp > -0.000605 && cad <= 0.000420 ) { mes += " UP  (1 / 13)";}
   if(eur>-0.000335 && eur<=-0.000155 && gbp>-0.000550 && usd>-0.001005) { mes+=" DOWN  (17 / 2)";}
   if(gbp>-0.000655 && eur<=-0.000065 && eur>-0.000620 && gbp>0.000195 && eur<=-0.000135) { mes+=" UP  (1 / 17)";}
   if(usd<=-0.000615 && usd>-0.001495 && usd>-0.000775) { mes+=" DOWN  (11 / 0)";}
   if(gbp<=-0.000720 && jpy>0.000720 && cad>-0.000460 && cad<=0.000370) { mes+=" DOWN  (14 / 1)";}
   if(jpy>0.000335 && chf<=0.001180 && gbp<=-0.001100) { mes+=" UP  (0 / 11)";}
   if(cad<=0.000185 && cad>-0.001065 && chf>-0.000155 && jpy>-0.001080 && jpy<=0.000105) { mes+=" UP  (5 / 15)";}
   if(gbp>0.000020 && eur<=0.000780 && jpy<=0.000210 && chf>-0.001370 && gbp<=0.001505 && aud<=0.000745) { mes+=" DOWN  (21 / 3)";}
   if(gbp>-0.000655 && chf<=0.001335 && aud<=0.000235 && gbp>0.000740 && usd<=0.000865) { mes+=" UP  (1 / 8)";}
   if(aud>-0.000700 && usd>-0.000005 && chf>-0.001265 && aud<=0.000085) { mes+=" UP  (2 / 13)";}
   if(gbp<=-0.000620 && aud<=0.000485 && gbp>-0.001585 && chf<=0.001920) { mes+=" DOWN  (13 / 4)";}
   if(eur<=-0.000215 && gbp>0.000035 && chf<=0.000885 && chf>0.000045 && aud>-0.000325) { mes+=" DOWN  (51 / 6)";}
   if(eur>0.000115 && gbp<=0.000270 && eur>0.000675 && chf<=0.000880 && gbp>-0.000345 && cad<=0.000565) { mes+=" UP  (6 / 52)";}
   if(eur<=-0.000075 && eur<=-0.000765 && gbp>-0.000575 && cad>0.000595 && cad<=0.001390) { mes+=" DOWN  (39 / 5)";}
   if(eur>-0.000035 && gbp<=-0.000155 && jpy>0.001335 && aud<=-0.000820) { mes+=" UP  (5 / 39)";}
   if(eur <= 0.000115 && usd > -0.000015 && cad <= 0.000465 && cad > -0.000615 && chf > 0.000245 && cad <= 0.000215 ) { mes += " DOWN  (43 / 8)";}
   if(eur > 0.000115 && cad > -0.000165 && jpy > -0.001145 && jpy <= 0.000300 && jpy > -0.000320 && gbp > -0.000340 ) { mes += " UP  (2 / 23)";}
   if(eur>-0.000245 && eur>0.000515 && gbp<=0.000545 && chf<=0.000225 && chf>-0.001450 && jpy<=0.000375 && aud<=0.001380) { mes+=" UP  (7 / 49)";}
   if(eur <= -0.000305 && jpy <= 0.001475 && cad <= 0.000345 && aud > 0.001025 && eur <= -0.000765 ) { mes += " DOWN  (21 / 1)";}
   if(eur <= -0.000305 && cad > 0.001205 && chf > -0.001710 && usd <= -0.000285 && eur > -0.001020 ) { mes += " DOWN  (20 / 5)";}
   if(eur <= 0.000115 && usd > -0.000085 && gbp > 0.000570 && eur <= -0.000675 && eur > -0.001355) { mes += " DOWN  (16 / 2)";}
   if(gbp <= -0.000125 && eur > -0.000035 && eur > 0.001095 && usd > -0.000535 && chf > 0.001220 ) { mes += " UP  (3 / 21)";}
   if(usd>0.000175 && usd<=0.000375 && gbp>0.000485) { mes+=" DOWN  (19 / 2)";}
   if(eur>-0.000075 && gbp<=-0.000125 && cad>-0.000225 && gbp>-0.000625 && eur<=0.000360) { mes+=" UP  (5 / 33)";}
   if(eur<=0.000115 && chf>-0.000165 && chf<=0.001575 && aud<=0.000125 && eur>-0.000735 && usd>0.000155 && aud>-0.000305) { mes+=" DOWN  (20 / 0)";}
   if(aud>-0.000600 && eur>-0.000305 && jpy>-0.000785 && eur<=-0.000135 && chf<=-0.000365) { mes+=" UP  (3 / 22)";}
   if(gbp > -0.000555 && gbp <= -0.000055 && gbp > -0.000125 && cad <= -0.000535) { mes += " DOWN  (13 / 0)";}
   if(eur <= 0.000205 && usd <= -0.000285 && usd > -0.000475 && jpy <= 0.000215 ) { mes += " DOWN  (32 / 4)";}
   if(jpy<=-0.000175 && cad>-0.000025 && cad<=0.000545 && chf>-0.000480 && aud<=-0.000020) { mes+=" UP  (4 / 30)";}
   if(aud<=-0.000600 && aud>-0.001235 && eur<=-0.000055 && gbp>0.000025) { mes+=" DOWN  (19 / 3)";}
   if(cad <= -0.000415 && cad > -0.001215 && gbp <= 0.000170 && gbp > -0.000255 && jpy <= 0.001265 && usd > -0.000080) { mes += " UP  (0 / 16)";}
   if(aud <= 0.000435 && jpy <= 0.000865 && chf > 0.000690 && usd <= -0.000465 && eur <= 0.001100 && gbp <= 0.000650 ) { mes += " DOWN  (15 / 3)";}
   if(gbp<=0.000870 && usd<=-0.000225 && jpy<=0.000890 && jpy>-0.001030 && chf>0.000300 && jpy>0.000015) { mes+=" UP  (1 / 19)";}
   if(cad<=-0.000105  &&  usd<=-0.000285  &&  cad<=-0.001390 && cad>-0.002445 && chf>0) { mes+=" DOWN  (20 / 5)";}
   if(eur>0.000375 && aud>0.000435 && aud<=0.001945 && cad<=0.000565 && jpy<=-0.001675) { mes+=" UP  (2 / 12)";}
   if(aud > 0.001815 && aud <= 0.002390 && jpy <= -0.001665 ) { mes += " DOWN  (16 / 3)";}
   if(gbp <= -0.000555 && jpy <= 0.000115 && aud > 0.002370 ) { mes += " UP  (2 / 11)";}
   if(aud<=0.000705 && cad>-0.000385 && usd<=0.000055 && chf>0.000635 && usd>-0.000215) { mes+=" DOWN  (13 / 1)";}
   if(chf>-0.000475 && jpy<=0.000155 && jpy>-0.000755 && usd<=0.000160 && eur>0.000320 && eur<=0.001285) { mes+=" UP  (1 / 19)";}
   if(gbp>0.000870 && jpy<=-0.000510 && jpy>-0.000985) { mes+=" DOWN  (10 / 1)";}
   if(eur>-0.001280 && eur<=-0.000485 && eur<=-0.000985 && aud<=0.000375) { mes+=" UP  (3 / 12)";}
   if(jpy>-0.000300  &&  usd>0.000785 && usd<=0.001570 && eur>0.000085 && eur<=0.000530) { mes+=" DOWN  (15 / 0)";}
   if(aud>0.000705 && aud<=0.001205 && cad>-0.000025 && gbp<=-0.000105 && chf>-0.000565) { mes+=" UP  (2 / 14)";}
   if(chf>-0.000655 && gbp<=-0.000305 && eur<=-0.000695 && usd<=-0.000350 && gbp>-0.002645) { mes+=" DOWN  (12 / 1)";}
   if(cad<=-0.000880 && usd<=0.000430 && gbp>-0.000355 && usd>-0.000255) { mes+=" UP  (3 / 24)";}
   if(chf>0.000155 && eur>0.000355 && chf<=0.000430 && usd>-0.000250) { mes+=" DOWN  (14 / 1)";}
   if(cad>0.001265 && chf>-0.000205 && usd<=-0.000035) { mes+=" DOWN  (10 / 0)";}
   if(cad>-0.000325 && cad<=0.000225 && cad>0.000125 && jpy>0.000585) { mes+=" UP  (1 / 13)";}
   if(jpy>-0.000440 && gbp>-0.000410 && gbp<=-0.000045 && jpy>0.000645 && cad>-0.000115) { mes+=" DOWN  (17 / 4)";}
   if(jpy<=-0.000470 && eur<=0.000270 && cad<=0.000595 && eur<=-0.000435) { mes+=" UP  (0 / 11)";}
   if(gbp>-0.000555 && cad<=-0.000325 && gbp<=-0.000015 && jpy<=0.000605 && eur<=0.000650) { mes+=" DOWN  (16 / 1)";}
   if(eur>-0.000155 && usd>-0.000255 && eur<=0.000175 && gbp>0.000555 && eur>-0.000040) { mes+=" UP  (1 / 10)";}
   if(aud>-0.000395 && chf>-0.000340 && chf<=0.000775 && eur>-0.000310 && eur<=0.000045 && usd>-0.000135) { mes+=" UP  (2 / 18)";}
   if(usd>-0.000195 && jpy<=0.000435 && chf<=0.000340 && jpy>-0.000475 && usd<=0.000405) { mes+=" DOWN  (23 / 6)";}
   if(usd<=0.000605 && chf<=0.000245 && cad<=0.000045 && chf<=-0.000565 && chf>-0.000970) { mes+=" UP  (1 / 11)";}
   if(gbp>0.000145 && jpy>-0.000930 && jpy<=0.000180 && usd>0.000395) { mes+=" DOWN  (19 / 3)";}
   if(chf<=-0.001145 && jpy>-0.000995 && gbp<=0.000050 && cad<=0.001775) { mes+= " UP  (2 / 20)";}
   if(jpy>0.000935 && jpy<= 0.001360 && eur<= 0.000455 && chf>-0.001210) { mes+= " DOWN  (17 / 4)";}
   if(chf>-0.000475 && chf<=0.000755 && eur>-0.000150 && jpy>0.000025 && aud<=0.000015 && jpy<=0.000745) { mes+=" UP  (3 / 12)";}
   if(gbp>0.000855 && jpy<=-0.001610 && aud<=0.001040) { mes+=" DOWN  (12 / 1)";}
   if(chf>-0.000095 && gbp>-0.000045 && cad>-0.000345 && gbp<=0.000200) { mes+=" UP  (1 / 11)";}
   if(gbp<=0.000435 && gbp>-0.000150 && aud>-0.000265 && cad<=0.000120 && jpy<=0.000595) { mes+=" DOWN  (13 / 1)";}
   if(usd<=-0.000765 && jpy<=-0.000425 && aud<=0.001610 && gbp>-0.000900) { mes+=" UP  (0 / 16)";}
   if(usd<=-0.000285 && aud<=0.000785 && eur>-0.000625 && gbp<=0.000705 && usd>-0.000655) { mes+=" DOWN  (19 / 2)";}
   if(jpy<=0.001645 && aud<=0.001195 && chf<=0.002005 && usd<=-0.000215 && usd>-0.000615 && eur>0.000115) { mes+=" UP  (0 / 11)";}
   if(chf>-0.000475 && chf<=-0.000190 && gbp>-0.000150 && gbp<=0.000605) { mes+=" UP  (2 / 16)";}
   if(jpy>0.001570 && chf<=-0.000455 && chf>-0.001010) { mes+=" DOWN  (11 / 0)";}
   if(eur>0.000595 && jpy<=-0.001145 && aud>0.000135 && jpy>-0.002955) { mes+=" DOWN  (16 / 2)";}
   if(gbp <= -0.000870 && eur > -0.000670 && eur <= 0.000115 && eur > -0.000395 ) { mes += " UP  (2 / 9)";}
   if(jpy <= 0.000045 && cad <= 0.000575 && usd > -0.000260 && jpy <= -0.001135 ) { mes += " UP  (2 / 9)";}

/*
for(int i=0;i<StringLen(mes);i++){

}*/
   string txt="";
   int up=0,dn=0,begin,midle,end,prev_begin=0;
   for(int i=0;i<StringLen(mes);i++)
     {
/*
      begin = StringFind(mes, "(",begin);
      midle = StringFind(mes, " / ",midle);
      end=StringFind(mes,")",end);*/
      begin = StringFind(mes, "(",i)+1;
      midle = StringFind(mes, " / ",begin);
      end=StringFind(mes,")",begin);
      if(prev_begin!=begin){prev_begin=begin;}else{ continue;}
      if(StringLen(mes)-i<8) continue;
      dn+=StringToInteger(StringSubstr(mes,begin,midle-begin));
      up+=StringToInteger(StringSubstr(mes,midle+3,end-midle-3));
      //txt+=StringSubstr(mes,begin,midle-begin)+StringSubstr(mes,midle+3,end-midle-3)+"\n";
     }
   int res;
   if(up>dn)
     {
      txt="Main trend UP\n";
      res=1;
        }else{
      txt="Main trend DOWN\n";
      res=-1;
     }
   if(MathAbs(up-dn)<5){ txt="No trend\n"; res=0;}
//return(txt+mes);
//return(txt+"Dn: "+IntegerToString(dn)+" Up: "+IntegerToString(up)+mes);
   deb_txt+=txt+"Dn: "+IntegerToString(dn)+" Up: "+IntegerToString(up)+mes;
   return(IntegerToString(res));
  }
//+------------------------------------------------------------------+
///        Отрисовка объеков in main window
//+------------------------------------------------------------------+   
int mch_draw(string name,int direction,color _color)
  {
   if(ObjectFind(0,Prefix+"coord")!=0)
     {
      ObjectCreate(0,Prefix+"coord",OBJ_LABEL,0,0,0);
      //ObjectSet("coord", OBJPROP_CORNER   , 0);
      ObjectSetInteger(0,Prefix+"coord",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
      ObjectSetInteger(0,Prefix+"coord",OBJPROP_XDISTANCE,150);
      ObjectSetInteger(0,Prefix+"coord",OBJPROP_YDISTANCE,15);
      ObjectSetString(0,Prefix+"coord",OBJPROP_TEXT,"+");
      ObjectSetInteger(0,Prefix+"coord",OBJPROP_COLOR,LimeGreen);
      ObjectSetInteger(0,Prefix+"coord",OBJPROP_SELECTABLE,true);
      //ObjectSet("coord",OBJPROP_XDISTANCE,200);
      //ObjectSet("coord",OBJPROP_YDISTANCE,200);
      //ObjectSetText("coord","+",10,"Arial",Lime);
     }
/*
         ObjectCreate("ichi360_"+period[y], OBJ_LABEL, 0, 0, 0);
         ObjectSet("ichi360_"+period[y], OBJPROP_CORNER, 0);
         ObjectSet("ichi360_"+period[y], OBJPROP_YDISTANCE, (ObjectGet("coord", OBJPROP_YDISTANCE)+7)+y*10);
         ObjectSet("ichi360_"+period[y], OBJPROP_XDISTANCE, ObjectGet("coord", OBJPROP_XDISTANCE)+7);*/

   ObjectCreate(0,Prefix+"MW_"+name,OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,Prefix+"MW_"+name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,Prefix+"MW_"+name,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,Prefix+"MW_"+name,OBJPROP_XDISTANCE,ObjectGetInteger(0,Prefix+"coord",OBJPROP_XDISTANCE)-7); //mwx_pos
   ObjectSetInteger(0,Prefix+"MW_"+name,OBJPROP_YDISTANCE,(ObjectGetInteger(0,Prefix+"coord",OBJPROP_YDISTANCE)+7)+mwy_pos);//mwy_pos
   ObjectSetString(0,Prefix+"MW_"+name,OBJPROP_TEXT,name);
   ObjectSetInteger(0,Prefix+"MW_"+name,OBJPROP_COLOR,_color);
// drawing arrows \/
   int mway_pos=mwy_pos; int mwx_pos=0;
   if(direction==-1) mway_pos=mwy_pos+2;
   if(direction==0) mwx_pos+=2;
   ObjectCreate(0,Prefix+"MW_"+name+"_arrow",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,Prefix+"MW_"+name+"_arrow",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,Prefix+"MW_"+name+"_arrow",OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,Prefix+"MW_"+name+"_arrow",OBJPROP_XDISTANCE,ObjectGetInteger(0,Prefix+"coord",OBJPROP_XDISTANCE)-80);//mwx_pos
   ObjectSetInteger(0,Prefix+"MW_"+name+"_arrow",OBJPROP_YDISTANCE,(ObjectGetInteger(0,Prefix+"coord",OBJPROP_YDISTANCE)+7)+mway_pos);//mway_pos
   ObjectSetString(0,Prefix+"MW_"+name+"_arrow",OBJPROP_FONT,"Wingdings");                    //--- установим шрифт надписи
   ObjectSetInteger(0,Prefix+"MW_"+name+"_arrow",OBJPROP_FONTSIZE,10);                //--- установим размер шрифта    
   ObjectSetString(0,Prefix+"MW_"+name+"_arrow",OBJPROP_TEXT,arrow(direction));
   ObjectSetInteger(0,Prefix+"MW_"+name+"_arrow",OBJPROP_COLOR,Colorarrow(direction));
// symbol Prefix+"MW_"+name

//mwx_pos+=30;
   mwy_pos+=15;
   return(0);
  }
//+------------------------------------------------------------------+
///        Отрисовка объеков in indicator window
//+------------------------------------------------------------------+   
int ch_draw(string name,int direction,color _color)
  {
/// drawing arrow
   int y_pos=30;
   if(direction==-1) y_pos=37;
   ObjectCreate(0,Prefix+name+"_arrow",OBJ_LABEL,ChartWindowFind(),0,0);
   ObjectSetInteger(0,Prefix+name+"_arrow",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,Prefix+name+"_arrow",OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,Prefix+name+"_arrow",OBJPROP_XDISTANCE,x_pos);
   ObjectSetInteger(0,Prefix+name+"_arrow",OBJPROP_YDISTANCE,y_pos);
   ObjectSetString(0,Prefix+name+"_arrow",OBJPROP_FONT,"Wingdings");                    //--- установим шрифт надписи
   ObjectSetInteger(0,Prefix+name+"_arrow",OBJPROP_FONTSIZE,23);                //--- установим размер шрифта    
   ObjectSetString(0,Prefix+name+"_arrow",OBJPROP_TEXT,arrow(direction));
   ObjectSetInteger(0,Prefix+name+"_arrow",OBJPROP_COLOR,Colorarrow(direction));
// symbol Prefix+name
   ObjectCreate(0,Prefix+name,OBJ_LABEL,ChartWindowFind(),0,0);
   ObjectSetInteger(0,Prefix+name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,Prefix+name,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,Prefix+name,OBJPROP_XDISTANCE,x_pos);
   ObjectSetInteger(0,Prefix+name,OBJPROP_YDISTANCE,15);//y_pos
   ObjectSetString(0,Prefix+name,OBJPROP_TEXT,name);
   ObjectSetInteger(0,Prefix+name,OBJPROP_COLOR,_color);

   x_pos+=30;
   return(0);
  }
//+------------------------------------------------------------------+
//| функция для определения типа стрелки по коду шрифта  Wingdings   |
//+------------------------------------------------------------------+
string arrow(int sig)
  {
   switch(sig)
     {
      case  0: return(CharToString(251));
      case  1: return(CharToString(233));
      case -1: return(CharToString(234));
     }
   return((string)0);
  }
//+------------------------------------------------------------------+
//| функция для определения цвета стрелки                            |
//+------------------------------------------------------------------+
color Colorarrow(int sig)
  {
   switch(sig)
     {
      case -1: return(Red);
      case  0:  return(Yellow);
      case  1:  return(Lime);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteObjectPrefix(string prefix)
  {
   int i=0;
   string objname;
   for(i=ObjectsTotal(0,0,-1)-1; i>=0; i--)
     {
      objname=ObjectName(0,i);
      if(StringFind(objname,prefix)==-1) continue;
      else ObjectDelete(0,objname);
     }
  }
//+------------------------------------------------------------------+  
//+------------------------------------------------------------------+
//|                           Checking history load                  |
//+------------------------------------------------------------------+
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
  {
   datetime first_date=0;
   datetime times[100];
//--- check symbol & period
   if(symbol==NULL || symbol=="") symbol=Symbol();
   if(period==PERIOD_CURRENT)     period=Period();
//--- check if symbol is selected in the MarketWatch
   if(!SymbolInfoInteger(symbol,SYMBOL_SELECT))
     {
      if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(-1);
      SymbolSelect(symbol,true);
     }
//--- check if data is present
   SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date);
   if(first_date>0 && first_date<=start_date) return(1);
//--- don't ask for load of its own data if it is an indicator
//if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol) return(-4);
//--- second attempt
   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries
      if(first_date>0)
        {
         //--- force timeseries build
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
//--- max bars in chart from terminal options
   int max_bars=TerminalInfoInteger(TERMINAL_MAXBARS);
//--- load symbol history info
   datetime first_server_date=0;
   while(!SeriesInfoInteger(symbol,PERIOD_M1,SERIES_SERVER_FIRSTDATE,first_server_date) && !IsStopped())
      Sleep(5);
//--- fix start date for loading
   if(first_server_date>start_date) start_date=first_server_date;
   if(first_date>0 && first_date<first_server_date)
      Print("Warning: first server date ",first_server_date," for ",symbol,
            " does not match to first series date ",first_date);
//--- load data step by step
   int fail_cnt=0;
   while(!IsStopped())
     {
      //--- wait for timeseries build
      while(!SeriesInfoInteger(symbol,period,SERIES_SYNCRONIZED) && !IsStopped())
         Sleep(5);
      //--- ask for built bars
      int bars=Bars(symbol,period);
      if(bars>0)
        {
         if(bars>=max_bars) return(-2);
         //--- ask for first date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(0);
        }
      //--- copying of next part forces data loading
      int copied=CopyTime(symbol,period,bars,100,times);
      if(copied>0)
        {
         //--- check for data
         if(times[0]<=start_date)  return(0);
         if(bars+copied>=max_bars) return(-2);
         fail_cnt=0;
        }
      else
        {
         //--- no more than 100 failed attempts
         fail_cnt++;
         if(fail_cnt>=100) return(-5);
         Sleep(10);
        }
     }
//--- stopped
   return(-3);
  }
//+------------------------------------------------------------------+
//|         NewBar Func
//+------------------------------------------------------------------+
bool isNewBar(ENUM_TIMEFRAMES timeFrame)
  {
//----
   static datetime old_Times[21];// массив для хранения старых значений
   bool res=false;               // переменная результата анализа  
   int  i=0;                       // номер ячейки массива old_Times[]     
   datetime new_Time[1];         // время нового бара

   switch(timeFrame)
     {
      case PERIOD_M1:  i= 0; break;
      case PERIOD_M2:  i= 1; break;
      case PERIOD_M3:  i= 2; break;
      case PERIOD_M4:  i= 3; break;
      case PERIOD_M5:  i= 4; break;
      case PERIOD_M6:  i= 5; break;
      case PERIOD_M10: i= 6; break;
      case PERIOD_M12: i= 7; break;
      case PERIOD_M15: i= 8; break;
      case PERIOD_M20: i= 9; break;
      case PERIOD_M30: i=10; break;
      case PERIOD_H1:  i=11; break;
      case PERIOD_H2:  i=12; break;
      case PERIOD_H3:  i=13; break;
      case PERIOD_H4:  i=14; break;
      case PERIOD_H6:  i=15; break;
      case PERIOD_H8:  i=16; break;
      case PERIOD_H12: i=17; break;
      case PERIOD_D1:  i=18; break;
      case PERIOD_W1:  i=19; break;
      case PERIOD_MN1: i=20; break;
     }
// скопируем время последнего бара в ячейку new_Time[0]   
   int copied=CopyTime(_Symbol,timeFrame,0,1,new_Time);

   if(copied>0) // все ок. данные скопированы
     {
      if(old_Times[i]!=new_Time[0]) // если старое время бара не равно новому
        {
         if(old_Times[i]!=0) res=true;    // если это не первый запуск, то истина = новый бар
         old_Times[i]=new_Time[0];        // запоминаем время бара
        }
     }
//----
   return(res);
  }
//+------------------------------------------------------------------+
/*
//+------------------------------------------------------------------+
//|           Rule for EURCHF                                        |
//+------------------------------------------------------------------+
int eurchf(double e,double c)
  {
   if(e==c) return(0);
   if(e>c)  return(1);
   if(e<c) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Rule for EURCAD                                        |
//+------------------------------------------------------------------+
int eurcad(double e,double c)
  {
   if(e==c) return(0);
   if(e>c)  return(1);
   if(e<c) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Rule for EURUSD                                        |
//+------------------------------------------------------------------+
int eurusd(double e,double u)
  {
   if(e==u) return(0);
   if(e>u)  return(1);
   if(e<u) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Rule for EURGBP                                        |
//+------------------------------------------------------------------+
int eurgbp(double e,double g)
  {
   if(e==g) return(0);
   if(e>g)  return(1);
   if(e<g) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Rule for EURAUD                                        |
//+------------------------------------------------------------------+
int euraud(double e,double a)
  {
   if(e==a) return(0);
   if(e>a)  return(1);
   if(e<a) return(-1);
   return(0);
  }
//+------------------------------------------------------------------+
//|           Rule for EURJPY                                        |
//+------------------------------------------------------------------+
int eurjpy(double e,double j)
  {
   if(e==j) return(0);
   if(e>j)  return(1);
   if(e<j) return(-1);
   return(0);
  }*/
//+------------------------------------------------------------------+
