English Español Deutsch 日本語 Português
preview
Введение в MQL5 (Часть 7): Руководство для начинающих по созданию советников и использованию кода от ИИ в MQL5

Введение в MQL5 (Часть 7): Руководство для начинающих по созданию советников и использованию кода от ИИ в MQL5

MetaTrader 5Трейдинг | 3 октября 2024, 14:16
42 10
Israel Pelumi Abioye
Israel Pelumi Abioye

Введение

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

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

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

В этой статье мы рассмотрим следующие темы:

  • Совершенствуем навыки MQL5
  • Псевдокод
  • Генерация кодов на MQL5 с помощью ИИ

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




1. Совершенствуем навыки MQL5

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

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

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

Проект, над которым мы будем работать, подойдет новичкам и будет представлять собой оповещающий советник. Что примечательно, для этого проекта мы будем использовать предварительно записанное голосовое сообщение вместо стандартного звука из MQL5. Мы с вами создадим систему оповещений, которая позволит получать уведомления с помощью голосовых сообщений. Таким образом, создадим персонализированный подход к торговому процессу.

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

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


2. Псевдокод

2.1. Что такое псевдокод?

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

Аналогия

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

Как будет выглядеть псевдокод:

Первый шаг: ввод чисел

  • Просим пользователя ввести первое и второе числа.

Второй шаг: сложение чисел и вывод результата на печать

  • Складываем первое число со вторым и выводим результат.

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

Почему псевдокод важен?

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

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

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

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

2.2. Как написать псевдокод

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

Давайте взглянем на EA, над которым мы будем работать. К примеру, мы будем работать над советником для торговых оповещений, который позволит устанавливать напоминания на определенное время. Особенность этого проекта в том, что у вас будет возможность выбрать нужный звук при настройке напоминания. Для этого проекта псевдокод может быть таким:

Первый шаг — инициализация советника:

  • Определение и настройка необходимых переменных и параметров.

Второй шаг — настройка напоминаний:

  • Позволим пользователям вводить желаемое время срабатывания напоминания и выбирать нужный звук для каждого.
  • Сохраним время срабатывания напоминания и выбранные звуки в соответствующих переменных.

Третий шаг — мониторинг часового пояса торговли, который включает в себя:

  • Постоянное сравнение текущего времени с назначенным временем срабатывания.
  • Проигрывание звукового сигнала при наступлении времени срабатывания.

Четвертый шаг — включение звукового оповещения:

  • Уведомляем трейдера об установленном времени напоминания.
  • Воспроизведем выбранный звуковой файл для оповещения.

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


3. Генерация кодов на MQL5 с помощью ИИ

Процессы написания кода значительно продвинулись вперед благодаря развитию искусственного интеллекта (ИИ). Новый подход полностью меняет способ создания советников. Автоматизация генерации кода стала основным преимуществом программирования с использованием инструментов на базе искусственного интеллекта. Эти инструменты используют передовые алгоритмы для перевода высокоуровневых инструкций и псевдокода в исполняемый код (в том числе на MQL5) путем анализа входных данных. Искусственный интеллект сокращает сроки разработки за счет автоматизации повторяющихся задач и сокращения ручного труда.

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

3.1. Как генерировать правильные коды с ИИ

Вот пошаговый процесс:

3.1.1 Псевдокод советника

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

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

Первый шаг — инициализация советника:

  • Определите и настройте необходимые переменные и параметры.

На этом шаге возникают такие вопросы:

  • Какие переменные необходимы для функционирования советника?
  • Какие типы данных использовать для переменных?
  • Как определять значения по умолчанию для переменных? Есть ли какие-либо внешние зависимости или ресурсы, которые необходимо загрузить?

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

Второй шаг — настройка напоминаний:

  • Позволим пользователям вводить желаемое время срабатывания напоминания и выбирать нужный звук для каждого.
  • Сохраним время срабатывания напоминания и выбранные звуки в соответствующих переменных.

На этом шаге возникают такие вопросы:

  • В каком формате должно быть указано время срабатывания напоминания?
  • Как пользователи будут выбирать нужный звук?
  • Где будут храниться выбранные время и звуки напоминания?
  • Будет ли у пользователей возможность изменять или удалять существующие напоминания?

Третий шаг — мониторинг часового пояса торговли, который включает в себя:

  • Постоянное сравнение текущего времени с назначенным временем срабатывания.
  • Проигрывание звукового сигнала при наступлении времени срабатывания.

На этом шаге возникают такие вопросы:

  • Каким образом советник будет постоянно сравнивать текущее время с назначенным временем срабатывания?
  • Какие действия будут предприняты при наступлении времени срабатывания?
  • Как часто советник будет проверять время срабатывания?

Четвертый шаг — настройка напоминаний.

  • Четвертый шаг — включение звукового оповещения:
  • Уведомляем трейдера об установленном времени напоминания.
  • Воспроизведем выбранный звуковой файл для оповещения.

На этом шаге возникают такие вопросы:

  • Как добавить записанное голосовое сообщение в проект MQL5?
  • Как будет воспроизводиться выбранный звуковой файл для оповещения?

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

3.1.2. Генерация кода

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

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

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

Примечание: прежде чем задавать ИИ вопросы относительно вашего проекта, важно сначала предоставить подробное объяснение проекта. Такое введение служит основой для понимания контекста и целей проекта.

Чтобы продемонстрировать, как генерировать код с помощью ИИ, начнем с первого шага, используя один из вопросов:

Какие переменные необходимы для функционирования советника?

Ответ ИИ:

Для эффективной работы советника по торговым сигналам необходимо несколько переменных. К ним могут относиться:

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

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

Далее, чтобы получить более понятное объяснение, можно попросить ИИ включить пример кода. Это дополнение проиллюстрирует, как обсуждаемые теоретические концепции воплощаются в фактическую реализацию кода, обеспечивая практическую демонстрацию функциональности проекта.

Ответ ИИ:

// Define variables for alarm times
   datetime Alarm1;
   datetime Alarm2;
   datetime Alarm3;

// Define variables for sound selection
   string Sound1 = "alert1.wav";
   string Sound2 = "alert2.wav";
   string Sound3 = "alert3.wav";
// Define variables for current time and notification message
   datetime CurrentTime;
   string NotificationMessage;

// Define other configuration variables
   int NumberOfAlarms = 3;

В данном примере:

  • Alarm1, Alarm2 и Alarm3 — это переменные даты и времени для хранения времени срабатывания, определенного пользователем.
  • Sound1, Sound2 и Sound3 — это строковые переменные, содержащие пути к файлам или имена выбранных звуковых файлов для каждого оповещения.
  •  NotificationMessage — строковая переменная для хранения текста уведомлений.
  • NumberOfAlarms — целочисленная переменная, указывающая общее количество срабатываний, которые может установить пользователь.

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

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

Код от ИИ помогает определить необходимые переменные для проекта. Однако для нашего конкретного проекта мы хотим, чтобы пользователь сам вводил параметры звука и оповещения. Отсюда имеем несколько вопросов, связанных со вторым шагом псевдокода:

  • Как пользователи будут выбирать нужный звук и время?
  • Где будут храниться выбранные время и звуки напоминания?

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

Ответ ИИ:

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

input string Alarm1 = "00:00:00";
input string Alarm2 = "00:00:00";
input string Alarm3 = "00:00:00";

input string Sound = ""; // User-selected sound filename

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

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

Теперь перейдем к третьему шагу — отслеживание часового пояса для торговли. Следуем последовательности выполнения псевдокода. На данном этапе возникают следующие вопросы:

  • Каким образом советник будет отслеживать разницу во времени между установленным временем срабатывания и текущим временем?
  • Что произойдет, когда наступит время срабатывания?

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

Ответ ИИ:

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

// Inside the OnTick() function
// Get the current time
   datetime currentTime = TimeLocal();

// Check if the current time matches any of the alarm times
   if(currentTime == StringToTime(Alarm1) ||
      currentTime == StringToTime(Alarm2) ||
      currentTime == StringToTime(Alarm3))
     {
      // Trigger the audio alert
      PlaySound(Sound);
     }

В этом фрагменте кода:

  • Текущее время получаем с помощью TimeLocal().
  • Сравниваем текущее время с каждым из времен оповещения, указанных пользователем, с помощью StringToTime().
  • Если текущее время совпадает с каким-либо из значений, активируем звуковой сигнал, воспроизводя выбранный звук с помощью PlaySound(Sound).

Так советник будет постоянно отслеживать указанное время срабатывания сигнала и предпринимать действия при достижении времени срабатывания.

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

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

При переходе к четвертому шагу псевдокода возникают новые вопросы:

  • Как добавить записанное голосовое сообщение в проект MQL5?
  • Как будет воспроизводиться выбранный звуковой файл для оповещения?

Решение этих вопросов потребует интеграции аудиофайлов в наш проект MQL5 и реализации логики для воспроизведения выбранного файла в указанное время срабатывания. Давайте подробнее рассмотрим эти аспекты.

Ответ ИИ:

Чтобы добавить голосовое сообщение в ваш проект MQL5, выполните следующие действия:

  1. Подготовьте записанное голосовое сообщение в совместимом формате (например, WAV).
  2. В каталоге установки MetaTrader 5 вы найдете папку с именем Sounds. Откройте эту папку.
  3. Скопируйте звуковой файл (в формате WAV) в папку Sounds. Если ваш звуковой файл имеет другой формат (например, MP3), необходимо преобразовать его в формат WAV, прежде чем копировать в папку Sounds.
  4. После копирования звукового файла в папку Sounds он должен стать доступным для использования в MetaTrader 5. При использовании таких функций, как PlaySound(), в коде MQL5 вы можете ссылаться на звуковой файл по его имени.
  5. Запустите воспроизведение голосового сообщения с помощью функции PlaySound().
  6. Например, если вы скопировали звуковой файл с именем alert.wav в папку Sounds, вы можете воспроизвести этот звуковой файл в своем коде MQL5 следующим образом:

PlaySound("alert.wav");

Замените alert.wav на имя вашего звукового файла. Убедитесь, что имя файла точно совпадает (включая регистр букв), чтобы избежать ошибок при ссылке на звуковой файл в коде MQL5.

И всё! Так вы можете добавить звуковой файл в MetaTrader 5 и использовать его в советниках или скриптах.

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

3.1.3 Итеративное тестирование

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

Для примера, давайте проверим, как будут работать требуемые от пользователя входные данные:

// Define input variables
input string Alarm1 = "00:00:00"; // Default value for first alarm
input string Alarm2 = "00:00:00"; // Default value for second alarm
input string Alarm3 = "00:00:00"; // Default value for third alarm
input string Sound = "alert.wav"; // Default sound file

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
// Initialization function, executed once when the EA is launched
   return 0; // Return 0 to indicate successful initialization
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// Deinitialization function, executed before the EA is removed
// Perform any cleanup or necessary actions here

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// Convert alarm strings to datetime objects
   datetime first_Alarm = StringToTime(Alarm1);
   datetime second_Alarm = StringToTime(Alarm2);
   datetime third_Alarm = StringToTime(Alarm3);

// Get current local time
   datetime Time = TimeLocal();

// Check if current time matches any of the alarm times
   if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time)
     {
      // Play sound if any alarm time is reached
      PlaySound(Sound);
     }

  }

Объяснение:

Этот фрагмент кода позволит протестировать, как будет работать часть с данными, указываемыми пользователем. Здесь определены переменные Alarm1, Alarm2, Alarm3 и Sound, которые позволяют пользователям указывать время срабатывания и выбирать звук. Во время инициализации значения этих переменных выводятся на консоль — это визуальное подтверждение указанных пользователем данных. Функции OnInit() и OnDeinit() отвечают за инициализацию и деинициализацию советника, а OnTick() — за обработку тиков.

Выводимая информация:

Рисунок 1. Вывод кода в MetaTrader 5

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

Пример:

void OnStart()
  {
// Get the current local time
   datetime localTime = TimeLocal();


// Print the local time to the console
   Print("Current Local Time: ", localTime);
  }

Объяснение:

Этот фрагмент кода определяет функцию OnStart(), которая срабатывает при запуске скрипта в MQL5. Здесь с помощью функции TimeLocal() извлекается текущее местное время, а затем это время выводится вместе с описанием на консоль с помощью функции Print(). Это позволяет быстро проверить точность работы функции времени при тестировании и отладке.

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

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

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

Ответ ИИ:

// Define input variables
input string Alarm1 = "00:00:00"; // Default value for first alarm
input string Alarm2 = "00:00:00"; // Default value for second alarm
input string Alarm3 = "00:00:00"; // Default value for third alarm
input string Sound = "alert.wav"; // Default sound file

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
// Initialization function, executed once when the EA is launched
   return 0; // Return 0 to indicate successful initialization
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// Deinitialization function, executed before the EA is removed
// Perform any cleanup or necessary actions here

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// Convert alarm strings to datetime objects
   datetime first_Alarm = StringToTime(Alarm1);
   datetime second_Alarm = StringToTime(Alarm2);
   datetime third_Alarm = StringToTime(Alarm3);

// Get current local time
   datetime Time = TimeLocal();

// Check if current time matches any of the alarm times
   if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time)
     {
      // Play sound if any alarm time is reached
      PlaySound(Sound);
     }

  }

Этот блок определяет функцию OnTick(), выполняемую на каждом тике. Это основа функциональности советника. Вот что она делает:

  • Преобразует строки времени (Alarm1, Alarm2, Alarm3) в объекты datetime с помощью функции StringToTime().
  • Извлекает текущее локальное время с помощью функции TimeLocal() и сохраняет его в переменной Time.
  • Проверяет, совпадает ли текущее время со временем срабатывания. Если да, воспроизводит указанный звук с помощью функции PlaySound().

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

Примечание: Чтобы отредактировать указанные данные, нажмите F7.


Заключение

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


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

Прикрепленные файлы |
Alarms.mq5 (2.19 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (10)
Rece_w_kieszeniach
Rece_w_kieszeniach | 30 мая 2024 в 19:16
Rece_w_kieszeniach торговую стратегию, я знаю, как я хотел бы оптимизировать свою торговлю с помощью автоматизации, я знаю, что должен делать мой алгоритм / робот / советник, и я разложил весь процесс на простые шаги, поэтому я знаю, как перевести его на MQL5. Я хочу программировать его сам (в отличие от того, чтобы платить кому-то за это или просить GPT написать его для меня), потому что я хочу знать, как изменить код, когда мне это понадобится. Я постараюсь записать все это, но, похоже, неоднократно у меня будут возникать конкретные вопросы. Существует ли форум по MQL5? Или какая-нибудь другая площадка, где пользователи обмениваются мнениями? Буду признателен
Хорошо, я вижу MQL5-форум, а есть ли другие, что-нибудь примечательное? Спасибо!
Israel Pelumi Abioye
Israel Pelumi Abioye | 31 мая 2024 в 13:38
Rece_w_kieszeniach #:
Хорошо, я вижу форум MQL5, есть ли другие, что-нибудь примечательное? Спасибо!
Здравствуйте, Редже, я рад, что статья оказалась для вас полезной. Если вы хотите написать программу самостоятельно, то лучшим местом для получения ответов на ваши вопросы по-прежнему остается форум MQL5. Если у вас возникнут какие-либо проблемы с советником, не стесняйтесь обращаться ко мне.
Oluwatosin Mary Babalola
Oluwatosin Mary Babalola | 13 июл. 2024 в 21:11
Я слежу за вашей серией и должен сказать, что объяснения великолепны, и я с нетерпением жду возможности узнать больше из статей, основанных на проектах, подобных этой.
Israel Pelumi Abioye
Israel Pelumi Abioye | 13 июл. 2024 в 22:07
Oluwatosin Mary Babalola проектах, как эта.

Здравствуйте, Олуватосин, я с нетерпением жду следующей части. Если у вас есть вопросы по статье, пожалуйста, не стесняйтесь обращаться ко мне.

Stanislav Korotky
Stanislav Korotky | 3 окт. 2024 в 16:00

И зачем в руководстве для начинающих сразу учить их кодить неправильно?

Во-первых, есть проблемы с эффективностью, которые станут заметны как только человек начнет писать что-нибудь чуть-чуть более сложное и реальное (но продолжит использовать такую же методику). На каждом тике вызывается троекратное преобразование StringToTime одних и тех же строк. Можно было бы подчистить за ИИ - сделать конвертацию один раз в глобальных переменных:

input string Alarm1 = "00:00:00"; // Default value for first alarm
input string Alarm2 = "00:00:00"; // Default value for second alarm
input string Alarm3 = "00:00:00"; // Default value for third alarm
input string Sound = "alert.wav"; // Default sound file

// Define globals for persistent values
datetime first_Alarm, second_Alarm, third_Alarm;

int OnInit()
{
   // Initialization function, executed once when the EA is launched
   // Make conversions only once per inputs
   first_Alarm = StringToTime(Alarm1);
   second_Alarm = StringToTime(Alarm2);
   third_Alarm = StringToTime(Alarm3);
   return 0; // Return 0 to indicate successful initialization
}

void OnTick()
{
   // Get current local time
   datetime Time = TimeLocal();

   // Check if current time matches any of the alarm times
   if(first_Alarm == Time || second_Alarm == Time || third_Alarm == Time) // another logical error here (see below)
   {
      // Play sound if any alarm time is reached
      PlaySound(Sound);
   }
}

Во-вторых, нет гарантии что времена тиков совпадут с заданными временами алертов - скорее всего, этот код их упустит. И даже если бы мы сделали проверки в обработчике OnTimer, это не гарантировало бы "поимки" нужных моментов, потому что все события (OnTick, OnTimer и пр.) приходят из очереди, которая опустошается хоть и по возможности быстро, но может подтормаживать, если какая-то другая программа ведет тяжелые расчеты. Поэтому условие проверки наступления алертов нужно переписывать капитально, и как минимум без дополнительных переменных здесь не обойтись (в перспективе напрашивается переделка алертов под классы, но конечно не в этой статье).

Особенности написания Пользовательских Индикаторов Особенности написания Пользовательских Индикаторов
Написание пользовательских индикаторов в торговой системе MetaTrader 4
Разрабатываем мультивалютный советник (Часть 18): Автоматизация подбора групп с учётом форвард-периода Разрабатываем мультивалютный советник (Часть 18): Автоматизация подбора групп с учётом форвард-периода
Продолжим автоматизировать шаги, которые ранее мы выполняли вручную. В этот раз вернёмся к автоматизации второго этапа, то есть выбора оптимальной группы одиночных экземпляров торговых стратегий, дополнив его возможностью учитывать результаты экземпляров на форвард-периоде.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
Построение модели ограничения тренда свечей (Часть 3): Обнаружение изменений трендов при использовании системы Построение модели ограничения тренда свечей (Часть 3): Обнаружение изменений трендов при использовании системы
В этой статье рассматривается, как экономические новости, поведение инвесторов и различные факторы могут влиять на развороты рыночных трендов. Статья включает видео с пояснениями и внедряет MQL5-код в программу для обнаружения разворотов тренда, оповещения и принятия соответствующих мер в зависимости от рыночных условий.