News_calendar_week_EA

Author: vorese
Miscellaneous
Uses files from the file systemIt writes information to fileIt reads information from a fileIt issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
News_calendar_week_EA
//+------------------------------------------------------------------+
//|                                        News calendar week EA.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "vorese"
#property link      "https://www.mql5.com/ru/users/vorese"
#property version   "5.1"
#property strict
#property description "russian(RU):add address 'http://ec.ru.forexprostools.com/'"
#property description "in Expert Advisors tab of the Options window"
#property description "englich(UK):add address 'http://ec.uk.forexprostools.com/'"
#property description "in Expert Advisors tab of the Options window"
input bool russian_english=true;
//ïåðåêëþ÷åíèå ðóññêèé/àíãëèéñêèé êàëåíäàðü
input int number_string=30;
//êîëè÷åñòâî ñòðîê â êàëåíäàðå

input color clr_table=clrBlack;
input color clr_text=clrMediumSpringGreen;
input color clr_border=clrGreen;
input color clr_button_off=clrLimeGreen;
input color clr_button_on=clrGold;
input color clr_backdrop=clrMidnightBlue;
input color clr_day_week=clrWhite;
input color clr_future=clrLimeGreen;
input color clr_better=clrLightGray;
input color clr_worse=clrDarkOrange;
input color clr_comp=clrYellowGreen;
input color clr_past=clrTurquoise;
input color clr_empty_string=clrDarkGray;
input string table_font="Verdana";
input string text_font="Verdana";
input int table_size=6;
input int text_size=7;
input int x_distance=5;
input int y_distance=2;
input string filename_ru="ru-forexprostools-exp";
//èìÿ ôàéëà êàëåíäàðÿ íà ðóññêîì ÿçûêå
input string filename_en="uk-forexprostools-exp";
//èìÿ ôàéëà êàëåíäàðÿ íà àíãëèéñêîîì ÿçûêå
#define size 400  // ìàêñ. êîëè÷åñòâî ñòðîê
//======================================================================
datetime time_ind[];//âðåìÿ
string
currency[],//âàëþòà
volatility[],//âîëàòèëüíîñòü
text_ind[],//òåêñò
previous[],//ïðåäûäóùèé   
forecast[],//ïðîãíîç
actual[],//ôàêò
compliance[];//îæèäàíèÿ

datetime time_ind_0[];
string
currency_0[],
volatility_0[],
text_ind_0[],
previous_0[],
forecast_0[],
actual_0[],
compliance_0[];

int line_number[size];//èíäåêñû ñòðîê ïîñëå ôèëüòð.
//=====================================================================
bool button_0=false;//X
bool button_1=false;//âðåìÿ
bool button_2=false;//âàëþòà
bool button_3=false;//òåêñò
bool button_4=false;//$$$
bool button_5=false;//$$
bool button_6=false;//$
bool button_7=false;//ñåãîäíÿ
bool button_8=false;//îáíîâèòü
bool button_9=false;//ïðîêðóòêà âíèç
bool button_10=false;//ïðîêðóòêà ââåðõ
bool start_exp=true;//òåðìèíàë
//====================================================================
color col_but0=clr_button_off;
color col_but1=clr_button_off;
color col_but2=clr_button_off;
color col_but3=clr_button_off;
color col_but4=clr_button_off;
color col_but5=clr_button_off;
color col_but6=clr_button_off;
color col_but7=clr_button_off;
color col_but8=clr_button_off;
color col_but9=clr_past;
color col_but10=clr_past;
//====================================================================
string symb_0=_Symbol;
string symb_1=NULL;
string symb_2=NULL;
string str_update=NULL;
string str_err=NULL;
int file_size=0;// ðàçìåð çàãðóæåííîãî ôàéëà
int count=0;//êîë-âî ñòðîê â êàëåíäàðå
int displ=0;//ñ÷åò÷èê ïðîêðóòêè êàëåíäàðÿ
int ru_en=0;//ôëàã ïåðåêëþ÷åíèÿ ðóññêèé/àíãëèéñêèé
int time_corr=0;//êîððåêöèÿ âðåìåíè
//===================================================================
string URL=NULL;
string str_pfa=NULL;
string filename=NULL;
string text_butt_1=NULL;
string text_butt_2=NULL;
string text_butt_3=NULL;
string text_butt_7=NULL;
string text_butt_8=NULL;
//===================================================================
int OnInit()
  {
   symb_1=StringSubstr(symb_0,0,3);//1-ÿ âàëþòà â âàëþòíîé ïàðå
   symb_2=StringSubstr(symb_0,3,3);//2-ÿ âàëþòà â âàëþòíîé ïàðå
   time_corr=TimeGMTOffset();
//===================================================================
   if(russian_english)
     {
      ru_en=0;
      URL="http://ec.ru.forexprostools.com/";
      // URL="http://ec.ru.forexprostools.com/?columns=exc_flags,exc_currency,exc_importance,exc_actual,exc_forecast,exc_previous&features=datepicker,timezone&countries=25,4,17,39,72,26,10,6,37,97,96,43,56,36,5,61,22,12,89,110,35&calType=week&timeZone=18&lang=7";
      filename=filename_ru;
      str_pfa="ïðåäø.   ïðîãí.   ôàêò.       ";
      text_butt_1="âðåìÿ";
      text_butt_2="âàëþòà";
      text_butt_3="òåêñò";
      text_butt_7="ñåãîäíÿ";
      text_butt_8="îáíîâèòü";
     }
   else
     {
      ru_en=1;
      URL="http://ec.uk.forexprostools.com/";
      //  URL="http://ec.uk.forexprostools.com/?columns=exc_flags,exc_currency,exc_importance,exc_actual,exc_forecast,exc_previous&features=datepicker,timezone&countries=25,34,32,6,37,72,71,22,17,51,39,14,33,10,35,43,60,38,36,110,11,26,9,12,4,5&calType=week&timeZone=15&lang=51";
      filename=filename_en;
      str_pfa="prev.   forecast   actual.    ";
      text_butt_1="time";
      text_butt_2="currenty";
      text_butt_3="text";
      text_butt_7="today";
      text_butt_8="update";
     }
//====================================================================
   EventSetMillisecondTimer(60);//ñêîðîñòü ïðîêðóòêè êàëåíäàðÿ
   return(INIT_SUCCEEDED);
  }
//====================================================================
void OnDeinit(const int reason)
  {
   f_Delete_object(number_string);
   f_Delete_button();
   ObjectDelete("table");
   ObjectDelete("time");
   ObjectDelete("terminal");
   ObjectDelete("error");
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ButtonCreate("table",x_distance+123,y_distance+15,143,14,str_pfa,7,clr_table,clr_past,false,clr_button_on);
   ButtonCreate("time",x_distance+15,y_distance+15,107,14,"local",7,clr_table,clr_past,false,clr_button_on);
   ButtonCreate("terminal",x_distance+519,y_distance+15,118,14,"terminal",7,clr_table,clr_past,false,clr_button_on);
   ButtonCreate("error",x_distance+325,y_distance,312,14,str_update,7,clr_table,clr_past,false,clr_button_on);
//============ çàãðóçêà ñòðàíèöû=====================================
   if(button_8)//íàæàòà êíîïêà"îáíîâèòü"
     {
      f_Free();//îñâîáîäèòü ïàìÿòü
      f_Resize(size);//óñòàíîâèòü ðàçìåð ìàññèâîâ
      file_size=f_Download(URL,filename,str_err);//çàãðóçêà ñòðàíèöû
      GlobalVariableSet("update_"+(string)ru_en,0);//çàïîìíèòü âðåìÿ ïîñëåäíåãî îáíîâëåíèÿ
      count=f_Parsing(filename);//ðàçáîð ñòðàíèöû
      f_Corrects_day_week(count);// êîððåêöèÿ íà÷àëà ñóòîê â çàâèñèìîñòè îò ÷àñîâîãî ïîÿñà
      button_8=false; col_but8=clr_button_off;
     }
   if(start_exp)
     {
      f_Resize(size);
      count=f_Parsing(filename);
      f_Corrects_day_week(count);
      start_exp=false;
     }
//=====âåðõíÿÿ ñòðîêà êàëåíäàðÿ======================================
   str_update=str_err+f_Date_time(GlobalVariableTime("update_"+(string)ru_en),5,0);
   ObjectSetString(0,"time",OBJPROP_TEXT,TimeToString(TimeLocal(),TIME_SECONDS));
//=====êíîïêè========================================================
   ButtonCreate("button0",x_distance,y_distance+15,14,14,"X",10,clr_table,col_but0,button_0,clr_button_on);
   ButtonCreate("button1",x_distance+267,y_distance+15,37,14,text_butt_1,7,clr_table,col_but1,button_1,clr_button_on);
   ButtonCreate("button2",x_distance+305,y_distance+15,48,14,text_butt_2,7,clr_table,col_but2,button_2,clr_button_on);
   ButtonCreate("button3",x_distance+354,y_distance+15,35,14,text_butt_3,7,clr_table,col_but3,button_3,clr_button_on);
   ButtonCreate("button4",x_distance+390,y_distance+15,25,14," $$$",6,clr_table,col_but4,button_4,clr_button_on);
   ButtonCreate("button5",x_distance+416,y_distance+15,25,14," $$",6,clr_table,col_but5,button_5,clr_button_on);
   ButtonCreate("button6",x_distance+442,y_distance+15,25,14," $",6,clr_table,col_but6,button_6,clr_button_on);
   ButtonCreate("button7",x_distance+468,y_distance+15,50,14,text_butt_7,7,clr_table,col_but7,button_7,clr_button_on);
   ButtonCreate("button8",x_distance+267,y_distance,57,14,text_butt_8,7,clr_table,col_but8,button_8,clr_button_on);
   ButtonCreate("button9",x_distance+638,y_distance+15,15,14,CharToString(130),13,clr_border,col_but9,button_9,clr_button_on,"Wingdings 3");
   ButtonCreate("button10",x_distance+638,y_distance,15,14,CharToString(129),13,clr_border,col_but10,button_10,clr_button_on,"Wingdings 3");
//=========ôèëüòðóåì íîâîñòè========================================== 
   int w=0;
   int r=0;
   color color_button=clr_future;
   color color_compliance=clr_future;
   color color_text=clrNONE;
   while(r<count)
     {
      if(button_4 && volatility[r]=="$$$")//ôèëüòðîâàòü ïî âîëàòèëüíîñòè
        {
         r++;continue;
        }

      if(button_5 && volatility[r]=="$$")
        {
         r++;continue;
        }
      if(button_6 && volatility[r]=="$")
        {
         r++;continue;
        }

      if(button_1 && time_ind[r]<TimeLocal()-7200 && time_ind[r]!=0)//ôèëüòðîâàòü ïî âðåìåíè
        {
         r++;
         continue;
        }

      if(button_2 && currency[r]!=symb_1 && currency[r]!=symb_2 && time_ind[r]!=0)//ôèëüòðîâàòü ïî âàëþòå
        {
         r++;continue;
        }

      if(button_7 && (TimeDay(TimeLocal())!=TimeDay(time_ind[r]) || time_ind[r]==0))//ñåãîäíÿ
        {
         r++;continue;
        }
      line_number[w]=r;//èíäåêñû ñòðîê ïîñëå ôèëüòð.
      r++;
      w++;
     }
//====================================================================
   if(button_9 && displ<w) displ++; //ïðîêðóòêà âíèç
//====================================================================
   if(button_10 && displ>0) displ--; //ïðîêðóòêà ââåðõ
//====================================================================
   int t=0;
   int u=0;

   while(t<number_string && t<w-displ) // ñîçäàåì òàáëèöó
     {
      u=line_number[t+displ];

      if(time_ind[u]>=TimeLocal())//öâåò ïðîøåäøèõ è áóäóùèõ íîâîñòåé
        {
         color_button=clr_future;color_text=clr_text;
        }
      else
        {
         color_button=clr_past;color_text=clr_text;
        }
      if(time_ind[u]==0)
        {
         color_text=clr_day_week;color_button=clr_empty_string;
        }

      if(compliance[u]=="+")color_compliance=clr_better;
      else
        {
         if(compliance[u]=="-")color_compliance=clr_worse;
         else
           {
            if(compliance[u]=="=" && actual[u]!="----")color_compliance=clr_comp;
            else
              {
               color_compliance=color_button;
              }
           }
        }
      //=================òàáëèöà============================================     
      if(!button_0)
        {
         ButtonCreate("date"+(string)(t),x_distance,y_distance+30+11*t,31,11,f_Date_time(time_ind[u],5,5),table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("time"+(string)(t),x_distance+30,y_distance+30+11*t,31,11,f_Date_time(time_ind[u],11,5),table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("currency"+(string)(t),x_distance+61,y_distance+30+11*t,31,11,currency[u],table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("volatility"+(string)(t),x_distance+92,y_distance+30+11*t,31,11,volatility[u],table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("previous"+(string)(t),x_distance+123,y_distance+30+11*t,41,11,previous[u],table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("forecast"+(string)(t),x_distance+164,y_distance+30+11*t,41,11,forecast[u],table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("fact"+(string)(t),x_distance+205,y_distance+30+11*t,41,11,actual[u],table_size,clr_table,color_button,false,clr_border,table_font);
         ButtonCreate("compliance"+(string)(t),x_distance+246,y_distance+30+11*t,21,11,compliance[u],table_size,clr_table,color_compliance,false,clr_border,table_font);
         //================òåêñò===============================================  
         if(!button_3)
           {
            RectLabelCreate("LabelCreate"+(string)t,x_distance+267,y_distance+30+11*t,386,12,clr_backdrop,clr_backdrop);
            f_Label("text"+(string)t,x_distance+270,y_distance+30+11*t,text_ind[u],text_size,color_text,text_font);
           }
        }
      t++;
     }
   if(t==w-displ)f_Delete_string(t);//óäàëèòü ñòðîêó â êîíöå òàáëèöû
   ObjectSetString(0,"terminal",OBJPROP_TEXT,"terminal "+TimeToString(TimeCurrent(),TIME_SECONDS));//âðåìÿ òåðìèíàëà
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---------------êíîïêà "X"--------------------------------------
   if(sparam=="button0" && !button_0)
     {
      button_0=true; col_but0=clr_button_on;
      f_Delete_object(number_string);
      return;
     }

   if(sparam=="button0" && button_0)
     {
      button_0=false; col_but0=clr_button_off;
      return;
     }
//-------------êíîïêà "âðåìÿ"--------------------------------
   if(sparam=="button1" && !button_1)
     {
      button_1=true; col_but1=clr_button_on;
      f_Delete_object(number_string);
      displ=0; return;
     }

   if(sparam=="button1" && button_1)
     {
      button_1=false; col_but1=clr_button_off;
      displ=0; return;
     }
//-------------êíîïêà "âàëþòà"--------------------------------
   if(sparam=="button2" && !button_2)
     {
      button_2=true; col_but2=clr_button_on;
      f_Delete_object(number_string);
      displ=0;return;
     }

   if(sparam=="button2" && button_2)
     {
      button_2=false; col_but2=clr_button_off;
      displ=0;return;
     }
//--------------êíîïêà "òåêñò"----------------------------------    
   if(sparam=="button3" && !button_3)
     {
      button_3=true; col_but3=clr_button_on;
      f_Delete_text(number_string);
      return;
     }

   if(sparam=="button3" && button_3)
     {
      button_3=false; col_but3=clr_button_off;
      return;
     }
//---------------êíîïêà "$$$"-----------------------------------
   if(sparam=="button4" && !button_4)
     {
      button_4=true; col_but4=clr_button_on;
      f_Delete_object(number_string);
      displ=0; return;
     }

   if(sparam=="button4" && button_4)
     {
      button_4=false; col_but4=clr_button_off;
      displ=0;return;
     }
//---------------êíîïêà "$$"------------------------------------
   if(sparam=="button5" && !button_5)
     {
      button_5=true; col_but5=clr_button_on;
      f_Delete_object(number_string);
      displ=0; return;
     }

   if(sparam=="button5" && button_5)
     {
      displ=0;button_5=false; col_but5=clr_button_off;
      return;
     }
//---------------êíîïêà "$"--------------------------------------
   if(sparam=="button6" && !button_6)
     {
      button_6=true; col_but6=clr_button_on;
      f_Delete_object(number_string);
      displ=0;return;
     }

   if(sparam=="button6" && button_6)
     {
      displ=0;button_6=false; col_but6=clr_button_off;
      return;
     }
//---------------êíîïêà "ñåãîäíÿ"-------------------------------------
   if(sparam=="button7" && !button_7)
     {
      displ=0; button_7=true; col_but7=clr_button_on;
      f_Delete_object(number_string);
      return;
     }

   if(sparam=="button7" && button_7)
     {
      displ=0;
      button_7=false; col_but7=clr_button_off;
      return;
     }
//-------------êíîïêà "îáíîâèòü"--------------------------------------
   if(sparam=="button8" && !button_8)
     {
      button_8=true; col_but8=clr_button_on;
      return;
     }

   if(sparam=="button8" && button_8)
     {
      button_8=false;
      return;
     }
//---------------âíèç-------------------------------------------------
   if(sparam=="button9" && !button_9)
     {
      button_9=true;col_but9=clr_button_on;
      button_10=false;col_but10=clr_past;
      return;
     }

   if(sparam=="button9" && button_9)
     {
      button_9=false;col_but9=clr_past;
      return;
     }
//--------------ââåðõ-------------------------------------------------
   if(sparam=="button10" && !button_10)
     {
      button_10=true;col_but10=clr_button_on;
      button_9=false;col_but9=clr_past;
      return;
     }
   if(sparam=="button10" && button_10)
     {
      button_10=false;col_but10=clr_past;
      return;
     }
  }
//===============óñòàíîâèòü ðàçìåð ìàññèâîâ==========================
void f_Resize(int s)
  {
   ArrayResize(time_ind_0,s);
   ArrayResize(currency_0,s);
   ArrayResize(volatility_0,s);
   ArrayResize(text_ind_0,s);
   ArrayResize(previous_0,s);
   ArrayResize(forecast_0,s);
   ArrayResize(actual_0,s);
   ArrayResize(compliance_0,s);

   ArrayResize(time_ind,s);
   ArrayResize(currency,s);
   ArrayResize(volatility,s);
   ArrayResize(text_ind,s);
   ArrayResize(previous,s);
   ArrayResize(forecast,s);
   ArrayResize(actual,s);
   ArrayResize(compliance,s);
  }
//===========îñâîáîäèòü ïàìÿòü=======================================
void f_Free()
  {
   ArrayFree(time_ind_0);
   ArrayFree(currency_0);
   ArrayFree(volatility_0);
   ArrayFree(text_ind_0);
   ArrayFree(previous_0);
   ArrayFree(forecast_0);
   ArrayFree(actual_0);
   ArrayFree(compliance_0);

   ArrayFree(time_ind);
   ArrayFree(currency);
   ArrayFree(volatility);
   ArrayFree(text_ind);
   ArrayFree(previous);
   ArrayFree(forecast);
   ArrayFree(actual);
   ArrayFree(compliance);
  }
//+------------óäàëèòü òàáëèöó----------------------------------------+
void f_Delete_object(int max)
  {
   for(int v=0;v<max;v++)
     {
      ObjectDelete("date"+(string)v);
      ObjectDelete("time"+(string)v);
      ObjectDelete("currency"+(string)v);
      ObjectDelete("volatility"+(string)v);
      ObjectDelete("previous"+(string)v);
      ObjectDelete("forecast"+(string)v);
      ObjectDelete("fact"+(string)v);
      ObjectDelete("compliance"+(string)v);
      ObjectDelete("text"+(string)v);
      ObjectDelete("LabelCreate"+(string)v);
     }
  }
//==========óäàëèòü ñòðîêó â òàáëèöå==================================
void f_Delete_string(int v)
  {
   ObjectDelete("date"+(string)v);
   ObjectDelete("time"+(string)v);
   ObjectDelete("currency"+(string)v);
   ObjectDelete("volatility"+(string)v);
   ObjectDelete("previous"+(string)v);
   ObjectDelete("forecast"+(string)v);
   ObjectDelete("fact"+(string)v);
   ObjectDelete("compliance"+(string)v);
   ObjectDelete("text"+(string)v);
   ObjectDelete("LabelCreate"+(string)v);
  }
//=============óäàëèòü êíîïêè êàëåíäàðÿ===============================
void f_Delete_button()
  {
   for(int w=0;w<=10;w++)
     {
      ObjectDelete("button"+(string)w);
     }
  }
//============óäàëèòü òåêñò===========================================
void f_Delete_text(int str)
  {
   for(int x=0;x<str;x++)
     {
      ObjectDelete("text"+(string)x);
      ObjectDelete("LabelCreate"+(string)x);
     }
  }
//============= âðåìÿ, äàòà===========================================
string f_Date_time(datetime time_str,int n,int k)
  {
   if(time_str==0)return(NULL);
   string dt=StringSubstr(TimeToString(time_str,TIME_DATE|TIME_SECONDS),n,k);
   return(dt);
  }
//======çàãðóçêà ñòðàíèöû=============================================
int f_Download(string investing_url,string file_name,string &s)
  {
   string cookie=NULL,headers;
   char post[],result[];
   int res=0;
   int rr=0;
   s=NULL;
   uint start_update=GetTickCount();
   uint time_update=0;
//--- îáíóëÿåì êîä ïîñëåäíåé îøèáêè
   ResetLastError();
   res=WebRequest("GET",investing_url,cookie,NULL,5000,post,0,result,headers);
   rr=ArraySize(result);
//--- ïðîâåðêà îøèáîê
   if(res==-1)
     {
      s="error WebRequest. "+(string)GetLastError()+"   ";
     }
   else
     {
      if(ArraySize(result)<100000)
         s="update error  ";
      else
        {
         //--- ñîõðàíÿåì äàííûå â ôàéë
         int filehandle=FileOpen(file_name,FILE_WRITE|FILE_BIN);
         //--- ïðîâåðêà îøèáêè
         if(filehandle!=INVALID_HANDLE)
           {
            //--- ñîõðàíÿåì ñîäåðæèìîå ìàññèâà result[] â ôàéë
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- çàêðûâàåì ôàéë
            FileClose(filehandle);
            time_update=GetTickCount()-start_update;
            s="update  "+(string)time_update+" ms   ";
           }
         else s="error FileOpen.  "+(string)GetLastError()+"   ";
        }
     }
   Print(s);
   return(rr);
  }
//===========ïåðåêîäèðóåì â êèðèëëèöó================================
string f_Cyrillic(string text_str)
  {
   uchar char_code=0;
   uchar  code=0;
   uchar flag=0;
   string ansi=NULL;
   uchar array_ansi[];
   int count_array=StringToCharArray(text_str,array_ansi,0,-1,CP_ACP);

   for(int c=0;c<count_array;c++)
     {
      code=array_ansi[c];
      if(code<=32) char_code=32;
      else
        {
         if(code<127) char_code=code;
         else
           {
            if(code==208) { flag=1;continue;}  //P
            else
              {
               if(code==209) { flag=2;continue;}   //C
               else
                 {
                  if(code==145 && flag==2)char_code=184; //¸
                  else
                    {
                     if(flag==1) char_code=code+48;
                     else
                       {
                        if(flag==2) char_code=code+112;
                       }
                    }
                 }
              }
           }
        }
      ansi+=CharToString(char_code);
     }
   return(ansi);
  }
//===================================================================== 
datetime f_StrTime(string str)
  {
   int st=StringReplace(str,"-",".");
   return (StrToTime(str));
  }
//=============êîðð. äíåé íåäåëè=======================================
void f_Corrects_day_week(int num)
  {
   int shift=1;

   for(int z=1;z<num;z++)//ïîèñê íà÷àëî ñóòîê. ðåçåðâèðóåì ñòðîêó  
     {
      if(TimeDay(time_ind_0[z])!=TimeDay(time_ind_0[z-1]) && time_ind_0[z-1]>0 && time_ind_0[z]>0)
        {
         f_Data_transfer(z,shift+1);
         shift+=2;
         continue;
        }
      f_Data_transfer(z,shift);
      shift++;
     }

   for(int d=0;d<num;d++)//âñòàâèì â ðåçåðâíóþ ñòðîêó äàòó è äåíü íåäåëè
     {
      if(time_ind[d]==0 && time_ind[d+1]>0)
        {
         if(ru_en==0)//ðóññêèé/àíãëèéñêèé
            text_ind[d]="         "+f_Day_week(time_ind[d+1],ru_en)+(string)TimeDay(time_ind[d+1])+f_Month(time_ind[d+1],ru_en)+(string)TimeYear(time_ind[d+1])+"ã.";
         else
            text_ind[d]="         "+f_Day_week(time_ind[d+1],ru_en)+f_Month(time_ind[d+1],ru_en)+(string)TimeDay(time_ind[d+1])+".  "+(string)TimeYear(time_ind[d+1]);
        }
     }
  }
//=========ìåñÿö====================================================
string f_Month(datetime time,int offset)
  {
   string res=NULL;
   switch(TimeMonth(time)+offset*12)
     {
      case 1: res=" ÿíâàðÿ  "; break;
      case 2: res=" ôåâðàëÿ  "; break;
      case 3: res=" ìàðòà  "; break;
      case 4: res=" àïðåëÿ  "; break;
      case 5: res=" ìàÿ  "; break;
      case 6: res=" èþíÿ  "; break;
      case 7: res=" èþëÿ  "; break;
      case 8: res=" àâãóñòà  "; break;
      case 9: res=" ñåíòÿáðÿ  "; break;
      case 10: res=" îêòÿáðÿ  "; break;
      case 11: res=" íîÿáðÿ  "; break;
      case 12: res=" äåêàáðÿ  "; break;
      case 13: res=" January  "; break;
      case 14: res=" February  "; break;
      case 15: res=" March  "; break;
      case 16: res=" April  "; break;
      case 17: res=" May  "; break;
      case 18: res=" June  "; break;
      case 19: res=" July  "; break;
      case 20: res=" August  "; break;
      case 21: res=" September  "; break;
      case 22: res=" October  "; break;
      case 23: res=" November  "; break;
      case 24: res=" December  "; break;
      default: res="error"; break;
     }
   return(res);
  }
//=========äíè íåäåëè=================================================
string f_Day_week(datetime time,int offset)
  {
   string res=NULL;
   switch(TimeDayOfWeek(time)+offset*7)
     {
      case 0: res="Âîñêðåñåíüå.  "; break;
      case 1: res="Ïîíåäåëüíèê.  "; break;
      case 2: res="Âòîðíèê.  "; break;
      case 3: res="Ñðåäà.  "; break;
      case 4: res="×åòâåðã.  "; break;
      case 5: res="Ïÿòíèöà.  "; break;
      case 6: res="Ñóááîòà.  "; break;
      case 7: res="Sunday.  "; break;
      case 8: res="Monday.  "; break;
      case 9: res="Tuesday.  "; break;
      case 10: res="Wednesday.  "; break;
      case 11: res="Thursday.  "; break;
      case 12: res="Friday.  "; break;
      case 13: res="Saturday.  "; break;
      default: res="error"; break;
     }
   return(res);
  }
//===================================================================
void f_Data_transfer(int x0,int x1)

  {
   time_ind[x1]=time_ind_0[x0];
   text_ind[x1]=text_ind_0[x0];
   currency[x1]=currency_0[x0];
   volatility[x1]=volatility_0[x0];
   previous[x1]=previous_0[x0];
   forecast[x1]=forecast_0[x0];
   actual[x1]=actual_0[x0];
   compliance[x1]=compliance_0[x0];
  }
//==================ïîçèöèè ïîäñòðîê=================================  
int f_Position(string text_str,int flag)
  {
   string tegi[31]=
     {
      "<table id=","</table>","theDay","</td>",">","event_timestamp","<td class=","flagCur","</span>","Ïðàçäíèê","Holiday",
      "Íèçêàÿ","Low","Óìåðåííàÿ","Moderate","Âûñîêàÿ","High","left","event","&nbsp","Actual_","Forecast_","Previous_",
      "Ëó÷øå","Better","Õóæå","Worse ","_forecast"," Line ","Ðå÷ü","Speech"
     };
   int position=StringFind(text_str,tegi[flag],0);
   return(position);
  }
//=====÷èòàåì ôàéë ==================================================
int f_Parsing(string file_name)
  {
   string text_string=NULL;
   int handle=0;
   int counter_news=1;
   int day=0;//êîë-âî äíåé â êàëåíäàðå
   bool begin_table=false;

   handle=FileOpen(file_name,FILE_READ,CP_ACP);// îòêðûâàåì ôàéë äëÿ ÷òåíèÿ
   while(!FileIsEnding(handle))
     {
      text_string=FileReadString(handle);//÷èòàåì  ñòðîêó èç ôàéëà

      if(!begin_table && f_Position(text_string,0)==(-1)) continue;
      else
         begin_table=true;//íà÷àëî òàáëèöû

      if(f_Position(text_string,1)>=0)break;//êîíåö òàáëèöû

      if(f_Position(text_string,2)>0) //äåíü íåäåëè
        {
         day++;continue;
        }

      if(f_Position(f_Cyrillic(text_string),9+ru_en)>=0) continue;// ïðàçäíèê

      if(f_Position(text_string,5)>0) //âðåìÿ
        {
         time_ind_0[counter_news]=f_StrTime(StringSubstr(text_string,f_Position(text_string,5)+17,19))-time_corr;
         continue;
        }

      if(f_Position(text_string,6)>0) //"<td class="
        {
         if(f_Position(text_string,7)>0 && f_Position(f_Cyrillic(text_string),9+ru_en)==(-1))
           {
            string text[];
            StringReplace(text_string,"</td>","#");//ðàçäåëèòåëü "#"
            int m=StringSplit(text_string,35,text);//Ïîëó÷àåì èç óêàçàííîé ñòðîêè ïîäñòðîêè ïî çàäàííîìó ðàçäåëèòåëþ "#" 
           if(m<4)
            {
            Alert("1#Îøèáêà ïðè çàãðóçêå èëè ÷òåíèè ôàéëà.");
            break;
            }
            //âàëþòà.   1-ÿ ïîäñòðîêà     
            currency_0[counter_news]=StringTrimLeft(StringSubstr(text[0],f_Position(text[0],8)+7,0));

            //âîëàòèëüíîñòü.  2-ÿ ïîäñòðîêà
            if(f_Position(f_Cyrillic(text[1]),11+ru_en)>0) volatility_0[counter_news]="$";
            if(f_Position(f_Cyrillic(text[1]),13+ru_en)>0) volatility_0[counter_news]="$$";
            if(f_Position(f_Cyrillic(text[1]),15+ru_en)>0) volatility_0[counter_news]="$$$";

            //òåêñò.   3-ÿ ïîäñòðîêà
            if(f_Position(f_Cyrillic(text[2]),29+ru_en)>0 || f_Position(f_Cyrillic(text[2]),19)>0)
               text_ind_0[counter_news]=f_Cyrillic(StringSubstr(text[2],f_Position(text[2],4)+1,f_Position(text[2],19)-f_Position(text[2],4)-1));
            else
               text_ind_0[counter_news]=f_Cyrillic(StringSubstr(text[2],f_Position(text[2],4)+1,0));
            continue;
           }

         // ðåçóëüòàò îæèäàíèÿ 
         if(f_Position(text_string,20)>0)
           {
            if(f_Position(f_Cyrillic(text_string),23+ru_en)>0)//ëó÷øå
               compliance_0[counter_news]="+";
            else
              {
               if(f_Position(f_Cyrillic(text_string),25+ru_en)>0)//õóæå
                  compliance_0[counter_news]="-";
               else
                 {
                  if(f_Position(text_string,27+ru_en)>0)//â ñîîòâåòñòâèè ñ îæèäàíèÿìè
                     compliance_0[counter_news]="=";
                  else
                    {
                     compliance_0[counter_news]="?";//íåò äàííûõ
                    }
                 }
              }
            //ôàêò, ïðîãíîç, ïðåäûäóùèé
            string result[];
            StringReplace(text_string,"&nbsp;","----");
            StringReplace(text_string,"</td>","#");
            int k=StringSplit(text_string,35,result);
            
             if(k<4)
            {
            Alert("2#Îøèáêà ïðè çàãðóçêå èëè ÷òåíèè ôàéëà.");
            break;
            }

            actual_0[counter_news]=StringSubstr(result[0],f_Position(result[0],4)+1,0);
            forecast_0[counter_news]=StringSubstr(result[1],f_Position(result[1],4)+1,0);
            previous_0[counter_news]=StringSubstr(result[2],f_Position(result[2],4)+1,0);
            counter_news++;
            continue;
           }
        }
     }
   FileClose(handle);//çàêðûòü ôàéë
   return(counter_news+day-1);//êîë-âî ñòðîê
  }
//===============êíîïêè==============================================
bool ButtonCreate(const string  name="button",      // èìÿ êíîïêè
                  const int x=0,                    // êîîðäèíàòà ïî îñè X
                  const int y=0,                    // êîîðäèíàòà ïî îñè Y
                  const int width=0,                // øèðèíà êíîïêè
                  const int height=0,               // âûñîòà êíîïêè
                  const string text="error",        // òåêñò
                  const int font_size=6,            // ðàçìåð øðèôòà
                  const color clr=clrNONE,          // öâåò òåêñòà
                  const color  back_clr=clrNONE,    // öâåò ôîíà 
                  const bool state=false,           // íàæàòà/îòæàòà                                                  
                  const color border_clr=clrNONE,   // öâåò ãðàíèöû  
                  const string  font="Verdana",     // øðèôò            
                  const bool back=false,            // íà çàäíåì ïëàíå
                  const bool selection=false,       // âûäåëèòü äëÿ ïåðåìåùåíèé
                  const bool hidden=false,          // ñêðûò â ñïèñêå îáúåêòîâ
                  const long z_order=0)             // ïðèîðèòåò íà íàæàòèå ìûøüþ
  {
   ResetLastError();
   if(ObjectFind(name)==-1)
     {
      ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetString(0,name,OBJPROP_FONT,font);
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(0,name,OBJPROP_BACK,back);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(0,name,OBJPROP_ZORDER,z_order);
     }
   ObjectSetString(0,name,OBJPROP_TEXT,text);
   ObjectSetInteger(0,name,OBJPROP_STATE,state);
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);
   return(true);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Ñîçäàåò òåêñòîâóþ ìåòêó                                          |
//+------------------------------------------------------------------+
bool f_Label(
             const string            name="Label",             // èìÿ ìåòêè               
             const int               x=0,                      // êîîðäèíàòà ïî îñè X
             const int               y=0,                      // êîîðäèíàòà ïî îñè Y                 
             const string            text="error",             // òåêñò
             const int               font_size=10,             // ðàçìåð øðèôòà                         
             const color             clr=clrRed,               // öâåò
             const string            font="Verdana",           // øðèôò   
             const double            angle=0.0,                // íàêëîí òåêñòà
             const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // ñïîñîá ïðèâÿçêè
             const bool              back=false,               // íà çàäíåì ïëàíå
             const bool              selection=false,          // âûäåëèòü äëÿ ïåðåìåùåíèé
             const bool              hidden=true,              // ñêðûò â ñïèñêå îáúåêòîâ
             const long              chart_ID=0,               // ID ãðàôèêà
             const int               sub_window=0,             // íîìåð ïîäîêíà
             const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // óãîë ãðàôèêà äëÿ ïðèâÿçêè
             const long              z_order=0)                // ïðèîðèòåò íà íàæàòèå ìûøüþ
  {
   ResetLastError();
   if(ObjectFind(name)==-1)
     {
      ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
     }
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   return(true);
  }
//+------------------------------------------------------------------+
//| Ñîçäàåò ïðÿìîóãîëüíóþ ìåòêó                                      |
//+------------------------------------------------------------------+
bool RectLabelCreate(
                     const string           name="RectLabel",          // èìÿ ìåòêè                    
                     const int              x=0,                       // êîîðäèíàòà ïî îñè X
                     const int              y=0,                       // êîîðäèíàòà ïî îñè Y
                     const int              width=500,                 // øèðèíà
                     const int              height=180,                // âûñîòà
                     const color            back_clr=clrRed,           // öâåò ôîíà                    
                     const color            clr=clrRed,                // öâåò ïëîñêîé ãðàíèöû (Flat)
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,         // ñòèëü ïëîñêîé ãðàíèöû
                     const int              line_width=1,              // òîëùèíà ïëîñêîé ãðàíèöû
                     const bool             back=false,                // íà çàäíåì ïëàíå
                     const bool             selection=false,           // âûäåëèòü äëÿ ïåðåìåùåíèé
                     const bool             hidden=false,              // ñêðûò â ñïèñêå îáúåêòîâ
                     const long             chart_ID=0,                // ID ãðàôèêà
                     const int              sub_window=0,              // íîìåð ïîäîêíà
                     const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER,  // óãîë ãðàôèêà äëÿ ïðèâÿçêè
                     const ENUM_BORDER_TYPE border_lab=BORDER_FLAT,    // òèï ãðàíèöû
                     const long             z_order=0)                 // ïðèîðèòåò íà íàæàòèå ìûøüþ
  {
   ResetLastError();
   if(ObjectFind(name)==-1)
     {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border_lab);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
     }
   return(true);
  }
//+-----

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---