Библиотеки: EcLib

 

EcLib:

Библиотека EcLib для языка MQL4 предназначена для работы с экономическим календарем.

Автор: Sergei789

 
шедевральненько
 
Очень красиво!Спасибо!
 

Metatrader 4

билд 970

 появилась ошибка

мой код, одна строка, обновляю базу :

 int z=EcUpdate(Source);

 в журнале ошибка

 fileupdate AUDUSD,H1: array out of range in 'EcLib.mq4' (244,15)

 по указанным координатам в файле идет код:

    //читаем words

   ArrayFree(words_array);
   words_count  =  1;
   handle_READ    =  FileOpen("ec\\DB\\words.csv", FILE_COMMON|FILE_READ|FILE_TXT, 0);
   while(!FileIsEnding(handle_READ))
      {
      ArrayResize(words_array, words_count + 1, 100);
      words_array[words_count]  =  StringTrimRight(FileReadString(handle_READ));
      words_count++;
      }
   FileClose(handle_READ);
   words_array[0] = NULL;  //ОТЛАДКА    -- вот именно тут появляется ошибка

 закомментировал последнюю строку и процесс пошел.

 

Вторая функция:

/*===============================================================================================
   внешняя;
   выводит базу данных FileName(.dat) в файл FileName(.csv), разделитель ';'
   */
void dat2txt

 ошибка в пути к базе данных:

   //запись бд в текстовом виде

   //первоисточник путь к базе данных
   //handle_READ       =  FileOpen("ec\\" + FileName + ".dat", FILE_COMMON|FILE_READ|FILE_BIN);

   //исправление 
   handle_READ       =  FileOpen("ec\\DB\\" + FileName + ".dat", FILE_COMMON|FILE_READ|FILE_BIN);
 

небольшое замечание,

 

в справке  к коду указан сайт, с которого рекомендуется качать архив котировок,

наткнулся на такую особенность:

-если скачать с сайта страницу в формате "только HTML" то сохраняются не все даты, а только 2016 год, хотя сама страница отображает нужные данные

-если качаем "веб страницу полностью"- то все даты на месте.

 
pr0gre5:

небольшое замечание,

 

в справке  к коду указан сайт, с которого рекомендуется качать архив котировок,

наткнулся на такую особенность:

-если скачать с сайта страницу в формате "только HTML" то сохраняются не все даты, а только 2016 год, хотя сама страница отображает нужные данные

-если качаем "веб страницу полностью"- то все даты на месте.

Привет. Спасибо за комментарии

Браузер по умолчанию предлагает скачать страницу целиком, я так и делал. Но в нужную папку перекладывал только html страничку, папка была не нужна

Видимо браузер неправильно скачивает html страницу, если указать "только HTML", посему так делать не стоит

 

Что касается кода - давно в него не лазил, обязательно перепроверю

Единственное, если в комментарии стоит //ОТЛАДКА - значит, данный фрагмент вызвал у меня определенные трудности и, возможно, я забыл или не сумел до конца правильно оформить код

В любом случае на это стоиит обратить внимание 

 
pr0gre5:

Вторая функция:

 ошибка в пути к базе данных:

насколько помню - это не ошибка :) на данном этапе в библиотеке под разные источники (в связи с тем, что они ну очень сильно отличаются) были сделаны разные каталоги - для основного \DB, для Яхо \DB_YAHOO и т.д. Работает только основной пока

Поэтому, чтобы выводить текстовые файлы из разных баз предполагается, что FileName указывается вместе с каталогом 

 

Здравствуйте! 

Оригинал вопросов - на форуме, где Вы начинали эту библиотку писать, но вдруг тут быстрее увидите... :)

1. Для тестирования на истории достатоно функций EcUpdate (по поводу EcUpdate также см. вопрос 4) и EcNewsCount (если только "было/не было" хочу проверить), верно?

2. Функция FetchWeek только текущую неделю подкачивает, верно? Т.е. если вот прям щас начать тестировать, то придется подкачивать данные вручную, начиная с момента, когда Вы последний раз базу обновляли?

3. Не очень понятно, для чего используется GMT2serverShiftMin. Если я правильно понял, время в БД у Вас по Гринвичу, и вы предлагаете самим учитывать свой часовой пояс при обработке данных. Опять же, если я праильно понял, GMT2serverShiftMin используется только в функции dat2txt, которая используется в скрипте weekupdate (который нужен только для периодической подгрузки данных в БД).... если это так, то в Вашей БД до определенной даты будут данные со временем по Гринвичу, а после этой даты - данные с тем временем, которое зададут... если это так, то как-то...неконсистентненько?

4. Код EcUpdate не анализировал, поэтому вопрос: я правильно понимаю, что для обновления БД недостаточно просто вызвать EcUpdate, а нужно запустить ecexpert? Т.е., вроде как не сама EcUpdate пишет в БД, а dat2txt, вызываемаея в этом советнике? ... правда, я запутался между ecexpert и weekupdate... я правильно понял, что первый (с EcUpdate и dat2txt)  - для подкачки в БД истории (скажем, за прошлую неделю), а второй (с FetchWeek и dat2txt), - для подкачки текущей недели?

...или обновить БД с помощью ecexpert не получится, если своевременно каждую неделю не запускал weekupdate? Вроде, не так, но вдруг...

5. Можете (не очень детально, а кратко, но конкретно) указать последовательность запуска экспертов (и функций из библиотеки) для работы с тестером и, отдельно, для боевой работы?

Как я понимаю:

Тестер:

Запускаем ecexpert (предварительно установив GMT2serverShiftMin в 0 и выбрав в [EcExpert] даты за диапазон тестирования).

Запускаем свой советник, используюя функции из библиотеки (в моем случае, - только EcNewsCount)

"Боевое":

В начале недели запускаем скрипт weekupdate.

Потом - свой советник (с использованием функций из библиотеки)

 ... Правильно?

 

ИМХО база данных нужна только для тестирования. На боевом терминале требуется как можно быстрее получить фактическое значение показателя новости в момент выхода, что можно сделать только обратившись напрямую к сайту. И база будет только тормозить.

 

Огромное спасибище!

На текущий момент работает, сайт с календарем тоже жив.

Причина обращения: