Индикаторы: YuraZ_Book_All_PriceCH индикатор для биржи

 

YuraZ_Book_All_PriceCH индикатор для биржи:

Многофункциональный индикатор для биржи. В описании ниже понятно. Для полноценного функционирования, необходимо предварительно запустить скрипт чтения суммы дивидендов с сайта https://www.dohod.ru страница отвечает за каждый отдельный инструмент например для SBERP https://www.dohod.ru/ik/analytics/dividend/sberp скрипт опубликован ниже.

YuraZ_Book_All_PriceCH индикатор для биржи

Автор: Yuriy Zaytsev

 

1.01 поправил, теперь при выставлении флага "Чарты открывать или нет" в положение "открыть если нет" , алгоритм не вызывает повторное открытие чартов.

Будут еще версии.

 
Могу смотреть на график с ещё более умным видом, спасибо
 
Ошибки , не компилируется
 
__zeus__ #:
Ошибки , не компилируется

Автора кода не дождетесь, его давно нет на связи.

 
Volodymyr Zubov #:

Автора кода не дождетесь, его давно нет на связи.

есть он тут

extern нужно убрать


 

Похоже нужно подправить код под  новые версии МТ.

Код отлаживал на боевом  счёте брокера открытие, сейчас данного брокера уже нет.  Попробую отладить на счёте брокера 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);
        }
     }
  }