//+------------------------------------------------------------------+
//|                                                   sharkfx1.1.mq4 |
//|                                                   Ruslan Salimov |
//|                                          http://tradelikeapro.ru |
//+------------------------------------------------------------------+
#property copyright "Ruslan Salimov"
#property link      "http://tradelikeapro.ru"
#property version   "1.00"
#property strict


input int UpdatePeriod = 15;  // период обновления %

string Pairs[] = {"AUD/JPY", "AUD/USD", "EUR/JPY", "EUR/USD", "GBP/USD", "NZD/USD", "USD/CAD", "USD/CHF", "USD/JPY", "XAU/USD"}; //пары
int PairCount = 10;              //количество пар
int BuyPercent[10];              //массив для процента длинных позиций
int SellPercent[10];             //массив для процента коротких позиций
datetime LastDataRefresh = 0;    //переменная для хранения времени последнего обновления
int Timeout = 10000;             //Таймаут ожидания ответа от сервера



int OnInit()
{
      return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){}



void OnTick()
{
      int x = RefreshData();
      string Comm = "";
      for(int i = 0; i < PairCount; i++)
      {
         Comm += Pairs[i] + "   Buy: " + IntegerToString(BuyPercent[i],2) + " | Sell: " + IntegerToString(SellPercent[i],2) + "\n";
      } 
      Comm += "LastDataRefresh = " + TimeToString(LastDataRefresh);
      Comment(Comm);
     
      
      
}
//+------------------------------------------------------------------------------+
//|         Функция загрузки данных с сервера в массив
//+------------------------------------------------------------------------------+
bool DownloadData (char &result[])
{
      string resultHeaders;
      char post[];
      //ResetLastError(); 
      string SarkfxUrl = "http://sharkfx.in.ua/widgets/v3/cur-ratios?pairs=AUDJPY;AUDUSD;EURJPY;EURUSD;GBPUSD;NZDUSD;USDCAD;USDCHF;USDJPY;XAUUSD&style=style-style1&v=0.3422981608262453";
      
      if(WebRequest("GET", SarkfxUrl, NULL, NULL, Timeout, post, 0, result, resultHeaders) < 0)
      {
         Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());      
         MessageBox("Необходимо добавить адрес http://sharkfx.in.ua/widgets/v3/cur-ratios в список разрешенных URL во вкладке Главное меню->Сервис->Настройки, 'Советники'",
            "Ошибка",MB_ICONINFORMATION);
         return false;
      }
      else
         PrintFormat("Файл успешно загружен, Размер файла =%d байт.",ArraySize(result));
      return true;
}
//+-----------------------------------------------------------------------------------------+
//|      Функция обновления данных с сервера. 
//|   Возвращает 0 - не истек период обновления,
//|   1 - Обновление прошло успешно
//|   2 - Обновиться не удалось
//+-----------------------------------------------------------------------------------------+
int RefreshData()
{
      //static datetime LastDataRefresh = 0;
      if((TimeCurrent() - LastDataRefresh) < (UpdatePeriod*60))            //проверка времени последнего обновления
      {
         //Print("Период обновления не пройден");
         return 0;
      }
      char res[];
      if(DownloadData(res) == false)                                      //загрузка данных
      {
         Alert("Ошибка! Не могу загрузить данные!");
         return -1;
      }
      LastDataRefresh = TimeCurrent();
      string ResultString;
      //Comment(ResultString);
      ResultString = CharArrayToString(res,0,-1,CP_UTF8);                  //перевод массива char в string
      for(int i = 0; i < PairCount; i++)                                    //парсим страницу, вытягиваем данные для каждой пары в массив
      {
         BuyPercent[i] = GetBuyPercent(ResultString,Pairs[i]);
         SellPercent[i] = 100 - BuyPercent[i];                                //
      }
      return 1;
}
//+------------------------------------------------------------------------------+
//|         Функция поиска процента позиций Buy в тексте страницы,
//|      Принимает текст страницы и требуемую валютную пару
//|      Возвращает процент в виде int
//+------------------------------------------------------------------------------+
int GetBuyPercent(string html, string pair)
{
      string Buy = "";
      int pos = StringFind(html,pair,0);                                   //сначала ищем название интересующие ВП
      pos = StringFind(html, "class=\"ratio-content-left-cursor\"", pos);  //потом ищем нужный класс
      pos = StringFind(html, "%", pos);                                    //потом ищем знак процента
      Buy = StringSubstr(html,pos-2,2);                                    //нужные две циферки перед знаком
      return (StrToInteger(Buy));
}