English
preview
Знакомство с языком MQL5 (Часть 39): Руководство для начинающих по работе с файлами в MQL5 (I)

Знакомство с языком MQL5 (Часть 39): Руководство для начинающих по работе с файлами в MQL5 (I)

MetaTrader 5Эксперты |
58 0
Israel Pelumi Abioye
Israel Pelumi Abioye

Введение

И снова приветствуем вас в Части 39 серии "Знакомство с языком MQL5"! В этой части мы сосредоточимся на работе с файлами в языке MQL5 и на том, как эффективно управлять ими в своих программах. Файлы играют важную роль во многих практических торговых приложениях. Их можно использовать для хранения рыночных данных, сохранения значений индикаторов, ведения журнала торговой активности, записи ошибок или хранения исторической информации, которая должна сохраняться даже после перезапуска MetaTrader. Эта статья также ориентирована на начинающих. Примеры кода разбиты на простые и понятные части, а каждый шаг подробно объяснен. При необходимости используются понятные начинающим аналогии, связывающие технические понятия с реальными ситуациями.

В этой статье мы рассмотрим, как MQL5 работает с файлами, где они хранятся на компьютере, а также как правильно открывать, читать, записывать и закрывать их. Мы также рассмотрим практические сценарии использования, включая анализ данных, ведение журнала стратегий, хранение конфигурации и обмен данными между различными программами MQL5. Как и в других статьях этой серии, здесь используется проектный подход. Вместо того чтобы изучать работу с файлами отдельно, мы сразу применим ее в реальном проекте. В этой статье мы напишем скрипт на языке MQL5, который будет выполнять роль базового торгового журнала. При запуске скрипт автоматически создаст файл и запишет в него данные истории счета, включая тикет сделки, символ, тип ордера, размер лота, время открытия, цену открытия, стоп-лосс, тейк-профит, время закрытия, цену закрытия, прибыль в долларах и результат сделки.

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

Figure 1. Trading Journal

Проект будет разделен на две части. Вместо того чтобы вручную создавать файл в коде, в этой статье вы научитесь использовать функцию FileSelectDialog, чтобы создавать файл прямо из MetaTrader 5. После этого мы разберем, как открыть выбранный файл, добавить в него данные и правильно закрыть его после завершения работы. Цель этого первого раздела – дать вам прочную основу и помочь понять базовый порядок работы с файлами в MQL5.

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


Использование FileSelectDialog для создания и выбора файлов в MQL5

Первое условие работы с файлом в MQL5 – наличие самого файла. Например, программа должна точно знать, в какой файл следует записывать данные вашего счета, если вы хотите дублировать и хранить их в торговом журнале. Один из простых способов – жестко задать имя файла прямо в программе. Хотя в некоторых случаях это работает, такой подход слишком ограничен и негибок, особенно для реальных инструментов, предназначенных для совместного использования или повторного применения. Представьте, что пользователь должен сам выбрать место хранения журнала или что вам нужно каждый раз выбирать другой файл. Когда скрипт или советник используется на нескольких машинах, счетах или в разных средах, это становится еще важнее. В таких обстоятельствах уже не лучшая идея жестко задавать имя файла в коде.

В такой ситуации эта функция оказывается особенно полезной. С помощью этой функции MetaTrader 5 может спросить у пользователя, с каким файлом он хочет работать, вместо того чтобы делать предположения или жестко задавать путь к файлу. Когда запускается советник или скрипт, на экране появляется знакомое окно выбора файла. В этом окне можно просматривать уже существующие файлы, выбрать один из них или даже ввести новое имя файла. Одними из главных преимуществ этого подхода являются гибкость и удобство. Вы можете выбрать существующий файл торгового журнала и продолжить добавлять в него новую информацию. Если такого файла еще нет, достаточно ввести новое имя, и MetaTrader создаст его за вас. Это избавляет от необходимости вручную создавать файлы и решать проблемы с именованием и расположением.

Еще одно существенное преимущество – удобство для пользователя. При использовании FileSelectDialog ваша программа ведет себя скорее как обычное настольное приложение. Пользователь сразу видит местоположение файла, его имя и то, что он будет использоваться для хранения данных. Это снижает количество ошибок и делает работу с инструментом более удобной и безопасной, особенно для начинающих. Благодаря этому можно запустить скрипт торгового журнала, выбрать существующий файл журнала или создать новый и сразу начать в структурированном виде заносить информацию о счете, историю сделок и изменения. Такой подход идеально подходит для создания надежных и удобных инструментов MQL5, поскольку обеспечивает полный контроль над работой с файлами и при этом остается простым и понятным.

Пример:
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string arrays_filename[];
   string default_filename = "Trading_Journal.csv";

   int result = FileSelectDialog("Select a File", NULL,"CSV files|*.csv", FSD_WRITE_FILE,arrays_filename,default_filename);

   string filename;
   if(result == 0)
     {

      Print("No file selected");

     }

   else
      if(result > 0)
        {

         Print("The trading journal will be saved in ",arrays_filename[0]);

         filename = arrays_filename[0];

        }

      else
        {

         Print(GetLastError());

        }
  }

Вывод:

Figure 2. FileSelectDialog

Пояснение:

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

Вторая переменная представляет резервное или начальное имя файла. Ее задача – задать имя файла по умолчанию, которое будет использоваться или предлагаться при запуске программы либо при открытии окна выбора файла. Трейдеру больше не нужно каждый раз думать, какое имя вводить, что улучшает пользовательский опыт.  Если принять это имя по умолчанию, программа уже будет знать, какой файл использовать. Если нового файла еще не существует, его можно автоматически создать с этим именем. По сути, это предустановленный вариант, который ускоряет работу и снижает вероятность ошибок, например, при вводе неверного имени файла.

Эта строка сохраняет результат действия пользователя и открывает окно выбора файла в MetaTrader 5. Это значение показывает программе, было ли диалоговое окно успешно завершено, то есть создал ли пользователь файл или выбрал существующий вместо того, чтобы просто закрыть окно. Если результат положительный, программа может безопасно продолжить работу с выбранным файлом. Нулевой или отрицательный результат означает, что файл не был выбран. Первый аргумент направляет пользователя и делает интерфейс более цельным и аккуратным, задавая заголовок, который отображается в верхней части диалогового окна.

Figure 3. Label

Второй параметр задает папку, которая будет изначально открыта в окне выбора файла. Когда этому параметру присваивается значение NULL, MetaTrader получает указание не задавать никакой пользовательский каталог в качестве начального. Вместо этого платформа открывает диалоговое окно в каталоге MQL5\Files, который используется по умолчанию для работы с файлами.  Такое поведение полезно, поскольку оно сохраняет файловые операции в рамках стандартов файловой системы MetaTrader и гарантирует совместимость между разными системами. Поскольку пользователи не ограничены жестко заданным путем к папке, это также повышает мобильность и удобство работы.

Третий параметр управляет фильтрацией файлов, то есть определяет, какие типы файлов можно видеть и выбирать в диалоговом окне. Две части этого формата разделяются вертикальной чертой, а сам формат имеет простую структуру. Первая часть – это метка, которую пользователь видит в диалоговом окне, а вторая – это фактический шаблон файла, который разрешено отображать MetaTrader.

В записи "CSV files|*.csv" пользователю показывается понятная метка "CSV files":

Figure 4. Description

Благодаря этому пользователь понимает, с какими файлами работает. Часть после вертикальной черты, *.csv, задает правило, по которому MetaTrader показывает только файлы с расширением CSV. Любой файл, который не соответствует этому шаблону, будет скрыт, поэтому пользователь не сможет случайно выбрать неподдерживаемый тип файла. Этот способ фильтрации можно также настраивать для разных типов файлов. Например, фильтр лог-файлов может ограничить список файлами .log, а фильтр текстовых файлов будет показывать только файлы .txt. Если включить в один фильтр несколько типов файлов, пользователь сможет выбирать среди разных поддерживаемых форматов. Это упрощает работу и помогает гарантировать, что программа будет открывать только те файлы, которые она умеет распознавать.

Четвертый аргумент определяет, что пользователь может делать в окне, и тем самым управляет поведением диалогового окна выбора файлов. В режиме FSD_WRITE_FILE пользователь в диалоговом окне не ограничен выбором только существующих файлов. Кроме того, пользователь может ввести имя нового файла, которого еще не существует, и MetaTrader сразу создаст такой файл. Это особенно полезно для торговых дневников: трейдер может либо обновить существующий дневник, либо начать новый, не подготавливая файл заранее.

MQL5 также позволяет задавать более сложное поведение, комбинируя несколько параметров диалогового окна. Например, один из режимов позволяет одновременно выбирать несколько файлов. Когда нужно разрешить сразу несколько вариантов поведения, эти параметры можно объединять с помощью символа вертикальной черты. Это дает MetaTrader команду одновременно включить несколько возможностей, включая создание файлов и выбор нескольких файлов. В зависимости от того, насколько простой или сложной должна быть логика работы с файлами, такая архитектура делает диалоговое окно выбора файла очень гибким и легко адаптируемым к разным сценариям использования.

Пятый параметр служит для хранения результата процедуры выбора файла: это может быть имя нового файла, введенное в диалоговом окне, или имя существующего файла, выбранного пользователем. Как только пользователь подтверждает свой выбор, эта переменная получает имена файлов непосредственно из диалогового окна, что позволяет затем читать данные, добавлять новые записи или записывать новую информацию. Поскольку при включенном выборе нескольких файлов диалоговое окно может возвращать сразу несколько имен, здесь используется массив, а не одно значение. Использование массива гарантирует совместимость со случаями, когда пользователь выбирает несколько файлов одновременно, даже если в текущем проекте используется только один файл. Благодаря такой архитектуре система становится более гибкой, и при этом все выбранные имена файлов будут записаны корректно.

Последний параметр задает имя файла по умолчанию, которое отображается в диалоговом окне:

Figure 5. Default name

Это экономит время и служит для пользователя полезной подсказкой. Если пользователь просто подтверждает это имя без изменений, оно используется автоматически. Если файла с таким именем еще не существует, система создает его, что упрощает работу и помогает избежать ошибок при ручном вводе. Затем программа обрабатывает результат процедуры выбора файла. Если пользователь отменяет действие, выводится сообщение о том, что файл не был выбран. Если файл выбран, программа сохраняет его имя для последующего использования и выводит его расположение. Перехватывая и отображая любые неожиданные ошибки, программа может надежно обрабатывать все возможные результаты диалога выбора файла.


Создание файлов в MQL5

В предыдущей главе мы рассмотрели функцию FileSelectDialog, которая позволяет пользователю выбирать уже существующие файлы или вводить имя и расположение нового файла. Но сама по себе функция FileSelectDialog фактически не создает файл. Ее задача ограничивается получением ввода от пользователя и выбором имени и расположения файла. В этой главе рассматривается функция FileOpen и объясняется, как она подготавливает файл к использованию в программе MQL5. Когда имя и расположение файла выбраны через FileSelectDialog, функция FileOpen либо создает новый файл, либо открывает существующий. Поскольку этот этап связывает программу с файлом и позволяет безопасно читать и записывать данные, он имеет решающее значение.

Сочетание FileSelectDialog и FileOpen дает нам контроль и гибкость. Пользователь может выбрать имя файла и место его хранения, а программа позаботится о том, чтобы файл был корректно создан и подготовлен к работе. Этот метод делает работу с файлами в MQL5 более надежной и удобной для пользователя, особенно в практических задачах, таких как экспорт данных счета или запись торговой активности.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string arrays_filename[];
   string default_filename = "Trading_Journal.csv";

   int result = FileSelectDialog("Select a File", NULL,"CSV files|*.csv", FSD_WRITE_FILE,arrays_filename,default_filename);

   string filename;
   if(result == 0)
     {

      Print("No file selected");

     }

   else
      if(result > 0)
        {

         Print("The trading journal will be saved in ",arrays_filename[0]);

         filename = arrays_filename[0];

        }

      else
        {

         Print(GetLastError());

        }

   int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_ANSI, ',');

   if(handle == INVALID_HANDLE)
     {

      Print("Error opening file for writing. Error code: ", + GetLastError());

     }

   else
      if(handle != INVALID_HANDLE)
        {

         Print("File Sucessfully Opened");
         FileClose(handle);

        }
  }

Пояснение:

В MQL5 функция FileOpen предоставляет программе доступ к файлу, чтобы можно было записывать в него данные или читать их из него. Если введенного имени файла еще не существует, FileOpen сразу создаст файл с именем, выбранным или введенным через FileSelectDialog. Если файл уже существует, функция просто откроет его для использования. Поскольку все это происходит в фоновом режиме, файл не будет открываться прямо на экране. Поэтому не следует обращаться к файлу вручную, поскольку из-за этого FileOpen может завершиться ошибкой.

Первый параметр FileOpen – это имя файла, которое указывает MQL5, какой файл нужно открыть или создать. Обычно это имя, которое вы ранее выбрали с помощью FileSelectDialog. Второй параметр задает режим открытия файла. В данном примере FILE_WRITE позволяет программе записывать данные в файл. Параметр FILE_CSV сообщает MQL5, что файл нужно обрабатывать как файл значений, разделенных запятыми, что особенно полезно для структурированных данных, таких как торговый журнал. Параметр FILE_SHARE_READ позволяет другим программам читать файл, пока ваша программа записывает в него данные. Чтобы текст записывался в стандартном и читаемом формате, параметр FILE_ANSI задает кодировку файла.

Третий параметр – разделитель, которым в данном случае является запятая. Это указывает MQL5, как отделять значения в файле друг от друга, что особенно важно для CSV-файлов, поскольку именно запятая разделяет столбцы данных. В совокупности эти параметры позволяют функции FileOpen подготовить файл к приему данных в нужном формате и при необходимости дать другим программам возможность безопасно читать его. Это служит основой для удобного отслеживания истории счета и ведения торгового журнала.

При вызове FileOpen возвращается хэндл файла, который служит уникальным идентификатором файла, с которым работает программа. Его можно представить как ключ или пропуск, который указывает MQL5, из какого файла читать или в какой файл записывать. Каждому открытому файлу присваивается свой хэндл, который затем используется во всех последующих операциях для доступа к нужному файлу. Благодаря этому программа может одновременно работать с несколькими файлами, не путая их. Важно убедиться, что попытка открыть файл завершилась успешно. Программа проверяет, не равен ли хэндл значению INVALID_HANDLE, которое указывает, что файл не удалось создать или открыть. Если это произошло, GetLastError возвращает код и выводит сообщение об ошибке, объясняющее причину. Причиной может быть то, что файл уже используется, недостаточно прав доступа или возникла другая проблема.

Во втором условии проверяется, что хэндл действителен. Оно проверяет, был ли файл успешно создан или открыт. Если да, программа выводит сообщение о том, что файл готов к записи. Ограничение действий с файлами только действительными хэндлами помогает предотвратить ошибки и гарантирует, что ваши данные будут в безопасности. Функция FileClose позволяет правильно закрывать файлы, открытые с помощью FileOpen. Какой именно файл будет закрыт, зависит от переданного хэндла. Чтобы все записанные данные были корректно сохранены и системные ресурсы освободились, файл нужно закрыть. Если оставить файл открытым, данные могут записаться не полностью, а другие программы или скрипты могут не иметь к нему доступа, пока MetaTrader не будет закрыт.

Аналогия:

FileOpen можно сравнить с тем, как программа получает личный шкафчик для хранения и извлечения данных. Если выбранного шкафчика еще нет, FileOpen сразу создаст его – примерно так же, как если бы вы выбрали новый шкафчик в школе. Если он уже есть, программа просто открывает его, чтобы получить доступ к содержимому. Вы не увидите, что шкафчик открыт, потому что все происходит в фоновом режиме. Поскольку шкафчик уже используется, не стоит одновременно обращаться к нему вручную, иначе программа может получить ошибку.

Использование первого аргумента FileOpen можно сравнить с тем, как вы пишете номер шкафчика на ярлыке. Он указывает программе, какой шкафчик нужно открыть или создать, обычно используя имя, ранее выбранное через FileSelectDialog. Правила использования шкафчика задаются вторым параметром. Например, FILE_ANSI гарантирует, что все хранится в стандартном и читаемом формате; FILE_WRITE позволяет добавлять новые предметы; FILE_CSV раскладывает их по отдельным отсекам для структурированного хранения; а FILE_SHARE_READ позволяет другим заглянуть в шкафчик, ничего в нем не перемещая.

Третий параметр – это разделитель в шкафчике, который можно представить как подписанные отсеки для разных видов вещей. В этом случае каждый элемент данных отделяется запятой, поэтому все можно аккуратно расположить по столбцам. Такая конфигурация особенно полезна для торгового журнала, потому что позволяет хранить историю счета, сделки и числовые значения в организованном и читаемом виде. Комбинируя эти параметры, FileOpen настраивает такое хранилище так, чтобы вы могли безопасно сохранять и извлекать торговые данные.

Наконец, хэндл, который возвращает FileOpen, можно сравнить с ключом от шкафчика. У каждого шкафчика есть свой ключ, и именно его программа использует во всех последующих операциях с файлом. После открытия шкафчика программа проверяет, работает ли этот ключ. Если ключ недействителен, программа выведет сообщение об ошибке с указанием причины, и шкафчик не удастся создать или открыть. Если ключ действителен, а шкафчик готов к использованию, программа сможет безопасно сохранять или читать данные без риска ошибок и конфликтов.

Строку FileClose (handle); можно сравнить с тем, как вы запираете шкафчик после того, как закончили складывать вещи или забирать их. В последний раз он запирается этим ключом (handle). После этого все ваши вещи надежно хранятся в шкафчике, а сам он при необходимости становится доступен для использования другими. Если забыть его запереть, другие студенты или программы могут потерять возможность получить к нему корректный доступ, а содержимое может сохраниться не полностью. Запирая шкафчик, вы можете быть уверены, что все внутри окончательно сохранено, а ключ больше не активен, пока вы снова его не откроете.


Запись данных в файлы в MQL5

Когда файл уже создан, следующим шагом будет открыть его с помощью FileOpen и записать в него данные. Напомним, что программа может записывать данные в файл, потому что при его открытии мы использовали флаг FILE_WRITE. Без этого разрешения сохранить какие-либо данные было бы нельзя, и файл можно было бы только читать. Запись в файл позволяет сохранять историю счета, данные о сделках и любую другую нужную информацию, благодаря чему торговый журнал становится действительно полезным.

Как и в предыдущих разделах, мы подробно разберем каждый этап и приведем простые объяснения и примеры, чтобы помочь вам понять, как работает запись в файлы в MQL5. При записи в файл первым делом следует добавить начальную информацию, которая будет служить заголовком торгового журнала. В первой строке записывается имя счета, а во второй – баланс счета. В третьей строке указывается логин счета. Затем добавляется время начала – оно показывает, с какого момента нужно копировать данные счета. После этого добавляется время окончания диапазона данных. Наконец, в следующей строке записывается время последнего обновления, то есть момент, когда программа в последний раз обновляла файл.

Записывая эти данные в начале файла, мы создаем структурную основу торгового журнала. Это гарантирует, что перед разбором конкретных сделок любая программа, обрабатывающая файл, или любой читатель впоследствии быстро поймут контекст данных.

Пример:

int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_ANSI, ',');
if(handle == INVALID_HANDLE)
  {

   Print("Error opening file for writing. Error code: ", + GetLastError());

  }

else
   if(handle != INVALID_HANDLE)
     {

      Print("File Sucessfully Opened");

      string account_name = AccountInfoString(ACCOUNT_NAME);
      double account_balance = AccountInfoDouble(ACCOUNT_BALANCE);
      long account_login = (long)AccountInfoInteger(ACCOUNT_LOGIN);

      FileWrite(handle, "Account Name: " + account_name);
      FileWrite(handle, "Account Balnce: " + DoubleToString(account_balance));
      FileWrite(handle, "Account Login: " + IntegerToString(account_login));
      FileWrite(handle, "Start Time: ", start_time);
      FileWrite(handle, "End Time: ", end_time);
      FileWrite(handle, "Last Update: ", TimeCurrent());

      FileClose(handle);
     }

Вывод:

Figure 6. Writing in File

Пояснение:

Первая строка сохраняет имя счета в виде текстовой строки после его получения из MetaTrader 5. Обычно это имя, под которым вы зарегистрированы у брокера, и именно его функция запрашивает у платформы. Это позволяет программе в любой момент определять, какой торговый счет сейчас активен. Во второй строке извлекается и сохраняется баланс счета в виде значения типа double. Это общая сумма средств, доступная на счете в данный момент. Использование типа double обеспечивает точное хранение дробных значений, что особенно важно при вычислениях, связанных со сделками, прибылью и управлением рисками.

В третьей строке извлекается логин счета – специальный идентификационный номер этого счета. Хотя он извлекается как целое число, мы преобразуем его и храним как значение типа long, чтобы без потери точности работать с большими числами. При хранении данных в торговом журнале или при любом автоматическом отслеживании логин счета помогает точно определить нужный счет. Создается переменная с именем start_time. Входные переменные позволяют пользователю менять значения прямо из настроек, не изменяя саму программу. Эта переменная содержит конкретные дату и время – в данном случае полночь 1 января 2026 года. Она указывает программе, с какого момента начинать копирование или анализ истории счета.

Затем определяется end_time – еще одна входная переменная типа datetime. Она устанавливается на полночь 31 января 2026 года. Эта переменная указывает конечный момент, до которого программа будет включать историю счета. Вместе start_time и end_time задают временной интервал. Программа будет обрабатывать только те данные счета, которые попадают в этот диапазон. Поскольку трейдер может менять этот период без изменения кода, использование входных переменных делает советник или скрипт более гибким.

В первой строке в файл записывается имя счета. Эта строка объединяет реальное имя торгового счета с меткой "Account Name:.". Это гарантирует, что в первой строке журнала будет четко указан счет, к которому относится файл. Если журнал нужно передавать другим или работать сразу с несколькими счетами, включение имени счета особенно полезно. Во второй строке в файл записывается баланс счета. Поскольку баланс является числовым значением с десятичной частью, перед записью его нужно преобразовать в текстовый формат. Так программа гарантирует, что значение будет точно сохранено в файле и позже останется видимым и читаемым. Эта строка помогает отслеживать изменения баланса счета со временем, поскольку показывает сумму средств на счете в момент создания журнала.

В третьей строке записывается логин счета. Логин – это целочисленное значение, которое однозначно идентифицирует счет. Преобразовав его в текст, можно записать его в файл в читаемом виде. Включение логина в журнал гарантирует, что данные будут точно связаны с нужным счетом, и помогает отличать один счет от другого. В четвертой и пятой строках записываются время начала и время окончания для данных, которые будут перенесены в журнал. Программа должна начинать запись прошлых сделок со времени начала, а завершать период сбора данных по наступлении времени окончания. Когда эти значения времени записаны в файл, становится ясно, какой период охватывает журнал. Это гарантирует, что читателю будет понятен охватываемый период данных.

В последней строке записывается время последнего обновления журнала. Для этого программа получает текущее серверное время и добавляет его в файл, чтобы показать точный момент последнего обновления. Если скрипт выполняется многократно, включать эти данные особенно важно, поскольку так можно отслеживать последние изменения или добавления в торговом журнале. Все эти строки вместе образуют заголовок торгового журнала и дают важные сведения о счете, а также контекст для последующих исторических данных. Благодаря такому подходу журнал получается хорошо организованным, читаемым и готовым к тому, чтобы ниже добавлялись новые данные.


Заключение

Из этой статьи вы узнали, как использовать функции FileSelectDialog и FileOpen в MQL5 для создания файлов и работы с ними. Вы узнали, как выбрать файл или создать новый, безопасно открыть файл с нужными разрешениями и записать в него важные данные счета, такие как имя счета, баланс, логин, период сбора данных и время последнего обновления. Эта статья служит введением в работу с файлами в MQL5 и закладывает основу для создания работающего, хорошо организованного и удобного торгового журнала. В следующей статье вы экспортируете в журнал торговую историю за указанный период.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/21160

Прикрепленные файлы |
Искусство работы с логами (Часть 9): Применяем паттерн Builder и настраиваем конфигурации по умолчанию Искусство работы с логами (Часть 9): Применяем паттерн Builder и настраиваем конфигурации по умолчанию
В этой статье демонстрируется, как кардинально упростить использование библиотеки Logify с помощью паттерна «Строитель» и автоматических конфигураций по умолчанию. Рассматриваются структура специализированных строителей, приемы работы с ними при помощи интеллектуальной подсказки (автодополнения), а также способы обеспечения функционального логирования даже без ручной настройки. Кроме того, статья описывает доработки для сборки MetaTrader 5 5100.
Возможности Мастера MQL5, которые вам нужно знать (Часть 71): Использование паттернов MACD и OBV Возможности Мастера MQL5, которые вам нужно знать (Часть 71): Использование паттернов MACD и OBV
Осциллятор схождения-расхождения скользящих средних (Moving-Average-Convergence-Divergence, MACD) и индикатор балансового объема (On-Balance-Volume, OBV) - еще одна пара индикаторов, которые можно использовать совместно в советнике MQL5. Как это принято в данной серии статей, данная комбинация индикаторов дополняет друг друга: MACD подтверждает тренды, а OBV проверяет объем. Как обычно, мы используем Мастер MQL5 для построения паттернов и тестирования потенциала, который может иметь эта пара индикаторов.
Моделирование рынка (Часть 22): Первые шаги на SQL (V) Моделирование рынка (Часть 22): Первые шаги на SQL (V)
Прежде, чем вы сдадитесь и решите отказаться от изучения SQL, позвольте мне напомнить вам, уважаемые читатели, что здесь мы всё ещё используем только самые базовые элементы. Мы ещё не рассмотрели некоторые возможности SQL. Как только вы их усвоите, вы увидите, что SQL гораздо практичнее, чем кажется. Хотя, скорее всего, мы в конечном итоге изменим направление того, что мы создаем, потому, что процесс создания является динамичным. Мы покажем немного больше о создании разных вещей в SQL, ведь это по настоящему важно и нужно вам. Просто думать, что вы более способны, чем целое сообщество программистов и разработчиков, приведет только к потере времени и возможностей. Не переживайте, потому что дальше будет ещё интереснее.
Знакомство с языком MQL5 (Часть 38): Освоение API и функции WebRequest в языке MQL5 (XII) Знакомство с языком MQL5 (Часть 38): Освоение API и функции WebRequest в языке MQL5 (XII)
Создайте практический мост между MetaTrader 5 и Binance: получайте 30-минутные свечи с помощью WebRequest, извлекайте из JSON значения OHLC и времени и подтверждайте бычий паттерн поглощения, используя только полностью закрытые свечи. Затем соберите строку запроса, вычислите подпись HMAC-SHA256, добавьте X-MBX-APIKEY и отправьте аутентифицированные ордера. Вы получите четкий сквозной рабочий процесс советника – от получения данных до исполнения ордера.