Urdala_News

Author: ������ (urdala) ���������
Price Data Components
Series array that contains open time of each bar
Miscellaneous
It issuies visual alerts to the screenUses files from the file systemIt writes information to fileIt reads information from a file
0 Views
0 Downloads
0 Favorites
Urdala_News
//+------------------------------------------------------------------+
//|                                                  Urdala_News.mq4 |
//|                                        Ñåðãåé (urdala) Ðàøåâñêèé |
//|                                                   urdala@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Ñåðãåé (urdala) Ðàøåâñêèé"
#property link      "urdala@mail.ru"

#property indicator_chart_window
#property indicator_buffers 1

extern int MinDo=30;         // Ñðàáàòûâàíèå ìèíóò äî íîâîñòè     
extern int MinPosle=30;      // Ñðàáàòûâàíèå ìèíóò äî íîâîñòè
extern bool Vhigh=true;      // Óñòàíîâêà âàæíîñòè íîâîñòåé
extern bool Vmedium=true;    // Óñòàíîâêà âàæíîñòè íîâîñòåé
extern bool Vlow=true;       // Óñòàíîâêà âàæíîñòè íîâîñòåé 
extern bool RisovatLini=true;// Ðèñîâàòü ëèíèè?
extern bool Next=false;      // Ðèñîâàòü òîëüêî ëèíèè áóäóùèõ íîâîñòåé?  
extern bool Signal=false;    // Ñèãíàëèòü î ïðåäñòîÿùåé íîâîñòè?
extern color highc=Red;      // Öâåò âàæíûõ íîâîñòåé
extern color mediumc=Blue;   // Öâåò îáû÷íûõ íîâîñòåé
extern color lowc=Lime;      // Öâåò íåçíà÷èòåëüíûõ íîâîñòåé 
extern int Style=2;          // Ñòèëü ëèíèè  
//--------------------------------------------------------------------
#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenW(string sAgent,int lAccessType,
                  string sProxyName="",string sProxyBypass="",
                  int lFlags=0);
int InternetOpenUrlW(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
//---------------------------------------------------------------------
double Torg[1];
datetime TimeNews[300];
string Valuta[300];
string News[300];
string Vazn[300];
int Now=0;
int nom;
color Col;
datetime LastUpd;
//---------------------------------------------------------------------
int init()
  {
   IndicatorBuffers(1);
   SetIndexBuffer(0,Torg);
   LastUpd=0;
   return(0);
  }
//------------------------------------------------------------------------------
int deinit()
  {
   ObjectsDeleteAll(0,OBJ_VLINE);
   return(0);
  }
//-------------------------------------------------------------------------------
int start()
  {
   if(Time[0]-LastUpd>=86400){Update();LastUpd=Time[0];}
   WindowRedraw();
//---Ðèñóåì ëèíèè íîâîñòåé íà ãðàôèêå--------------------------------------------
   if(RisovatLini)
     {
      for(int i=1;i<nom-1;i++)
        {
         if(News[i]!="")if(ObjectFind(News[i])==0)continue;
         if(StringFind(Symbol(),Valuta[i])<0)continue;
         if(TimeNews[i]<TimeCurrent() && Next)continue;

         if((Vazn[i]=="High" || Vazn[i]=="HIGH") && Vhigh==false)continue;

         if((Vazn[i]=="Medium" || Vazn[i]=="MEDIUM" || Vazn[i]=="MED") && Vmedium==false)continue;

         if((Vazn[i]=="Low" || Vazn[i]=="LOW") && Vlow==false)continue;

         if(News[i]!="")ObjectCreate(News[i],0,OBJ_VLINE,TimeNews[i],0);
         if(Vazn[i]=="High" || Vazn[i]=="HIGH")Col=highc;
         if(Vazn[i]=="Medium" || Vazn[i]=="MEDIUM"  || Vazn[i]=="MED")Col=mediumc;
         if(Vazn[i]=="Low" || Vazn[i]=="LOW")Col=lowc;
         if(News[i]!="")ObjectSet(News[i],OBJPROP_COLOR,Col);
         if(News[i]!="")ObjectSet(News[i],OBJPROP_STYLE,Style);
        }
     }
//---------------Îáðàáîòêà ñîáûòèé------------------------------------
   for(i=1;i<nom;i++)
     {
      if((Vazn[i]=="High" || Vazn[i]=="HIGH") && Vhigh==false)continue;
      if((Vazn[i]=="Medium" || Vazn[i]=="MEDIUM"  || Vazn[i]!="MED") && Vmedium==false)continue;
      if((Vazn[i]=="Low" || Vazn[i]=="LOW") && Vlow==false)continue;
      if(TimeCurrent()+MinDo*60>TimeNews[i] && TimeCurrent()-MinPosle*60<TimeNews[i] && (StringSubstr(Symbol(),0,3)==Valuta[i] || StringSubstr(Symbol(),3,3)==Valuta[i]))
        {
         Torg[0]=1;
         break;
        }
      else Torg[0]=0;

     }
   if(Torg[0]==1 && i!=Now && Signal) {Alert("×åðåç ",(TimeNews[i]-TimeCurrent())/60," ìèíóò âûéäåò íîâîñòü ",News[i]);Now=i;}

//-------------------------------------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+
void Update()
  {
//----------Íàõîäèì ïîñëåäíåå âîñêðåñåíüå(ïîñëåäíèé çàãðóæåíûé íà ñàéò êàëåíäàðü)
   int DeltaTime=(TimeLocal()-TimeCurrent())/60/60;
   int DeltaGMT = 0 -(TimeGMTOffset()/60/60)-DeltaTime;
   int ChasPoyasServera=DeltaGMT; // ÷àñîâîé ïîÿñ. 0-GMT
   datetime NowTimeD1=Time[0];
   datetime LastSunday=NowTimeD1-TimeDayOfWeek(NowTimeD1)*86399;
   int DayFile=TimeDay(LastSunday);
   if(DayFile<10)string DF="0"+DayFile;
   else DF=DayFile;
   int MonthFile=TimeMonth(LastSunday);
   if(MonthFile<10)string MF="0"+MonthFile;
   else MF=MonthFile;
   int YearFile=TimeYear(LastSunday);
   string DateFile=MF+"-"+DF+"-"+YearFile;
//Print (DateFile);
   string FileName=DateFile+".csv";
   int handle;
   handle=FileOpen(FileName,FILE_CSV|FILE_READ,";");

   if(handle<0)
     {
      //-----Ñêà÷èâàåì êàëåíäàðü ---------------------------------------------------------------------   
      string url="http://www.dailyfx.com/files/Calendar-"+DateFile+".csv";
      //-------Ôóíêöèÿ ÷èòàåò èñõîäíûé êîä ñòðàíèöû ñàéòà â ñòðîêó------------------------------------
      if(!IsDllsAllowed())
        {
         Alert("Íåîáõîäèìî â íàñòðîéêàõ ðàçðåøèòü èñïîëüçîâàíèå DLL");
         return;
        }
      int rv = InternetAttemptConnect(0);
      if(rv != 0)
        {
         Alert("Îøèáêà ïðè âûçîâå InternetAttemptConnect()");
         return;
        }
      int hInternetSession=InternetOpenW("Microsoft Internet Explorer",
                                         0,"","",0);
      if(hInternetSession<=0)
        {
         Alert("Îøèáêà ïðè âûçîâå InternetOpenA()");
         return;
        }
      int hURL=InternetOpenUrlW(hInternetSession,
                                url,"",0,0,0);
      if(hURL<=0)
        {
         Alert("Îøèáêà ïðè âûçîâå InternetOpenUrlA()");
         InternetCloseHandle(hInternetSession);
         return;
        }
      //------------------------------------------------------------------------      
      handle=FileOpen(FileName,FILE_CSV|FILE_WRITE,";");
      int dwBytesRead[1],N1,N2,N3,N4;
      string text="";
      string Str[10];
      for(int y=0;y<9;y++)Str[y]="";
      nom=0;
      int x=0;
      while(!IsStopped())
        {
         int cBuffer[256];
         bool bResult=InternetReadFile(hURL,cBuffer,1024,dwBytesRead);
         if(dwBytesRead[0]==0) break;
         for(int i=0; i<256; i++)
           {

            N1=cBuffer[i] & 0x000000FF;
            N2=cBuffer[i] >> 8 & 0x000000FF;
            N3=cBuffer[i] >> 16 & 0x000000FF;
            N4=cBuffer[i] >> 24 & 0x000000FF;
            if(N1!=44 && N1!=10)Str[x]=Str[x]+CharToStr(N1);
            else x++;
            if(N1==10){nom++;x=0;FileWrite(handle,Str[0],Str[1],Str[2],Str[3],Str[4],Str[5],Str[6],Str[7],Str[8]);for(y=0;y<9;y++)Str[y]="";}
            if((i*4)==dwBytesRead[0])break;
            if(N2!=44 && N2!=10)Str[x]=Str[x]+CharToStr(N2);
            else x++;
            if(N2==10){nom++;x=0;FileWrite(handle,Str[0],Str[1],Str[2],Str[3],Str[4],Str[5],Str[6],Str[7],Str[8]);for(y=0;y<9;y++)Str[y]="";}
            if((i*4)+1==dwBytesRead[0])break;
            if(N3!=44 && N3!=10)Str[x]=Str[x]+CharToStr(N3);
            else x++;
            if(N3==10){nom++;x=0;FileWrite(handle,Str[0],Str[1],Str[2],Str[3],Str[4],Str[5],Str[6],Str[7],Str[8]);for(y=0;y<9;y++)Str[y]="";}
            if((i*4)+2==dwBytesRead[0])break;
            if(N4!=44 && N4!=10)Str[x]=Str[x]+CharToStr(N4);
            else x++;
            if(N4==10){nom++;x=0;FileWrite(handle,Str[0],Str[1],Str[2],Str[3],Str[4],Str[5],Str[6],Str[7],Str[8]);for(y=0;y<9;y++)Str[y]="";}
            if((i*4)+3==dwBytesRead[0])break;
           }
        }
      InternetCloseHandle(hInternetSession);
      FileSeek(handle,0,SEEK_SET);
      FileWrite(handle,nom);
     }
   FileClose(handle);
//-----------Çàíîñèì äàííûå èç ôàéëà â ìàññèâû.---------------------------------
   handle=FileOpen(FileName,FILE_CSV|FILE_READ,";");
   nom=StrToInteger(FileReadString(handle));
   string Hand;
   for(i=1;i<=8;i++)Hand=FileReadString(handle);
   string data,time,month,valuta;

   for(i=1;i<=nom;i++)
     {
      data=FileReadString(handle);
      time=FileReadString(handle);
      month=StringSubstr(data,4,3);
      if(month=="Jan") month="01";
      if(month=="Feb") month="02";
      if(month=="Mar") month="03";
      if(month=="Apr") month="04";
      if(month=="May") month="05";
      if(month=="Jun") month="06";
      if(month=="Jul") month="07";
      if(month=="Aug") month="08";
      if(month=="Sep") month="09";
      if(month=="Oct") month="10";
      if(month=="Nov") month="11";
      if(month=="Dec") month="12";
      TimeNews[i]=StrToTime(YearFile+"."+month+"."+StringSubstr(data,8,2)+" "+time)+ChasPoyasServera*3600;

      text=FileReadString(handle);

      valuta=FileReadString(handle);
      if(valuta=="eur" ||valuta=="EUR")Valuta[i]="EUR";
      if(valuta=="usd" ||valuta=="USD")Valuta[i]="USD";
      if(valuta=="jpy" ||valuta=="JPY")Valuta[i]="JPY";
      if(valuta=="gbp" ||valuta=="GBP")Valuta[i]="GBP";
      if(valuta=="chf" ||valuta=="CHF")Valuta[i]="CHF";
      if(valuta=="cad" ||valuta=="CAD")Valuta[i]="CAD";
      if(valuta=="aud" ||valuta=="AUD")Valuta[i]="AUD";
      if(valuta=="nzd" ||valuta=="NZD")Valuta[i]="NZD";

      News[i]=FileReadString(handle);
      News[i]=StringSubstr(News[i],0,60);

      Vazn[i]=FileReadString(handle);
      if(Vazn[i]!="High" && Vazn[i]!="HIGH" && Vazn[i]!="Medium" && Vazn[i]!="MEDIUM"  && Vazn[i]!="MED" && Vazn[i]!="Low" && Vazn[i]!="LOW")Vazn[i]=FileReadString(handle);
      if(Vazn[i]!="High" && Vazn[i]!="HIGH" && Vazn[i]!="Medium" && Vazn[i]!="MEDIUM"  && Vazn[i]!="MED" && Vazn[i]!="Low" && Vazn[i]!="LOW")Vazn[i]=FileReadString(handle);
      if(Vazn[i]!="High" && Vazn[i]!="HIGH" && Vazn[i]!="Medium" && Vazn[i]!="MEDIUM"  && Vazn[i]!="MED" && Vazn[i]!="Low" && Vazn[i]!="LOW")Vazn[i]=FileReadString(handle);

      while(!IsStopped())
        {
         text=FileReadString(handle);
         if(FileIsLineEnding(handle))break;
        }
     }
//------------Âûõîä èç ôóíêöèè--------------------------------------------------
   FileClose(handle);
  }
//+------------------------------------------------------------------+

Comments