Извлекать данные с веб-сайта в CSV и обновлять каждые пять минут.

Я разрабатываю программу на MQL4, для которой потребуется несколько фрагментов данных, извлеченных с определенной веб-страницы.

Как я могу выгружать это в файл .csv каждые 5 минут?

Я застрял на том, как я собираюсь это сделать.

Структура

  1. Некоторые фрагменты данных, выгруженные со страницы .html
  2. Подключить к .csv файлу
  3. Читает на MQL4

person user3438398    schedule 05.03.2015    source источник
comment
Вы можете прочитать whathaveyoutried.com и проявить некоторое уважение к сообществу StackOverflow, которое настоятельно рекомендует публиковать качественные вопросы вместе с MCVE (минимально-полный-проверяемый-пример code ), показывающий, что вы уже пробовали. Вы можете обновить свой пост, чтобы соответствовать этому минимально разумному уровню качества и показать свое желание уважать других участников StackOverflow. Это профессионалы, которые любят отвечать на хорошие вопросы по вопросам, связанным с MCVE. Наслаждайтесь тем, что являетесь участником StackOverflow, и поддержите этот сетевой этикет сообщества   -  person user3666197    schedule 06.03.2015


Ответы (2)


Поскольку ваш вопрос настолько общий (а не конкретная проблема кодирования), и он слишком широк. Я предложу обобщающий ответ, чтобы указать вам правильное направление. Вам нужно провести собственное исследование.

ЧАСТЬ 1. Запланируйте мероприятие

  • В вашем советнике в OnInit(); создайте таймер с помощью EventSetTimer(5*60).
  • Это вызовет событие события OnTimer(). 5*60 = 5 минут.
  • В этом событии OnTimer() вызовите программу загрузки (см. Часть 2)

ЧАСТЬ 2 – СКАЧАТЬ HTML

  • Вы можете добиться этого без использования сторонних библиотек DLL. Встроенная Windows Wininet.DLL имеет для этого подходящие API:

    import "wininet.dll" //Put a # in-front of import
        int InternetAttemptConnect (int x);
        int InternetOpenW(string sAgent, int lAccessType, 
                                string sProxyName = "", string sProxyBypass = "", 
                                int lFlags = 0);
        int InternetOpenUrlW(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    //Put a # in-front of import
    
  • Это должно помочь вам приступить к загрузке (проведите небольшое исследование самостоятельно).

  • Сначала нужно создать сеанс браузера с помощью OpenW, затем открыть URL-адрес с помощью OpenURLW, затем прочитать содержимое страницы с помощью API ReadFile; и, наконец, закройте сеанс с помощью CloseHandle.
  • Когда у вас есть HTML-код в строковой переменной в вашем коде MT4, все, что вам нужно, это изменить его так, как вы хотите.

ЧАСТЬ 3. Запись в файл .CSV

Чтобы выполнить операцию записи в файл, вы смотрите на функции FileOpen(), FileWriteString() и FileClose() MQL4.

ЧАСТЬ 4. Чтение файла .CSV

  • Чтобы прочитать файл CSV, это так же просто, как использовать файл FileReadString().
  • Вы можете разделить строку на CSV, используя функцию StringSplit().
person Joseph Lee    schedule 09.03.2015
comment
Похоже, хороший ответ. Однако обычно я рекомендую не добавлять метакомментарии в ответы - большинство людей, читающих это, не являются оригинальным плакатом, и они не хотят читать жалобы. У вас есть два варианта: вы можете добавить такой совет в качестве комментария к вопросу и / или вы можете проголосовать за закрытие как слишком широкое (я сделал это сейчас). Как вы уже поняли, несложные вопросы могут привести к хорошему ответу и даже не получению ответа, но, по крайней мере, это принесет пользу другим читателям! - person halfer; 10.05.2017

Краткая версия

  1. Да, возможно -- через независимый от MQL4 внешний процесс, подключенный через ZeroMQ к .ex4 из-за необходимости управления и синхронизации ( ZMQ имеет порты/оболочки для многих сред производственного уровня, поэтому готов к интеграции MQL4 с чем угодно
  2. Да, возможно -- Элементарно, дорогой Ватсон... ( ссылка № 1, при необходимости можно пропустить )
  3. Да, возможно — может быть доступно в межпроцессном режиме (ссылки №1 и №2).

Проверьте это и другие сообщения MQL4/ZeroMQ в стеке Переполнение

Еще один вывод MQL4 в режиме реального времени, который регистрируется удаленно и анимируется

person user3666197    schedule 05.03.2015