Urdala_News

Author: ������ (urdala) ���������
7 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