Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Automated-Trading
Админ
108082
Automated-Trading  

EcLib:

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

Автор: Sergei789

Maxim Dmitrievsky
20402
Maxim Dmitrievsky  
шедевральненько
Nikolay Gaylis
5569
Nikolay Gaylis  
Очень красиво!Спасибо!
pr0gre5
73
pr0gre5  

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;  //ОТЛАДКА    -- вот именно тут появляется ошибка

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

pr0gre5
73
pr0gre5  

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

/*===============================================================================================
   внешняя;
   выводит базу данных 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);
pr0gre5
73
pr0gre5  

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

 

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

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

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

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

Sergei789
279
Sergei789  
pr0gre5:

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

 

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

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

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

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

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

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

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

 

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

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

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

Sergei789
279
Sergei789  
pr0gre5:

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

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

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

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

Александр Шишлов
13
Александр Шишлов  

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

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

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.

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

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

Ivan Titov
277
Ivan Titov  

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий