//+------------------------------------------------------------------+
//|                                        News_Calendar_Fp.4.06.mq4 |
//|                                        vorese                    |
//|                                        vorese@yandex.ru          |
//+------------------------------------------------------------------+
#property indicator_chart_window
extern string site_name="http://ru.investing.com/economic-calendar/";
//"http://www.forexpros.ru/economic-calendar/ ";
extern string brauser="Microsoft Internet Explorer";
extern color Col_01=Yellow;
extern color Col_02=Aqua;
extern color Col_03=Red;
extern color Col_04=Lime;
extern color Col_05=Snow;
extern string a1="ÌÑÊ-òåðìèíàë";  
extern int time_msk=2;
extern string a2="ïðîäîëæ. îáíîâëåíèÿ (ìèíóò)";
extern int duration_update=2;  
extern string a3="ïàóçà (ñåê.)";
extern int Pause=20;
extern string a4="ðàñïîë. òàáëèöû";
extern int XDISTANCE=10; 
extern int YDISTANCE=0; 
//----------------------------------------------------------------                
#import "wininet.dll"
int InternetAttemptConnect (int x);
  int InternetOpenA(string sAgent, int lAccessType, 
                    string sProxyName = "", string sProxyBypass = "", 
                    int lFlags = 0);
  int InternetOpenUrlA(int hInternetSession, string sUrl, 
                       string sHeaders = "", int lHeadersLength = 0,
                       int lFlags = 0, int lContext = 0);
  int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, 
                       int& lNumberOfBytesRead[]);
  int InternetCloseHandle(int hInet);
#import
//-------------------------------------------------------------------
   int tick; //îáíîâëåíèå
   datetime pause; 
   string text04[56];
   bool table=true;
int deinit() {            //óäàëÿåì òàáëèöó                  
                   ObjectsDeleteAll(0,OBJ_LABEL);  
                                     
   return(0);
  }
 
 int start()
  {
   string time[256]; 
   datetime TC=TimeCurrent();
   datetime t_mck=TC+3600*time_msk;
   string kn="";
   string TIM=TimeToStr(t_mck,TIME_SECONDS); //ÌÑÊ    
      ObjectCreate("tabtime", OBJ_LABEL, 0, 0, 0); 
      ObjectSet("tabtime", OBJPROP_CORNER,0 );
      ObjectSet("tabtime", OBJPROP_XDISTANCE,XDISTANCE+75);
      ObjectSet("tabtime", OBJPROP_YDISTANCE,YDISTANCE); 
      ObjectSetText("tabtime","* ÌÑÊ  "+TIM+" *",10,"Verdana",Col_02);
      
      ObjectCreate("tab1", OBJ_LABEL, 0, 0, 0); //
      ObjectSet("tab1", OBJPROP_CORNER,0 );
      ObjectSet("tab1", OBJPROP_XDISTANCE,XDISTANCE);
      ObjectSet("tab1", OBJPROP_YDISTANCE,YDISTANCE); 
      if(table==true)kn="<delete>";
            else
                 kn="";
      ObjectSetText("tab1",kn,10,"Verdana",Col_03);
        if(XDISTANCE !=ObjectGet("tab1",OBJPROP_XDISTANCE )) 
         { table=false; } 
  
//---------------------------------------------------------------
      //Îáíîâëåíèå è ïàóçà
       for(int d=0;d<=50;d++)
       {
        if(t_mck>=StrToTime(time[d]) && (t_mck<StrToTime(time[d])+duration_update*60)
                              && (pause+Pause<TC))
        { tick=0; }
        }                  
//-----çàãðóæàåì ñòðàíèöó--------------------------------------------
  if(tick==0)
{  
 int e,z;
for( z=1;z<=56;z++)
            {           
             for( e=0;e<5;e++)
               {  ObjectDelete(DoubleToStr(z,0)+" "+text04[z]+" "+DoubleToStr(e,0)); 
                       } }              
//----------------------------------------------------------------   
  if(!IsDllsAllowed())
     {
       Alert("Íåîáõîäèìî â íàñòðîéêàõ ðàçðåøèòü èñïîëüçîâàíèå DLL");
       return(0);
     }
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Print("Îøèáêà ïðè âûçîâå InternetAttemptConnect()");
       return(0);
     }
   int hInternetSession = InternetOpenA(brauser, 0, "", "", 0);
   if(hInternetSession <= 0)
     {
       Print("Îøèáêà ïðè âûçîâå InternetOpenA()");
       return(0);         
     }
   int hURL = InternetOpenUrlA(hInternetSession,site_name, "", 0, 0, 0); 
   if(hURL <= 0)
     {
       Print("Îøèáêà ïðè âûçîâå InternetOpenUrlA()");
       InternetCloseHandle(hInternetSession);
       return(0);         
     }      
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       for(int i = 0; i < 256; i++)
         {
         	 text = text + CharToStr(cBuffer[i] & 0x000000FF);
        	  if(StringLen(text) == dwBytesRead[0])
        	      break;
        	  text = text + CharToStr(cBuffer[i] >> 8 & 0x000000FF);
        	  if(StringLen(text) == dwBytesRead[0])
        	      break;
           text = text + CharToStr(cBuffer[i] >> 16 & 0x000000FF);
           if(StringLen(text) == dwBytesRead[0])
               break;
           text = text + CharToStr(cBuffer[i] >> 24 & 0x000000FF);
         }
       TXT = TXT + text;
       Sleep(2);
     }
   if(TXT != "")   //Ñîçäàåì ôàéë HTML
     {
       int h = FileOpen("Forexpros.html",FILE_BIN|FILE_WRITE);
       if(h > 0)
         {
           FileWrite(h,TXT);
           FileClose(h);
         }
       else
         { Print("Îøèáêà ïðè âûçîâå FileOpen()"); }
        }
       else
        { Print("Íåò ñ÷èòàííûõ äàííûõ");  }
   InternetCloseHandle(hInternetSession); 
 //===========×èòàåì ôàéë HTML ============================== 
   int FileHandle;
  string tempArray[6400],currString;
   int stringCounter;
   FileHandle=FileOpen("Forexpros.html",FILE_CSV|FILE_READ,'\x90');
   if (FileHandle <1)Alert("Ôàéë íå ïðî÷èòàí "+FileHandle); 
      while(!FileIsEnding(FileHandle)) 
         {
         tempArray[stringCounter] = FileReadString(FileHandle);
         stringCounter++;  }
      FileClose(FileHandle);  
 pause=TimeCurrent();
  FileDelete("Table_xx");
  Print("Îáíîâëåíèå   ",TIM);
         }  tick++; 
 //=================íà÷àëî è êîíåö òàáëèöû========================  
    int op=fTable(tempArray, currString, stringCounter,1);//"<table id="
    int cl=fTable(tempArray, currString, stringCounter,2);//"</table>"      
     int oc=cl-op+1;  
      
 //------------Òàáëèöà HTML------------------------------------
  string  currStr,calarray[]; 
   ArrayCopy(calarray,tempArray,0,op,oc);
//============Âûðåçàåì òåêñò èç òåãîâ=============================
 int pos_can, pos_td, pos_ug, pos_span, beg_pos, end_pos, sum_str;
 string substr[1000];
 string cam [1000]; 
  for(int r=0;r<oc;r++)
  {
   currStr=calarray[r];
     pos_td = fTegi(currStr,1); //"<td class="
    if(pos_td<0)
        continue;   
     else        
            sum_str++;                                                  
      pos_can=fTegi(currStr,2);//"</td>"                  
      pos_ug=fTegi(currStr,3); //">"   
      pos_span=fTegi(currStr,4); //"</span>"
   if(pos_span<0){beg_pos=pos_ug+1;end_pos=pos_can-pos_ug-1;}
   else
           {beg_pos=pos_span+7;end_pos=pos_can-pos_span-7;} 
   substr[sum_str]=StringSubstr(currStr,beg_pos,end_pos);
   cam[sum_str]=currStr;
         } 
 //*-------Èùåì ñòðîêó ñ âðåìåíåì. Ïðîïóñêàåì ïðàçäíèêè------------       
 string var_1="00:00";
 int bv=0;           
     for(int p=0;p<sum_str;p++)
     {   bv++;
        if(var_1==TimeToStr(StrToTime(substr[p]),TIME_MINUTES))continue;
            else  break; 
                    }     
//-----Ñîðòèðóåì ïî ñòîëáöàì------------------------------------------  
  string currency[50],fakt[50],forecast[50],previous[50],text01[50],text02[50],text03[50],rech[50];
  int kl,kls;
  int m,n;
  for( n=0;n<(sum_str-bv+2)/8;n++)
  {
        kl++;         
     for( m=0;m<8;m++)
     {  if(m==1)time[kl]=substr[m+kls+bv-2];     
        else {
        if(m==2)currency[kl]=substr[m+kls+bv-2];
        else {
        if(m==3)text01[kl]=cam[m+kls+bv-2];
        else {
        if(m==4) { text03[kl]=substr[m+kls+bv-2];rech[kl]=cam[m+kls+bv-2];}
        else {
        if(m==5){ fakt[kl]=substr[m+kls+bv-2];text02[kl]=cam[m+kls+bv-2]; }
        else {
        if(m==6)forecast[kl]=substr[m+kls+bv-2]; 
        else {
        if(m==7)previous[kl]=substr[m+kls+bv-2]; 
                 }}}}}}   } 
       kls=kls+8;            } 
//=============================================================== 
 //==============ôîðìèðóåì ñòðîêè================================================ 
int sf;
int sff;
int v;
int ddd,fff,ggg,bbb,nnn;
int tab_sum=(sum_str-bv+2)/8;
string text00="";
string text001="";
string nbsp=" ";  
string n_t="-----"; 
color Col_00;
    if(tab_sum>50){tab_sum=50;} // íå áîëåå 50 ñòðîê   
    if(table)    {
      ObjectCreate("tabcal", OBJ_LABEL, 0, 0, 0); 
      ObjectSet("tabcal", OBJPROP_CORNER,0 );
      ObjectSet("tabcal", OBJPROP_XDISTANCE,XDISTANCE);
      ObjectSet("tabcal", OBJPROP_YDISTANCE,YDISTANCE+15);        
      ObjectSetText("tabcal","ìñê.....âàëþòà.....ïðåä:.......ïðîãí:.....ôàêò:..........",8,"Verdana",Col_04);
      }
 //============================================================================== 
 string vag=" ?";
 string rty=""; 
 string mas_1[50];
 string mas_2[50];
 string mas_3[50];
 string tim_2=TimeToStr(t_mck,TIME_MINUTES);
 
         for( int f=1;f<=tab_sum;f++)
  { 
    int raz=7;
//----------------ïåðåêîäèðîâêà òåêñòà---------------------------------------------                    
                     text04[f]=f_Cyrillic(text03,f);       
   if(text04[f]=="</td>")//ðå÷ü èëè ïðåäâ.ðåëèç
     {
      mas_3[f]=StringSubstr(rech[f],fTegi(rech[f],3)+1,fTegi(rech[f],5)-1-fTegi(rech[f],3)); 
          text04[f]=f_Cyrillic(mas_3,f);       }                                            
//--------------------------------------------------------------------------------- 
     if(tim_2>=time[f]) Col_00=Col_01;
       else
           Col_00=Col_04;
  int ooo=0;     
      if(TimeToStr(StrToTime(time[f]),TIME_MINUTES)==var_1)//åñëè íå óêàçàíî âðåìÿ
          {
             if(fakt[f]!=nbsp) { time[f]=("ïðåäâ."); Col_00=Col_01;ooo=1;}
             else
                   { time[f]=("ïðåäâ."); Col_00=Col_04;ooo=2;} 
                                }                       
                                
     ddd=fVolatil(text01[f],1);                //âûñîêàÿ
     if(ddd!=-1) { vag="$$$";mas_2[f]="3"; } 
     fff=fVolatil(text01[f],2);                //ñðåäí.
     if(fff!=-1) { vag="$$";mas_2[f]="2"; } 
       ggg=fVolatil(text01[f] ,3);             //íèçêàÿ 
     if(ggg!=-1) { vag="$";mas_2[f]="1"; }
     
     bbb=fVolatil(text02[f],4);                //ëó÷øå
     nnn=fVolatil(text02[f],5);                //õóæå
     if(bbb!=-1) rty="+";
        else {
     if(nnn!=-1) rty="-";
        else { 
         rty="=";   }}                       //â ñîîòâ ñ îæèä  
     
        for( v=0;v<5;v++ )
     {   
           
    if(v==0) { sff=0;text00=StringConcatenate(time[f],"   ",currency[f],"   ",vag); }
           else {
    if(v==1) {sff=105;text00=previous[f];}
           else {
    if(v==2) {sff=165;text00=forecast[f];}
           else {
    if(v==3) {sff=225;text00=StringConcatenate(fakt[f],"");
         if(rty=="=" && tim_2<time[f]) { Col_00=Col_04;mas_1[f]="0"; }
               else {if(rty=="=" && tim_2>=time[f]) { Col_00=Col_01;mas_1[f]="0"; }              
               else {if(rty=="-") { Col_00=Col_05;mas_1[f]="-1"; }
               else {if(rty=="+") { Col_00=Col_02;mas_1[f]="1"; } }}}  }                                              
           else {
    if(v==4) {sff=285;text00=rty;
        if(rty=="=" && tim_2<time[f]) { Col_00=Col_04;raz=8; }
               else {if(rty=="=" && tim_2>=time[f]) { Col_00=Col_01;mas_1[f]="0"; raz=8; }
               else {if(rty=="-") { Col_00=Col_05; raz=10; }
               else {if(rty=="+") { Col_00=Col_02;raz=8; } }}}  }     
                            } } } }
        if(text00!=nbsp){text001=text00;}
              else {text001=n_t; } 
       if(ooo==1)Col_00=Col_01;
       if(ooo==2)Col_00=Col_04;  
            
    if(table)    {             //ñîçäà¸ì òàáëèöó
      ObjectCreate(DoubleToStr(f,0)+" "+text04[f]+" "+DoubleToStr(v,0), OBJ_LABEL, 0, 0, 0);     
      ObjectSet(DoubleToStr(f,0)+" "+text04[f]+" "+DoubleToStr(v,0), OBJPROP_CORNER,0 );
      ObjectSet(DoubleToStr(f,0)+" "+text04[f]+" "+DoubleToStr(v,0), OBJPROP_XDISTANCE, XDISTANCE+sff);
      ObjectSet(DoubleToStr(f,0)+" "+text04[f]+" "+DoubleToStr(v,0), OBJPROP_YDISTANCE, YDISTANCE+19+11*f);
      ObjectSetText(DoubleToStr(f,0)+" "+text04[f]+" "+DoubleToStr(v,0),text001,raz,"Verdana",Col_00);   
        }     }
                } 
//====================================================================
//============= Ñîçäà¸ì ôàéë csv ===================================== 
     int  han=FileOpen("Table_xx",FILE_CSV|FILE_WRITE|FILE_READ,'\t');
       if(han>0)
        {       for(int l=1;l<=tab_sum;l++)            
         {
         if(previous[l]==nbsp) previous[l]="-----";
         if(forecast[l]==nbsp) forecast[l]="-----";
         if(fakt[l]==nbsp) fakt[l]="-----";
         FileWrite(han,time[l],currency[l],mas_2[l],previous[l],forecast[l],fakt[l],mas_1[l]); } 
            FileClose(han);            
             }     
 //====================================================================
 int w,q;
 if(!table) {
     for( w=1;w<=56;w++)
            {           
             for(q=0;q<5;q++)
               {  ObjectDelete(DoubleToStr(w,0)+" "+text04[w]+" "+DoubleToStr(q,0)); 
                          } }         
                   ObjectDelete("tabcal");    }    
//-----------------------------------------------------------------------                                                    
   return(0);  
  }               
 //========ïîèñê íà÷àëà è êîíöà òàáëèöû=====================
    int fTable (string temp[],string curr, int counter,int flag)
 {
  int total=0;
  int postab;
  string sd;
  if(flag==1)sd="<table id=";//íà÷àëî òàáëèöû
  else {
  if(flag==2)sd="</table>";//êîíåö òàáëèöû
           }
  for(int u=0;u<counter;u++)
       {    
        curr =temp[u];                               
      postab = StringFind(curr,sd ,0); 
      // if (postab >=0) break;    
      if (postab >=0 && u>600) break;                       
        total++;  
           }    
         return(total);   } 
 //=============================================================================== 
    //ïåðåêîäèðóåì â êèðèëëèöó
 string f_Cyrillic(string text030[],int flag)
 {
   int a[58];//58
   int  b=0;
   int xx=0;
   int c=0;
   int rr=0;
   int h=0; 
   string sss="";     
       for( c=0;c<StringLen(text030[flag]);c++)
       {  b=StringGetChar(text030[flag],c);
         if(b==208) { rr=1;continue;}  //P
            else {
         if(b==209) {rr=2;continue;}   //C
            else xx++;}
         if(b==145 && rr==2) a[xx-1]=184; //¸
            else {   
         if(b<128) a[xx-1]=b;
            else {            
         if(rr==1) a[xx-1]=b+48;
            else {
         if(rr==2) a[xx-1]=b+112; }} }
                                   }
          for( h=0;h<xx;h++)
      {                               
       sss=sss+CharToStr(a[h]);   }
       return(sss);           } 
 //==========================================================
     //ïîçèöèè òåãîâ
    int fTegi(string wsx,int flag)
  {
    string mas[5]={"<td class=","</td>",">","</span>"," "};
    int pos=StringFind(wsx,mas[flag-1] ,0);
    return(pos);
                }  
 //=========================================================== 
   int fVolatil(string strr,int flag)
  {
     string mas[5]={"ÐÑÑокаÑ","СÑеднÑÑ","ÐизкаÑ","ÐÑÑÑе","Ð¥Ñже"};
     int poi=StringFind(strr,mas[flag-1] ,0);
     return(poi);
                   }
//-----------------------------------------------------------------------------                   
    //ÐÑÑÐ¾ÐºÐ°Ñ ÐолаÑилÑноÑÑÑ           âûñîêàÿ âîë.
  //СÑеднÑÑ ÐолаÑилÑноÑÑÑ             ñðåä. âîë.   
  //ÐÐ¸Ð·ÐºÐ°Ñ ÐолаÑилÑноÑÑÑ               íèç. âîë.  
  //ÐÑÑÑе ожидаемого                       ëó÷øå îæèä.
  //Ð ÑооÑвеÑÑÑвии Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñми   â ñîîòâ ñ îæèä.
  //Ð¥Ñже ожидаемого                         õóæå îæèä.  
 //------------------------------------------------------------------------------    
             
            
            
            
Comments