Советники: Примеры из книги "Нейросети в алготрейдинге на MQL5" - страница 2

 

Даже если явно указать путь к файлу модели, бот его все равно не видит))))

 

Добрый день,

Пытаюсь запустить первый скрипт из книги, который формирует csv файл.

Называется initial_data.mq5

При запуске скрипта на первом шаге: 

if(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||

      CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||

      CopyHigh(_Symbol, PERIOD_M5, Start, End, high) <= 0 || 

      CopyLow(_Symbol, PERIOD_M5, Start, End, low) <= 0)

      return;

CopyClose всегда равен -1

и скрипт вырубается, повторные запуски не помогают и как я прочитал в комментариях

это нормальная ситуация и значит, что нет данных с сервера.

Однако я не до конца понял как в этом скрипте прописан путь к файлам данных.

В документации MQL5 написано:


Например, данные по символу EURUSD  с торгового сервера MetaQuotes-Demo будут находиться в папке каталог_терминала\bases\MetaQuotes-Demo\history\EURUSD\.


И у меня на там действительно есть файлы с разрешением .hcc и подкаталог \cache с файлами типа H4.hc


Но в скрипте  initial_data.mq5,только одно место, где прописан путь

PrintFormat("Correlation coefficients saved to file %s\\Files\\%s",

               TerminalInfoString(TERMINAL_DATA_PATH), FileName);


Я вывел TERMINAL_DATA_PATH

2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Users\HP\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


Что делать, чтобы правильно прописать путь к этим файлам или он автоматически должен их по логике MQL5 подцеплять из каталога терминала?

Как все таки скачать данные в csv файл? 


 
bobozel1 #:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Aleksey Vyazmikin, 2024.06.18 06:28

#define FileName  "correlation.csv"
//+------------------------------------------------------------------+
//| Внешние параметры                                                |
//+------------------------------------------------------------------+
input datetime Start = D'2015.01.01 00:00:00';  // Начало периода
input datetime End = D'2020.12.31 23:59:00';    // Конец периода
//--- Открываем файл для записи данных
   int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8);
   if(handle == INVALID_HANDLE)
     {
      PrintFormat("Error of open file %s: %d", FileName, GetLastError());
      return;
     }
FileOpen

Параметры

open_flags

[in] комбинация флагов, определяющая режим работы с файлом. Флаги определены следующим образом:
FILE_READ файл открывается для чтения
FILE_WRITE файл открывается для записи
FILE_BIN двоичный режим чтения-записи (без преобразования из строки и в строку)
FILE_CSV файл типа csv (все записанные элементы преобразуются к строкам соответствующего типа, unicode или ansi, и разделяются разделителем)
FILE_TXT простой текстовый файл (тот же csv, однако разделитель не принимается во внимание)
FILE_ANSI строки типа ANSI (однобайтовые символы)
FILE_UNICODE строки типа UNICODE (двухбайтовые символы)
FILE_SHARE_READ совместный доступ по чтению со стороны нескольких программ
FILE_SHARE_WRITE совместный доступ по записи со стороны нескольких программ
FILE_COMMON расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files.

FileOpen

Примечание

Из соображений безопасности в языке MQL5 строго контролируется работа с файлами. Файлы, с которыми проводятся файловые операции средствами языка MQL5, не могут находиться за пределами файловой "песочницы".

Если файл требуется прочитать в определенной кодировке (указан параметр codepage со значением кодовой страницы), то необходимо обязательно выставить флаг FILE_ANSI. Без указания флага FILE_ANSI чтение текстового файла будет происходить в Юникоде без какого-либо преобразования.

Файл открывается в папке клиентского терминала в подпапке MQL5\Files (или каталог_агента_тестирования\MQL5\Files в случае тестирования). Если среди флагов указан FILE_COMMON, то файл открывается в общей папке всех клиентских терминалов \Terminal\Common\Files.

Можно открывать "именованные каналы" по следующим правилам:

  • Имя канала - строка, которая должна иметь вид: "\\servername\pipe\pipename", где servername - имя сервера в сети, а pipename - имя канала. Если каналы используются на одном и том же компьютере, имя сервера может быть опущено, но вместо него нужно поставить точку: "\\.\pipe\pipename". Клиент, который пытается соединиться с каналом, должен знать его имя.
  • Необходимо вызывать FileFlush() и FileSeek() на начало файла между последовательными операциями чтения из канала и записи в канал.

В приведенных строках используется специальный символ обратная косая черта '\', поэтому при написании имени в MQL5 программе '\' необходимо удваивать, то есть вышеприведенный пример написать в коде как  "\\\\servername\\pipe\\pipename".

Более подробно о работе с именованными каналами можно прочитать в статье "Связь с MetaTrader 5 через именованные каналы без применения DLL"


 
Aleksey Vyazmikin #

Честно говоря я ничего не понял из ответа, как будто робот писал. Я знаю куда пишется создаваемый файл, но он не создается.

У меня конкретный вопрос, как взять данные из файлов .hcc и .hc для записи в .csv?

Запуская скрипт initial_data.mq5 из книги в результате:

CopyClose всегда равен -1. Как исправить это?

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

Как правильно прописать путь к файлам данных?

В моем случае файлы данных находятся в папке каталог_терминала\bases\MetaQuotes-Demo\history\EURUSD\  внутри песочницы.

Я уже неделю бьюсь над этим, все перечитал, решения проблемы не нашел. Помогите пожалуйста. 

 
bobozel1 #:

Честно говоря я ничего не понял из ответа, как будто робот писал. Я знаю куда пишется создаваемый файл, но он не создается.

У меня конкретный вопрос, как взять данные из файлов .hcc и .hc для записи в .csv?

Запуская скрипт initial_data.mq5 из книги в результате:

CopyClose всегда равен -1. Как исправить это?

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

Как правильно прописать путь к файлам данных?

В моем случае файлы данных находятся в папке каталог_терминала\bases\MetaQuotes-Demo\history\EURUSD\  внутри песочницы.

Я уже неделю бьюсь над этим, все перечитал, решения проблемы не нашел. Помогите пожалуйста. 

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

Скрипт работает с теми данными, что на графике отражены.

Проверьте, есть ли на графике даты, за которые вы запрашиваете котировки.

 
Aleksey Vyazmikin #:

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

Скрипт работает с теми данными, что на графике отражены.

Проверьте, есть ли на графике даты, за которые вы запрашиваете котировки.

Поясните пожалуйста, что это значит.

В скрипте написан диапазон

input datetime Start = D'2015.01.01 00:00:00';  // Period beginning

input datetime End = D'2020.12.31 23:59:00';    // Period end

на M5 

Мне надо взять график EURUSD на M5, прокрутить мышкой до  2015.01.01 и за тем на нем запустить скрипт?

Или можно на MN ? И с новыми тиками он опять в начало съезжает?
 
bobozel1 #:

Поясните пожалуйста, что это значит.

В скрипте написан диапазон

input datetime Start = D'2015.01.01 00:00:00';  // Period beginning

input datetime End = D'2020.12.31 23:59:00';    // Period end

на M5 

Мне надо взять график EURUSD на M5, прокрутить мышкой до  2015.01.01 и за тем на нем запустить скрипт?

Или можно на MN ? И с новыми тиками он опять в начало съезжает?

Почитайте справку по терминалу. И вот ещё.

Узнаете, что есть настройка глубины истории через максимальное количество баров в окне. Для вступления в силу изменений нужно перезагружать терминал.

Таким образом, нужно установить максимальную глубину историю сразу для всех ТФ по наименьшему ТФ, что требуется для работы.

Понятно же, что 100 баров для дневок и 100 баров для минут дадут такую же глубину в барах, но не в датах.

Когда установите нужное значение или "Unlimited" и перезагрузите терминал, то если история имеется за нужный период, можно запустить скрипт и на месячном TF.


 
Aleksey Vyazmikin #:

Почитайте справку по терминалу. И вот ещё.

Узнаете, что есть настройка глубины истории через максимальное количество баров в окне. Для вступления в силу изменений нужно перезагружать терминал.

Таким образом, нужно установить максимальную глубину историю сразу для всех ТФ по наименьшему ТФ, что требуется для работы.

Понятно же, что 100 баров для дневок и 100 баров для минут дадут такую же глубину в барах, но не в датах.

Когда установите нужное значение или "Unlimited" и перезагрузите терминал, то если история имеется за нужный период, можно запустить скрипт и на месячном TF.


Спасибо! Все получилось.
 
bobozel1 #:
Спасибо! Все получилось.

Пожалуйста.

 
Самое неприятное не это. Самое неприятное, что после оптимизации параметров вы можете выигрывать только один год. Измените их еще на год, и они снова не будут работать. Это значит, что задумка автора неосуществима. Параметры могут сильно отличаться от года к году. Возможно, не существует такого набора параметров, который был бы прибыльным каждый год!