//+------------------------------------------------------------------+
//| 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