//+------------------------------------------------------------------+ //| 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=""; 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> 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);//"" 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" pos_ug=fTegi(currStr,3); //">" pos_span=fTegi(currStr,4); //"" 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;p50){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]=="")//речь или предв.релиз { 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_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_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="
";//конец таблицы } for(int u=0;u=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",">",""," "}; 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); } //----------------------------------------------------------------------------- //Высокая Волатильность высокая вол. //Средняя Волатильность сред. вол. //Низкая Волатильность низ. вол. //Лучше ожидаемого лучше ожид. //Р’ соответствии СЃ ожиданиями в соотв с ожид. //Хуже ожидаемого хуже ожид. //------------------------------------------------------------------------------