1.01 поправил, теперь при выставлении флага "Чарты открывать или нет" в положение "открыть если нет" , алгоритм не вызывает повторное открытие чартов.
Будут еще версии.
Могу смотреть на график с ещё более умным видом, спасибо
Ошибки , не компилируется
Похоже нужно подправить код под новые версии МТ.
Код отлаживал на боевом счёте брокера открытие, сейчас данного брокера уже нет. Попробую отладить на счёте брокера Finam.
Код поправлен с связи с изменениями платформы!
Внимание код предназначен для работы в MT5 на фондовом рынке!
Некоторые доработки по дизайну , добавлена возможность обращения к сервису
Сервис необходимо установить самостоятельно
//+------------------------------------------------------------------+ //| Service_On_Timer.mq5 | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property service #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.01" //+------------------------------------------------------------------+ //| Service program start function | //+------------------------------------------------------------------+ void OnStart() { GlobalVariableSet("yzGetDivident",0); OnStartCicleGet(); } //+------------------------------------------------------------------+ //| Service program start function | //+------------------------------------------------------------------+ void OnStartCicleGet() { //--- bool aCicle = true; while ( aCicle == true && !IsStopped()) { if (GlobalVariableCheck("yzGetDivident") == true ) { int i_SymbolsTotal=SymbolsTotal(true); // false - Все символы , true – только символы в MarketWatch ReadDividend(i_SymbolsTotal); int DelVar = GlobalVariablesDeleteAll("yzGetDivident"); if (DelVar == 0 ) { printf("err delete"); } else { //printf("delete yzGetDivident"); } } Sleep(500); // } } //+------------------------------------------------------------------+ //void CYZTS::ReadDividend(void) void ReadDividend(int gCountSym) { for(int i=0; i<gCountSym; i++) { string pSymbol = SymbolName(i,true) ; // false); // Загоним символ в массив StringToLower(pSymbol); //printf(" %s ",pSymbol); GetDividendFrom_www_dohod_ru(pSymbol); } } //void CYZTS::GetDividendFrom_www_dohod_ru(string pSymbol) void GetDividendFrom_www_dohod_ru(string pSymbol) { string cookie=NULL,headers; char post[],result[]; int iPos2; int iPos1; string strВыплптаНаАкцию; string url="https://www.dohod.ru/ik/analytics/dividend/" ; // https://www.dohod.ru/ik/analytics/dividend url=url+pSymbol; //--- для работы с сервером необходимо добавить URL "https://www.dohod.ru" //--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"): //--- обнуляем код последней ошибки ResetLastError(); //--- загрузка html-страницы с Yahoo Finance int res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers); if(res==-1) { Print("Ошибка в WebRequest. Код ошибки =",GetLastError()); //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION); } else { if(res==200) { // Распарсим результат // найти дивиденды // <table id="dividends-brief"> // <tr class="frow"> // <td class="greendark">11.54%</td> <td class="dlmtr"></td> // <td class="gray">2.14%</td> <td class="dlmtr"></td> // <td class="greenlight">0.79</td> </tr> // <tr class="srow"> // <td>текущая доходность</td><td class="dlmtr"></td> // <td>доля от прибыли</td><td class="dlmtr"></td> // <td><a id="dsi-link" title="Методика расчета индекса стабильности дивидендных выплат (DSI)" href="/ik/analytics/dividend/pdf/dsi.pdf">индекс DSI</a></td> // </tr> // </table> string strPars = CharArrayToString(result,0,-1,CP_UTF8); string Div; iPos1 = StringFind(strPars,"<table id=\"dividends-brief\">",0); // Найдем начало таблицы дивидендов if(iPos1 !=0) { //string strPars; iPos1 = StringFind(strPars,"<p>Совокупные дивиденды в следующие 12m: <strong><span class=",0); // //printf(" %d %d ",iPos1,iPos2 ); iPos1 = iPos1+StringLen("<p>Совокупные дивиденды в следующие 12m: <strong><span class="); // //printf(" %d %d ",iPos1,iPos2 ); iPos1 = StringFind(strPars,">",iPos1)+1; // //printf(" %d %d ",iPos1,iPos2 ); iPos2 = StringFind(strPars,"</span>",iPos1); // //printf(" %d %d ",iPos1,iPos2 ); // strВыплптаНаАкцию = StringSubstr(strPars, iPos1, iPos2-iPos1); //iPos2-iPos1 ); //printf("%s %d %d %d [%s] ",pSymbol, iPos2-iPos1,iPos1,iPos2, strВыплптаНаАкцию); iPos1 = StringFind(strPars,"<table id=\"dividends-brief\">",0); // Найдем начало таблицы дивидендов strPars = StringSubstr(strPars, iPos1, 500); iPos1 = StringFind(strPars,"<tr class=\"frow\">",0); // найдем <tr class="frow"> strPars = StringSubstr(strPars, iPos1+1, 500); iPos1 = StringFind(strPars,"<td class=",0)+1; // <td class= тут может быть разный цвет strPars = StringSubstr(strPars, iPos1, 500); iPos1 = StringFind(strPars,">",0); // Нахдим ограничитель цвета iPos2 = StringFind(strPars,"</td>",0); // найдем завершение </td> пример ---}}}} >11.54%</td> Div = StringSubstr(strPars,iPos1+1,iPos2 - 1 - iPos1) ; // вырезаем дивиденды //printf("[%s] [%s] [%s]",pSymbol, Div, strВыплптаНаАкцию); int filehandle=FileOpen("yz_Div_"+pSymbol+".dat",FILE_WRITE|FILE_SHARE_WRITE|FILE_CSV,"|"); if(filehandle!=INVALID_HANDLE) { //--- сохраняем содержимое массива result[] в файл FileWrite(filehandle,"<"+Div+"><"+strВыплптаНаАкцию+">"); //--- закрываем файл FileClose(filehandle); } } //--- успешная загрузка // PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result)); //PrintFormat("Заголовки сервера: %s",headers); //--- сохраняем данные в файл int filehandle=FileOpen("yz_Div_"+pSymbol+".htm",FILE_WRITE|FILE_BIN); if(filehandle!=INVALID_HANDLE) { //--- сохраняем содержимое массива result[] в файл FileWriteArray(filehandle,result,0,ArraySize(result)); //--- закрываем файл FileClose(filehandle); } else { Print("Ошибка в FileOpen. Код ошибки =",GetLastError()); } } else { //PrintFormat("Ошибка загрузки '%s', код %d",url,res); } } }

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
YuraZ_Book_All_PriceCH индикатор для биржи:
Многофункциональный индикатор для биржи. В описании ниже понятно. Для полноценного функционирования, необходимо предварительно запустить скрипт чтения суммы дивидендов с сайта https://www.dohod.ru страница отвечает за каждый отдельный инструмент например для SBERP https://www.dohod.ru/ik/analytics/dividend/sberp скрипт опубликован ниже.
Автор: Yuriy Zaytsev