Учебники по программированию - страница 4

 

ФУНКЦИИ C++ (2020) — Что такое рекурсия? Изучайте рекурсивные функции!


ФУНКЦИИ C++ (2020) — Что такое рекурсия? Изучайте рекурсивные функции! РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ

Рекурсия — это процесс, в котором функция вызывает сама себя, а соответствующая функция называется рекурсивной функцией.

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

C++ FUNCTIONS (2020) - What is recursion? Learn recursive functions! PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What is recursion? Learn recursive functions! PROGRAMMING TUTORIAL
  • 2020.10.28
  • www.youtube.com
Recursion is a process in which a function invokes itself, and the corresponding function is called a recursive function.Recursion is one of those topics in ...
 

C++ FUNCTIONS (2020) — Что такое универсальные функции и шаблоны? РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ


C++ FUNCTIONS (2020) — Что такое универсальные функции и шаблоны? РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ

Всем привет, добро пожаловать на мой канал! Меня зовут Салдина, и я создаю видео по программированию. Если вы заинтересованы в программировании, пожалуйста, подпишитесь на мой канал и поставьте лайк этому видео. Ваша поддержка помогает мне привлечь больше людей и распространить знания в области программирования.

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

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

Чтобы создать универсальную функцию, мы используем шаблоны в C++. Мы определяем тип шаблона, используя ключевое слово «шаблон», за которым следует имя типа, обычно называемое «Т». Внутри функции мы заменяем конкретный тип данных на «T». Это делает функцию универсальной и способной работать с различными типами данных.

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

Чтобы протестировать функцию, мы создаем переменные нужного типа и передаем их в общую функцию подкачки. Механизм вывода типа в C++ позволяет нам не указывать тип явно.

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

Я надеюсь, что это видео помогло вам понять концепцию обобщений и шаблонов в C++. Если вы нашли это полезным, пожалуйста, подпишитесь на мой канал и поставьте лайк этому видео. Ваша поддержка очень ценится. Спасибо за просмотр, увидимся в моем следующем видео. До свидания!

C++ FUNCTIONS (2020) - What are generic functions and templates? PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What are generic functions and templates? PROGRAMMING TUTORIAL
  • 2020.11.11
  • www.youtube.com
Generic programming is used to increase the efficiency of the code. The advantage of writing generic code is code reusability (which means that code that was...
 

Как создать приложение банкомата на C++? (Для начинающих)


Как создать приложение банкомата на C++? (Для начинающих) - РУКОВОДСТВО ПО ПРОГРАММИРОВАНИЮ (2020)

Добро пожаловать на мой канал! Меня зовут Салдина, и я создаю видео по программированию. Если вам это интересно, подписывайтесь на мой канал и ставьте лайк этому видео.

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

  1. Проверить баланс
  2. Внести деньги
  3. Снять деньги
  4. Показать меню

Теперь начнем с реализации функции «Показать меню». Мы создадим функцию под названием «showMenu», которая отображает опции меню для пользователя.

После определения меню мы вызовем функцию «showMenu», чтобы отобразить его. Затем мы позволим пользователю выбрать вариант.

Чтобы обработать выбор пользователя, мы будем использовать случай переключения. Для каждого случая мы выполним соответствующее действие. В случае варианта 1 мы будем отображать баланс. В случае варианта 2 мы запросим сумму депозита и соответствующим образом обновим баланс. В случае варианта 3 мы запросим сумму вывода и проверим, действительна ли она, прежде чем обновлять баланс. Наконец, мы добавим опцию 4 для выхода из программы.

Чтобы позволить пользователю многократно взаимодействовать с меню, мы будем использовать цикл do-while. Цикл будет продолжаться до тех пор, пока пользователь не выберет вариант 4.

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

How to build an ATM application in C++? (For beginners) - PROGRAMMING TUTORIAL (2020)
How to build an ATM application in C++? (For beginners) - PROGRAMMING TUTORIAL (2020)
  • 2020.08.03
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Лямбда-выражения в современном C++ (подробное пошаговое руководство)


Лямбда-выражения в современном C++ (подробное пошаговое руководство)

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

Я расскажу о наиболее важных концепциях, но имейте в виду, что лямбда-выражения — это обширная тема, в которой нужно многому научиться. Если вам нужны дополнительные примеры и практика, я предоставлю в описании бесплатную книгу, посвященную лямбда-выражениям в современном C++. Не стесняйтесь проверить это.

Лямбда-выражения появились в современном C++ и доступны в C++11 и более поздних версиях. Их основная цель — позволить вам писать встроенные анонимные функции. Так что же такое встроенные анонимные функции? Обычные функции позволяют вам написать код один раз и повторно использовать его, вызывая функцию всякий раз, когда вам снова понадобится этот код, устраняя необходимость в избыточном коде. С другой стороны, встроенная функция — это небольшая простая функция, которая не предназначена для повторного использования, например штатные функции. Они часто используются для небольших фрагментов кода, которые не требуют имени и не стоят усилий по созданию отдельной функции. Вот где лямбда-выражения проявляются, поскольку они позволяют писать безымянные функции, которые являются краткими, легко читаемыми, быстрыми в выполнении и хранят все в одном месте.

Теперь давайте углубимся в код. Для этой демонстрации я буду использовать C++Builder, идеальную среду IDE для создания приложений с пользовательским интерфейсом на C++. Если вам интересно узнать о приложениях с пользовательским интерфейсом C++, я дам в описании ссылку, по которой вы можете скачать C++Builder. Для начала давайте создадим консольное приложение. Нажмите «Файл», затем «Новый другой» и выберите «Консольное приложение». Убедитесь, что выбран C++, и нажмите «ОК». Вот наш исходный код. Сделаем к нему несколько дополнений.

Во-первых, я добавлю команду «системная пауза», чтобы окно консоли оставалось открытым после выполнения кода. Далее я включу библиотеку «iostream» для операций ввода/вывода. Теперь наш код готов к запуску, и если мы запустим программу, мы увидим сообщение «Hello, World!». сообщение в консоли. Теперь давайте посмотрим на структуру лямбда-выражения. Я уберу предыдущий код, и мы начнем с простого примера. Чтобы создать лямбду, мы используем следующий синтаксис: угловые скобки (предложение захвата), круглые скобки (параметры) и фигурные скобки (определение функции).

Внутри предложения захвата мы можем указать переменные из объемлющей области видимости, которые мы хотим использовать внутри лямбды. Пока оставим предложение захвата пустым и сосредоточимся на параметрах. Мы можем определить параметры внутри круглых скобок. В этом примере я буду использовать один параметр «p». Наконец, мы определяем тело лямбда-функции внутри фигурных скобок. Теперь давайте создадим пример, в котором мы столкнемся с проблемой, а затем решим ее с помощью лямбда-выражений. Мы будем работать с вектором, поэтому нам нужно подключить библиотеку «вектор». Я создам вектор целых чисел с именем «v» и инициализирую его некоторыми значениями. Далее я представлю полезную функцию из библиотеки «алгоритм» под названием «for_each». Эта функция перебирает элементы в диапазоне, например наш вектор, и применяет заданную функцию к каждому элементу.

Внутри функции «for_each» мы укажем диапазон, используя «v.begin()» и «v.end()». Теперь давайте определим, что мы хотим сделать с каждым элементом. Сначала я покажу вам проблему с кодом, а затем представлю лямбда-выражения в качестве решения. Я добавил структуру с перегруженным оператором, который печатает параметр. Мы ожидаем, что функция for_each напечатает все элементы вектора. Если мы выполним код, то увидим, что он работает не так, как ожидалось. Он печатает только последний элемент. Это связано с тем, что перегруженный оператор передается по значению и копирует параметр для каждого вызова, что приводит к неправильному выводу. Чтобы исправить это, мы можем заменить перегруженный оператор лямбда-выражением. Я скопирую синтаксис лямбда-выражения, который мы обсуждали ранее, и вставлю его внутрь функции for_each. Теперь давайте снова выполним код.

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

В нашем следующем примере я создам переменную с именем «multiplier» и установлю для нее значение 2. Внутри лямбды я буду использовать эту переменную для умножения каждого элемента в векторе. На этот раз я буду использовать цикл for на основе диапазона вместо функции for_each для демонстрационных целей. Если мы выполним код, мы увидим, что элементы в векторе умножаются на 2 благодаря захваченной переменной. Однако существует ограничение на захват переменных по значению. Мы не можем изменить захваченную переменную внутри лямбды.

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

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

Надеюсь, это видео помогло вам понять лямбда-выражения в современном C++. Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях ниже. Не забудьте поставить лайк этому видео и подписаться на мой канал, чтобы получать больше руководств по C++. Спасибо за просмотр и удачного кодирования!

Lambda expressions in modern C++ (in depth step by step tutorial)
Lambda expressions in modern C++ (in depth step by step tutorial)
  • 2021.11.17
  • www.youtube.com
A lambda is an unnamed function that is used for short snippets of code that cannot be reused and are not worth naming. It makes the code cleaner, easier to ...
 

Советы и рекомендации по Visual Studio для профессионалов — учебник по Visual Studio



Советы и рекомендации по Visual Studio для профессионалов — учебник по Visual Studio

Всем привет! Меня зовут Лесли Ричардсон, и я работаю менеджером программ в группе отладки и диагностики Visual Studio. В этом видео я рад обсудить новую функцию в Visual Studio 2019, которая называется функцией поиска для Autos, Locals и Watch windows. Эта функция разработана для того, чтобы значительно расширить возможности отладки и сэкономить драгоценное время, что сделает вашу работу более продуктивной.

Чтобы продемонстрировать эту функцию, давайте рассмотрим сценарий, в котором у меня открыто приложение .NET Core в Visual Studio 2019. В этом приложении у меня есть список, содержащий несколько объектов рецептов. Проблема, с которой я сталкиваюсь, заключается в поиске конкретных рецептов в этом списке, что может быть довольно утомительно, особенно когда список содержит 61 объект. Вручную расширять каждый объект, находить свойство title и проверять, соответствует ли оно моему критерию поиска, например, «салат», — задача, требующая много времени.

Чтобы упростить этот процесс, я буду использовать функцию под названием «Отображение отладчика». Эта функция позволяет мне настраивать способ отображения объектов в различных окнах отладчика, включая Autos, Locals и Watch. Добавив атрибут «Отображение отладчика» в определение класса моих объектов, я могу указать, какое свойство должно отображаться в столбце значений этих окон. В этом случае я хочу просмотреть каждый рецепт по его заголовку, поэтому я установил атрибут «Отображение отладчика», чтобы отобразить свойство заголовка рецепта.

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

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

В дополнение к функции поиска я также хочу упомянуть, что функция отображения отладчика доступна для пользователей управляемого кода, например, использующих C#, F# или Visual Basic. Для пользователей C++ доступна эквивалентная функция под названием NATVIS. С NATVIS вам нужно создать отдельный файл XML, в котором вы можете определить свойства, которые будут отображаться в окнах отладчика.

Я надеюсь, что это объяснение было полезным. Спасибо за просмотр!

Теперь давайте рассмотрим, как сделать интерфейс Visual Studio более организованным и повысить его производительность. Когда мы открываем решения в Visual Studio, он запоминает состояние документов, положения прокрутки и развернутые/свернутые разделы в обозревателе решений с момента последнего использования. Хотя это может быть полезно, это также потребляет циклы ЦП и не всегда может быть желательным. Чтобы начать заново и повысить производительность, мы можем изменить некоторые настройки.

В меню «Инструменты» > «Параметры» в разделе «Проекты и решения» есть два параметра, которые следует учитывать. Параметр «Повторно открывать документы при загрузке решения» запоминает ранее открытые документы, а параметр «Восстанавливать состояние иерархии проекта обозревателя решений при загрузке решения» запоминает развернутое/свернутое состояние обозревателя решений. Если отключить эти параметры, Visual Studio не будет восстанавливать предыдущее состояние при открытии решения. Вместо этого он начнется с чистого листа, без каких-либо открытых документов или расширенных разделов в обозревателе решений. Это может помочь повысить производительность и обеспечить новый старт для каждого решения.

При работе с Git в Visual Studio есть несколько функций, которые могут повысить вашу производительность и совместную работу. Окно Git Changes обеспечивает полное представление вашего репозитория Git и позволяет вам вносить, фиксировать и отправлять изменения непосредственно из Visual Studio. Вы можете получить доступ к этому окну, выбрав View > Git Changes. Кроме того, Visual Studio предоставляет встроенный инструмент Git diff, который выделяет различия между разными версиями вашего кода. Вы можете получить доступ к этой функции, щелкнув правой кнопкой мыши файл в обозревателе решений и выбрав «Сравнить с неизмененным» или «Сравнить с последним».

Еще одна полезная функция Visual Studio — возможность рефакторинга кода. Рефакторинг помогает улучшить структуру и удобочитаемость кода без изменения его поведения. Visual Studio предоставляет множество вариантов рефакторинга, таких как переименование переменных или методов, выделение кода в отдельные методы или классы и реорганизация блоков кода. Чтобы получить доступ к этим параметрам рефакторинга, щелкните правой кнопкой мыши код, который вы хотите реорганизовать, и выберите «Рефакторинг» в контекстном меню. Вы также можете использовать сочетания клавиш для общих операций рефакторинга, например Ctrl + R, Ctrl + R для переименования символа.

Чтобы еще больше расширить возможности кодирования, вы можете воспользоваться преимуществами фрагментов кода в Visual Studio. Фрагменты кода — это предварительно определенные шаблоны кода, которые можно быстро вставить в ваш код, введя ярлык и нажав клавишу Tab. Visual Studio предоставляет широкий набор встроенных фрагментов кода для различных языков программирования и сред. Вы также можете создавать собственные пользовательские фрагменты кода для автоматизации повторяющихся задач кодирования. Чтобы получить доступ к фрагментам кода и управлять ими, выберите «Инструменты» > «Диспетчер фрагментов кода».

Отладка — важная часть процесса разработки, и Visual Studio предлагает мощные возможности отладки. Вы можете установить точки останова в своем коде, чтобы приостановить выполнение и проверить состояние переменных и объектов. Во время отладки вы можете использовать окно Watch для отслеживания значений определенных переменных или выражений. Окно Immediate позволяет выполнять код и оценивать выражения во время отладки. Вы также можете воспользоваться преимуществами условных точек останова, которые срабатывают только при выполнении определенного условия, и точек трассировки, которые выводят сообщения в окно вывода без остановки отладчика.

Visual Studio также поддерживает модульное тестирование, которое имеет решающее значение для обеспечения качества и правильности вашего кода. Вы можете создавать модульные тесты, используя различные среды тестирования, такие как MSTest, NUnit или xUnit. Visual Studio предоставляет окно обозревателя тестов, в котором отображаются все доступные тесты в вашем решении, и вы можете запускать или отлаживать их по отдельности или в группах. Вы можете использовать атрибуты для определения методов тестирования и утверждений для проверки ожидаемых результатов. Visual Studio также предлагает анализ покрытия кода, который показывает, какая часть вашего кода покрыта модульными тестами.

При работе с большими проектами или решениями может быть сложно ориентироваться и понимать кодовую базу. Visual Studio предоставляет несколько функций для облегчения навигации по коду и его понимания. Обозреватель решений позволяет изучить структуру вашего решения и быстро перейти к определенным файлам или классам. Вы также можете использовать функцию «Перейти к» (Ctrl + ,) для поиска символов, файлов или типов в вашем решении. Функция CodeLens отображает дополнительную информацию о вашем коде, такую как ссылки, изменения и покрытие тестами, непосредственно в редакторе.

Для веб-разработки Visual Studio предлагает отличную поддержку популярных веб-технологий, таких как HTML, CSS и JavaScript. Редактор HTML предоставляет такие функции, как IntelliSense, форматирование кода и возможность предварительного просмотра HTML-страниц непосредственно в редакторе. Редактор CSS предлагает аналогичные функции, включая средства выбора цвета, IntelliSense для свойств CSS и предварительный просмотр изменений CSS в реальном времени. Visual Studio также поддерживает отладку JavaScript, позволяя вам устанавливать точки останова, проверять переменные и выполнять пошаговый код для выявления и устранения проблем.

Visual Studio имеет обширную экосистему расширений и подключаемых модулей, которые могут улучшить ваш опыт разработки. Эти расширения предоставляют дополнительную функциональность, языковую поддержку и инструменты для определенных платформ или платформ. Вы можете просматривать и устанавливать расширения непосредственно в Visual Studio, выбрав Расширения > Управление расширениями. Некоторые популярные расширения включают ReSharper, который предлагает расширенные инструменты анализа и рефакторинга кода, и Visual Studio Code, который предоставляет легкий кроссплатформенный редактор кода.

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

Visual Studio поддерживает широкий спектр языков и сред программирования, включая .NET, C++, Python, JavaScript и многие другие. Он предоставляет функции для конкретных языков, такие как IntelliSense, фрагменты кода и возможности отладки, адаптированные для каждого языка. Вы можете установить расширения и SDK для конкретных языков, чтобы еще больше расширить возможности разработки для предпочитаемых вами языков программирования.

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

Visual Studio также обеспечивает поддержку разработки мобильных приложений для таких платформ, как Android и iOS. Вы можете создавать кроссплатформенные мобильные приложения, используя такие фреймворки, как Xamarin или React Native. Visual Studio предлагает инструменты для разработки пользовательских интерфейсов, отладки мобильных приложений и их развертывания на эмуляторах или физических устройствах. Вы также можете использовать облачные службы, такие как мобильные приложения Azure, для внутренней интеграции и хранения.

В дополнение к традиционным настольным и веб-приложениям Visual Studio поддерживает разработку приложений Интернета вещей (IoT). Вы можете создавать приложения для таких устройств, как Raspberry Pi, Arduino и других устройств IoT, используя Visual Studio. Инструменты разработки Visual Studio IoT предоставляют шаблоны проектов, поддержку отладки и варианты развертывания для сценариев IoT.

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

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

Visual Studio Tips and Tricks for Professionals - Visual Studio Tutorial
Visual Studio Tips and Tricks for Professionals - Visual Studio Tutorial
  • 2020.07.01
  • www.youtube.com
Learn to use Visual Studio like pro from creating layouts to keyboard shortcuts.C++ tutorial: https://youtu.be/mUQZ1qmKlLYJava tutorial : https://youtu.be/Wq...
 

Полный код советника для MetaTrader 5 за 20 минут!



Полный код советника для MetaTrader 5 за 20 минут!

Сегодня мы рады начать запись нашего первого советника (эксперта) для торговой платформы MetaTrader. Этот советник разработан как торговая система для MetaTrader, и в нашем видео мы также проведем быстрое тестирование на истории, чтобы оценить его производительность.

Для начала мы запускаем платформу MetaTrader и получаем доступ к MetaEditor, нажав «Инструменты» и выбрав «Редактор языка MetaQuotes» в раскрывающемся меню. В редакторе MetaEditor мы создаем наших советников, а также скрипты и индикаторы для MetaTrader.

Для создания нового советника нажимаем кнопку «Создать» в левом верхнем углу редактора MetaEditor. В появившемся мастере выбираем первый вариант и нажимаем «Далее». Затем мы можем дать нашему советнику имя, например «Первый советник», и снова нажать «Далее». Мы пропускаем выбор любых дополнительных параметров и продолжаем, нажимая «Готово».

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

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

Вернувшись в MetaEditor, мы объявляем эти две входные переменные в новом разделе под названием «Переменные». Мы используем ключевое слово input, чтобы указать, что эти переменные могут быть изменены вне кода. Мы устанавливаем их типы как целые числа, так как мы хотим ввести конкретные значения часов. Например, мы можем назвать переменные «openHour» и «closeHour».

После объявления переменных мы компилируем код, чтобы убедиться в отсутствии ошибок. Если все правильно, мы видим, что в панели инструментов нет сообщений об ошибках.

Затем мы снова переключаемся на платформу MetaTrader и перетаскиваем наш советник на любой график. Мы можем увидеть название советника, версию и ссылку в навигаторе в разделе «Советники». Расширив советник, мы можем получить доступ к входным переменным и изменить их значения без изменения кода.

Теперь перейдем к функции "OnTick", которая вызывается каждый раз при изменении цены. Мы хотим проверить, достигли ли мы времени открытия, указанного пользователем. Для этого нам нужно получить текущее время символа и сервера. Мы создаем переменную с именем «время» типа «дата и время» и используем функцию «TimeCurrent», чтобы присвоить ей текущее время.

Теперь, когда текущее время хранится в нашей переменной «time», мы можем проверить, соответствует ли оно времени открытия. Мы используем оператор «if», чтобы сравнить переменную «openHour» с часовым компонентом текущего времени («time.hour»). Если условие истинно, мы входим в блок «если».

Внутри блока if мы открываем позицию с помощью функции OrderSend. В качестве параметров указываем символ, направление торговли (покупка), размер лота (1 лот) и цену продажи. Кроме того, мы устанавливаем значения стоп-лосса и тейк-профита в соответствии с нашими предпочтениями.

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

Чтобы предотвратить открытие нескольких позиций, мы вводим логическую переменную под названием «isTradeOpen», чтобы отслеживать, открыта ли уже сделка. Изначально мы устанавливаем значение «isTradeOpen» в false. Перед открытием новой позиции мы проверяем, является ли "isTradeOpen" ложным. Если это так, мы переходим к открытию позиции и устанавливаем значение «isTradeOpen» в true. Таким образом, даже если функция «OnTick» срабатывает несколько раз, она откроет новую позицию только в том случае, если открытой сделки еще нет.

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

Переходя к закрытию сделки в указанное время закрытия, нам нужно ввести еще одну проверку в функцию "OnTick". После открытия позиции мы сравниваем текущее время с указанным пользователем временем закрытия. Если они совпадают, мы вводим блок «если».

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

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

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

Code complete EA for MetaTrader 5 in 20 Minutes!
Code complete EA for MetaTrader 5 in 20 Minutes!
  • 2022.06.27
  • www.youtube.com
Program your first EA for MetaTrader. I will show you how you can easily code your first Expert Advisor or trading system in Mql5.As an algo trader I develop...
 

Moving Average Crossover EA Программирование mql5



Moving Average Crossover EA Программирование mql5

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

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

Чтобы начать кодирование, откройте редактор MetaEditor в MetaTrader 5. Создайте новый советник, используя шаблон, и назовите его «Скользящая средняя». Очистите код, удалив ненужные строки и комментарии. Далее добавьте входные переменные для периодов быстрой и медленной скользящих средних. Установите значения по умолчанию для этих переменных и отобразите их на вкладке ввода настроек советника.

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

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

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

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

Вот и все, что нужно для написания кода советника по пересечению скользящих средних в MetaTrader 5. Затем мы можем использовать функцию trade.Buy, чтобы открыть позицию на покупку. Мы указываем объем позиции, который может быть фиксированным или основываться на вашей стратегии управления рисками. На данный момент давайте использовать фиксированный объем 0,1 лота. Теперь нам нужно добавить условие для проверки позиции на продажу. Если быстрая скользящая средняя находится выше медленной скользящей средней для бара 1 и ниже для текущего бара, мы имеем пересечение в противоположном направлении. В этом случае мы хотим открыть позицию на продажу. Для этого мы можем использовать функцию trade.Sell.

Наконец, мы можем добавить к нашим позициям стоп-лосс и тейк-профит. Мы будем использовать функции trade.SetStopLoss и trade.SetTakeProfit. Для этого примера установим стоп-лосс в 100 пунктов и тейк-профит в 200 пунктов. Теперь у нас есть полный код нашего простого советника по пересечению скользящих средних. Мы можем скомпилировать его и протестировать на платформе MetaTrader 5.

Как только вы скомпилируете код без каких-либо ошибок, вы можете сохранить советник и использовать его в MetaTrader 5. Не забудьте протестировать и оптимизировать свой советник, прежде чем использовать его на реальных деньгах.

Moving Average Crossover EA mql5 Programming
Moving Average Crossover EA mql5 Programming
  • 2022.09.06
  • www.youtube.com
Today I will show you how to code a simple Moving Average Crossover EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a f...
 

Эксперт Range Breakout Программирование mql5 | Часть 1/4



Эксперт Range Breakout Программирование mql5 | Часть 1/4

Привет, это Тоби, и в сегодняшнем видео я покажу вам, как написать экспертный советник (EA) для MetaTrader 5 на прорыве временного диапазона. Цель состоит в том, чтобы достичь результатов, аналогичных стратегии, показанной в видео.

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

Чтобы начать программировать, откройте MetaEditor и создайте новый советник. Очистите код шаблона в соответствии с личными предпочтениями, удалив ненужные строки.

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

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

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

Мы компилируем код, чтобы проверить наличие ошибок и убедиться, что все работает правильно.

Наконец, мы создаем еще несколько переменных, таких как «MqlTick» и «last_tick» типа «MqlTick» для MetaTrader 5. Мы также определяем переменную типа «CTrade» для обработки операций, связанных с торговлей.

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

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

Теперь перейдем к реализации функции OnTick для написания основной логики советника. Вот продолжение видео: В функции OnTick сначала обновим текущую тиковую информацию с помощью функции SymbolInfoTick. Это позволяет нам получить доступ к ценам покупки и продажи, а также к времени тика. Далее мы проверим, находится ли текущее время тика в пределах диапазона, заданного пользователем. Для этого мы сравниваем текущее время тика со временем начала и окончания диапазона. Если время тика находится в пределах диапазона, мы устанавливаем для flagEntry значение true, указывая, что мы находимся внутри диапазона.

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

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

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

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

Range Breakout EA mql5 Programming | Part 1/4
Range Breakout EA mql5 Programming | Part 1/4
  • 2022.09.25
  • www.youtube.com
Today I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range br...
 

Советник Range Breakout Программирование mql5| Часть 2/4



Советник Range Breakout Программирование mql5| Часть 2/4

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

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

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

  1. Если у нас установлено время закрытия диапазона и текущее время тика больше или равно времени закрытия диапазона, мы вычисляем новый диапазон.

  2. Если для обоих флагов прорыва вверх и вниз установлено значение true, мы вычисляем новый диапазон.

  3. Если мы запускаем советник впервые и мы еще не рассчитали диапазон, мы вычисляем новый диапазон.

  4. Если время окончания диапазона не равно нулю, и мы находимся после диапазона и не вошли в диапазон, мы вычисляем новый диапазон.

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

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

Мы также рассчитываем время закрытия диапазона, используя ту же логику, что и расчет времени начала и окончания. Чтобы визуализировать рассчитанное время на графике, мы создаем объекты с помощью функции ObjectCreate. Мы создаем объект вертикальной линии для времени начала диапазона и удаляем все ранее нарисованные объекты.

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

Range Breakout EA mql5 Programming| Part 2/4
Range Breakout EA mql5 Programming| Part 2/4
  • 2022.10.01
  • www.youtube.com
Today I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range br...
 

Эксперт Range Breakout Программирование mql5 | Часть 3/4


Эксперт Range Breakout Программирование mql5 | Часть 3/4

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

Сначала мы перейдем к функции OnTick. Мы начнем с проверки того, находимся ли мы в пределах диапазона, и сохраним верхнее и нижнее значения. Мы используем оператор if, чтобы проверить, находится ли текущее время между временем начала и окончания диапазона. Если это так, мы соответствующим образом обновляем верхнее и нижнее значения. Мы также устанавливаем флаг входа в значение true, чтобы указать, что у нас есть галочка внутри диапазона. Затем мы обновляем объекты диаграммы для максимума и минимума диапазона.

Затем мы переходим к функции DrawObject, чтобы нарисовать верхний и нижний уровни диапазона. Копируем блок кода для закрытия и вносим необходимые изменения для высокого уровня. Мы используем имя объекта «Максимум диапазона» и рисуем линию тренда от времени начала диапазона до цены максимума диапазона. Мы также обновляем всплывающую подсказку, чтобы отображать верхнее значение диапазона. Мы делаем то же самое для минимума диапазона, меняя имя объекта и рисуя линию тренда от времени начала диапазона до цены минимума диапазона.

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

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

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

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

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

Это все для этого видео. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять их в комментариях ниже. Не забудьте поставить лайк и подписаться на новые видео о кодировании. Спасибо за просмотр!

Range Breakout EA mql5 Programming | Part 3/4
Range Breakout EA mql5 Programming | Part 3/4
  • 2022.10.09
  • www.youtube.com
Today I will show you how to code a Time Range Breakout EA for Metatrader 5. If you are new to mql5, just follow my steps and we will create a time range br...
Причина обращения: