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