Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Эксперт Range Breakout Программирование mql5 | Часть 4/4
Эксперт Range Breakout Программирование mql5 | Часть 4/4
Тоби рад сообщить, что сегодня мы завершаем работу над нашим экспертным советником (EA) для MetaTrader 5. Это видео знаменует собой заключительную часть нашей обширной серии статей о советнике для прорыва. Если у вас не было возможности посмотреть предыдущие видео, я дам ссылки в описании, чтобы вы могли наверстать упущенное.
В предыдущих сегментах мы рассмотрели важные аспекты, такие как расчет диапазона, проверка прорыва на покупку и продажу и логика закрытия позиции. Теперь, в этом заключительном видео, у нас есть еще несколько функций, которые мы можем добавить в наш советник. В частности, мы включим функции стоп-лосса и тейк-профита, основанные на процентах от диапазона. Кроме того, мы добавим фильтр по дням недели и реализуем режим прорыва, позволяющий пользователям переключаться между одним или двумя прорывами в каждом диапазоне.
Давайте погрузимся прямо в процесс кодирования. Пока это код, который мы разработали. Наша первая задача — включить входные данные для процентов стоп-лосса и тейк-профита. Мы определим их как целые числа, поскольку они представлены в процентах. Давайте установим ввод стоп-лосса по умолчанию на 150 и ввод тейк-профита на 200. Мы также обновим комментарии, чтобы отразить эти изменения. Чтобы убедиться, что пользователь вводит правильные данные, нам необходимо выполнить проверки ввода. Мы добавим дополнительный оператор if в функцию on init для проверки ввода стоп-лосса и тейк-профита. Если ввод стоп-лосса ниже нуля или больше 1000, мы отобразим сообщение об ошибке. Тот же процесс проверки применяется к вводу тейк-профита. Эти проверки помогут защитить советник от ошибочных входных данных.
Двигаясь дальше, давайте рассчитаем значения стоп-лосса и тейк-профита для каждой позиции. Для позиций на покупку стоп-лосс будет рассчитываться в процентах от диапазона ниже текущей цены. Мы будем использовать цену предложения и умножим ее на введенное значение стоп-лосса, деленное на 100. Чтобы обеспечить нормализованную цену, мы применим функцию NormalizeDouble. Точно так же для позиций на продажу стоп-лосс будет рассчитываться как процент от диапазона выше текущей цены. Мы будем использовать цену предложения и добавлять к ней рассчитанное значение стоп-лосса. Это определит соответствующий уровень для стоп-лосса.
Для расчета тейк-профита мы будем следовать той же логике. Для позиций на покупку тейк-профитом будет диапазон выше текущей цены, а для позиций на продажу – диапазон ниже текущей цены. Рассчитав значения стоп-лосса и тейк-профита, мы включим их в вызовы открытых позиций. Вместо использования статического нулевого значения мы заменим его рассчитанными значениями стоп-лосса и тейк-профита. Эта корректировка гарантирует, что советник точно установит уровни стоп-лосса и тейк-профита для каждой позиции.
Для обеспечения гибкости мы представим возможность отключения стоп-лосса и тейк-профита. Если пользователь введет ноль для любого входа, это будет означать, что он хочет отключить эту функцию. Мы добавим операторы if, чтобы проверить эти условия и соответствующим образом скорректировать расчет. Теперь давайте рассмотрим необязательную функцию времени закрытия. Введя -1 в качестве времени закрытия, советник будет закрывать позиции только на основе уровней стоп-лосса и тейк-профита. Эта модификация позволяет пользователям выбирать, хотят ли они указать конкретное время закрытия позиции или полагаться исключительно на параметры стоп-лосса и тейк-профита.
Чтобы реализовать это, мы обновим проверку времени закрытия в функции по тику. Если время закрытия меньше нуля, что указывает на то, что он выключен, мы пропустим проверку закрытия позиции по времени и будем полагаться исключительно на условия стоп-лосса и тейк-профита. Кроме того, мы внесем коррективы в визуализацию диапазона в функции рисования объекта. Если время закрытия не установлено, линии диапазона будут простираться до текущей свечи, показывая, что режим пробоя активен до тех пор, пока не будут достигнуты уровни стоп-лосса или тейк-профита. С другой стороны, если установлено время закрытия, линии диапазона будут простираться только до этой конкретной свечи, что означает, что режим прорыва активен до назначенного времени.
Для повышения универсальности советника мы введем фильтр дня недели. Этот фильтр позволяет пользователям указывать дни, в которые они хотят, чтобы советник был активен. Мы добавим входной параметр для фильтра дня недели, где пользователь может выбрать несколько дней из предопределенного списка. По умолчанию будут выбраны все дни недели. Чтобы реализовать фильтр дня недели, мы изменим функцию по тике. Мы введем оператор if, чтобы проверить, включен ли текущий день в выбранный пользователем фильтр. Если день не указан, советник пропустит логику открытия позиции и перейдет к следующему тику.
Наконец, мы реализуем возможность переключения между одним или двумя прорывами на диапазон. В настоящее время советник открывает одну позицию за каждый прорыв диапазона. Тем не менее, некоторые трейдеры могут предпочесть иметь возможность открывать две позиции для более сильных прорывов. Чтобы приспособиться к этому, мы введем входной параметр, который позволит пользователю выбрать один или два прорыва для каждого диапазона.
Для реализации этой возможности настроим логику открытия позиций. Если пользователь выбирает два пробоя на диапазон, советник откроет дополнительную позицию в направлении, противоположном первоначальному прорыву. Таким образом, как бычий, так и медвежий прорыв можно зафиксировать в одном и том же диапазоне. Благодаря внедрению всех этих новых функций наш советник по прорывам предоставит трейдерам расширенную функциональность и гибкость. Функции стоп-лосс и тейк-профит, основанные на процентах от диапазона, помогут управлять рисками и получать прибыль. Фильтр дней недели позволит пользователям указать активные торговые дни, а режим прорыва можно настроить на один или два прорыва на диапазон, в зависимости от их торговой стратегии.
Мы надеемся, что эта обширная серия статей об советнике на прорыве была для вас полезной и информативной. Если у вас есть какие-либо вопросы или вам нужна дополнительная помощь, пожалуйста, не стесняйтесь обращаться к нам. Удачной торговли!
Полосы Боллинджера EA Программирование MT5
Полосы Боллинджера EA Программирование MT5
В этом видео Тоби представляет пошаговый процесс создания собственного советника для боулинга в Twitter. Он начинает с объяснения стратегии: продажа, когда свеча открывается выше верхней полосы Боллинджера, установка уровней стоп-лосса и тейк-профита и выход из сделки, если средняя линия полос Боллинджера пересекается. Та же логика применима и к покупке.
Затем Тоби переключается в MetaEditor, где создает нового советника по шаблону. Он очищает шаблон и добавляет входные параметры для советника, такие как магическое число, размер лота, период, отклонение, стоп-лосс и тейк-профит. Он устанавливает значения по умолчанию для этих параметров и компилирует код.
Затем Тоби определяет глобальные переменные для советника, включая дескриптор индикатора полосы Боллинджера и буферы для верхней, средней и нижней полос. Он также создает переменные для текущего тика и сделки.
Переходя к функции OnInit, Тоби проверяет правильность ввода пользователя. Если какой-либо из входов недействителен, он отображает сообщение об ошибке и возвращается. Он устанавливает магическое число для объекта торговли и создает хэндл индикатора для индикатора полосы Боллинджера. Если создание дескриптора не удается, он отображает сообщение об ошибке и возвращается. Затем он устанавливает буферы как серии и компилирует код.
В функции OnTick Тоби проверяет, является ли текущий тик тиком открытия бара, используя пользовательскую функцию. Если это не тик открытия бара, он возвращается. Если это тик открытия бара, он получает текущий тик с помощью функции SymbolInfoTick и сохраняет его в переменной currentTick. Затем он извлекает последние значения индикатора с помощью функции CopyBuffer и сохраняет их в соответствующих буферах. Если количество скопированных значений не равно 3, что указывает на ошибку, он выводит сообщение об ошибке и возвращается.
На данный момент Тоби завершил начальные этапы кодирования советника. Он компилирует код и использует визуальный бэктест в MetaTrader, чтобы проверить значения индикатора и убедиться, что код работает правильно.
Далее нам нужно реализовать логику генерации торговых сигналов на основе стратегии «Полосы Боллинджера». Мы начнем с проверки того, открывается ли свеча выше верхней полосы, что указывает на сигнал к продаже. Если это условие выполняется, мы совершаем сделку на продажу с уровнем стоп-лосса и тейк-профита. Точно так же мы проверим, открывается ли свеча ниже нижней полосы для сигнала на покупку, совершая сделку на покупку с теми же условиями выхода.
Вот объяснение кода:
Сначала мы проверяем, является ли текущий тик тиком открытия бара, используя функцию isNewBar(). Если он возвращает false, мы пропускаем генерацию торгового сигнала для текущего тика.
Затем мы извлекаем последние значения индикатора: upperBand, baseLine и lowerBand из соответствующих буферов.
Далее мы проверяем, находится ли цена открытия предыдущей свечи выше верхней полосы (open[1] > upperBand). Если это условие выполняется, мы генерируем сигнал на продажу, открывая сделку на продажу с помощью метода Sell() торгового объекта. Мы устанавливаем размер лота, уровни стоп-лосса и тейк-профита, используя соответствующие методы.
Точно так же мы проверяем, находится ли цена открытия предыдущей свечи ниже нижней полосы (open[1] < LowerBand). Если true, мы генерируем сигнал на покупку, открывая сделку на покупку с помощью метода Buy() торгового объекта. Опять же, мы устанавливаем размер лота, уровни стоп-лосса и тейк-профита.
Наконец, если есть открытая сделка, мы проверяем, пересекает ли цена закрытия текущей свечи среднюю линию (базовую линию). Если это условие выполняется, мы закрываем сделку с помощью метода Close() торгового объекта.
Не забудьте скомпилировать код и протестировать его в MetaTrader, чтобы убедиться, что он работает должным образом.
В данном коде выполняется несколько задач. Вот подробное объяснение каждого шага:
Инициализировать переменные:
Количество открытых позиций:
Проверить, можно ли открыть новую позицию:
Рассчитать стоп-лосс и тейк-профит:
Нормируйте стоп-лосс и тейк-профит:
Откройте новую позицию на покупку:
Проверьте пересечение верхней полосы, чтобы открыть позицию на продажу:
Закрытие позиций при пересечении средней линии полос Боллинджера:
Определяем функцию для закрытия позиций:
Код выполняет различные проверки и вычисления для подсчета и управления открытыми позициями, открытия новых позиций и закрытия позиций на основе определенных условий.
Полосы Боллинджера EA Программирование MT5
Полосы Боллинджера EA Программирование MT5
В этом видео Тоби представляет пошаговый процесс создания собственного советника для боулинга в Twitter. Он начинает с объяснения стратегии: продажа, когда свеча открывается выше верхней полосы Боллинджера, установка уровней стоп-лосса и тейк-профита и выход из сделки, если средняя линия полос Боллинджера пересекается. Та же логика применима и к покупке.
Затем Тоби переключается в MetaEditor, где создает нового советника по шаблону. Он очищает шаблон и добавляет входные параметры для советника, такие как магическое число, размер лота, период, отклонение, стоп-лосс и тейк-профит. Он устанавливает значения по умолчанию для этих параметров и компилирует код.
Затем Тоби определяет глобальные переменные для советника, включая дескриптор индикатора полосы Боллинджера и буферы для верхней, средней и нижней полос. Он также создает переменные для текущего тика и сделки.
Переходя к функции OnInit, Тоби проверяет правильность ввода пользователя. Если какой-либо из входов недействителен, он отображает сообщение об ошибке и возвращается. Он устанавливает магическое число для объекта торговли и создает хэндл индикатора для индикатора полосы Боллинджера. Если создание дескриптора не удается, он отображает сообщение об ошибке и возвращается. Затем он устанавливает буферы как серии и компилирует код.
В функции OnTick Тоби проверяет, является ли текущий тик тиком открытия бара, используя пользовательскую функцию. Если это не тик открытия бара, он возвращается. Если это тик открытия бара, он получает текущий тик с помощью функции SymbolInfoTick и сохраняет его в переменной currentTick. Затем он извлекает последние значения индикатора с помощью функции CopyBuffer и сохраняет их в соответствующих буферах. Если количество скопированных значений не равно 3, что указывает на ошибку, он выводит сообщение об ошибке и возвращается.
На данный момент Тоби завершил начальные этапы кодирования советника. Он компилирует код и использует визуальный бэктест в MetaTrader, чтобы проверить значения индикатора и убедиться, что код работает правильно.
Далее нам нужно реализовать логику генерации торговых сигналов на основе стратегии «Полосы Боллинджера». Мы начнем с проверки того, открывается ли свеча выше верхней полосы, что указывает на сигнал к продаже. Если это условие выполняется, мы совершаем сделку на продажу с уровнем стоп-лосса и тейк-профита. Точно так же мы проверим, открывается ли свеча ниже нижней полосы для сигнала на покупку, совершая сделку на покупку с теми же условиями выхода.
Вот объяснение кода:
Сначала мы проверяем, является ли текущий тик тиком открытия бара, используя функцию isNewBar(). Если он возвращает false, мы пропускаем генерацию торгового сигнала для текущего тика.
Затем мы извлекаем последние значения индикатора: upperBand, baseLine и lowerBand из соответствующих буферов.
Далее мы проверяем, находится ли цена открытия предыдущей свечи выше верхней полосы (open[1] > upperBand). Если это условие выполняется, мы генерируем сигнал на продажу, открывая сделку на продажу с помощью метода Sell() торгового объекта. Мы устанавливаем размер лота, уровни стоп-лосса и тейк-профита, используя соответствующие методы.
Точно так же мы проверяем, находится ли цена открытия предыдущей свечи ниже нижней полосы (open[1] < LowerBand). Если true, мы генерируем сигнал на покупку, открывая сделку на покупку с помощью метода Buy() торгового объекта. Опять же, мы устанавливаем размер лота, уровни стоп-лосса и тейк-профита.
Наконец, если есть открытая сделка, мы проверяем, пересекает ли цена закрытия текущей свечи среднюю линию (базовую линию). Если это условие выполняется, мы закрываем сделку с помощью метода Close() торгового объекта.
Не забудьте скомпилировать код и протестировать его в MetaTrader, чтобы убедиться, что он работает должным образом.
В данном коде выполняется несколько задач. Вот подробное объяснение каждого шага:
Инициализировать переменные:
Количество открытых позиций:
Проверить, можно ли открыть новую позицию:
Рассчитать стоп-лосс и тейк-профит:
Нормируйте стоп-лосс и тейк-профит:
Откройте новую позицию на покупку:
Проверьте пересечение верхней полосы, чтобы открыть позицию на продажу:
Закрытие позиций при пересечении средней линии полос Боллинджера:
Определяем функцию для закрытия позиций:
Код выполняет различные проверки и вычисления для подсчета и управления открытыми позициями, открытия новых позиций и закрытия позиций на основе определенных условий.
Как создать графическую панель в mql5 | Часть 1/2
Как создать графическую панель в mql5 | Часть 1/2
Тоби продемонстрирует, как создать на MQL5 простую графическую панель для отображения информации и добавить кнопку для изменения цвета фона графика. Он упоминает, что эту панель можно создать для любого советника, но в качестве примера он будет использовать советник прорыва временного диапазона. Тоби заявляет, что тема видео была запрошена пользователем в комментариях, и призывает зрителей предлагать темы для будущих видео.
Тоби открывает метаредактор и загружает файл для советника прорыва временного диапазона. Он сохраняет его как новый советник под названием «панель временного диапазона советника» и компилирует его. Он объясняет, что напишет панель в виде отдельного класса во включаемом файле, чтобы ее было легко использовать в любом советнике. Тоби создает новый включаемый файл под названием «графическая панель» и определяет входные данные для размера панели, размера шрифта и цвета шрифта.
Он включает файл "dialog.mqh" из папки управления, что позволит ему использовать функции этого класса. Тоби определяет класс под названием «CGraphicalPanel», который наследуется от класса «CAppDialog». Он добавляет частный раздел для методов класса, открытый раздел для конструктора, деструктора, функции инициализации и обработчика событий диаграммы. Он также включает раздел комментариев для методов класса.
Затем Тоби пишет тело методов класса после определения класса. Он указывает, что методы принадлежат классу, и пишет конструктор, деструктор, функцию инициализации и обработчик событий диаграммы. Он добавляет комментарии, чтобы описать цель каждого метода. Тоби компилирует код для проверки ошибок или предупреждений.
Тоби реализует функцию создания панели, которая создает диалоговую панель с помощью класса CFDialog. Он задает имя панели, подокно, положение и размер на основе входных параметров. Если создание панели не удается, он печатает сообщение и возвращает false. Он также добавляет функцию обновления диаграммы для обновления диаграммы. Тоби снова компилирует код, чтобы убедиться, что он не содержит ошибок.
В файл советника Тоби включает включаемый файл графической панели и создает объект класса панели с именем «панель» в разделе глобальных переменных. Он инициализирует панель в функции onInit и добавляет обработчик событий графика для передачи событий графика на панель. Тоби пишет тело обработчика события графика, вызывая функцию события графика панели с соответствующими параметрами.
Наконец, Тоби добавляет к функции onDeinit функцию уничтожения панели, которая уничтожает панель и указывает причину. Он снова компилирует код и тестирует его в MetaTrader. Тоби демонстрирует перетаскивание советника на график, демонстрируя функциональность панели. Он же и закрывает советник с помощью кнопки на панели.
Привет, меня зовут Тоби, и сегодня я покажу вам, как создать графическую панель на MQL5. На самом деле это вторая часть урока. В первой части мы создали простую панель с левой стороны, и если вы ее пропустили, то можете найти ссылку в описании. В сегодняшнем видео мы добавим несколько меток и кнопку на панель. В этом примере мы будем использовать советник прорыва временного диапазона. Если вам интересно узнать, как кодировать этот советник, на моем канале есть серия статей по программированию. Ссылку на первую часть вы также можете найти в описании.
Для начала переключимся в редактор MQL5 и начнем программировать. Здесь у нас есть подключаемый файл графической панели, а также советник прорыва временного диапазона, который мы модифицировали для отображения панели. Давайте перейдем к включаемому файлу и проверим введенные пользователем значения. Мы создадим метод под названием «проверить входные данные» в разделе закрытых методов нашего класса. После функции OnInit мы будем вызывать этот метод. Если метод возвращает false, мы также вернем false из функции OnInit. Таким образом, если входные данные недействительны, мы не будем двигаться дальше. Скомпилируем и идем дальше.
Теперь давайте начнем добавлять метки на панель. Нам нужно включить необходимые файлы классов для меток и кнопок. Перейдем к разделу include и включим «controls/label.mqh» для меток и «controls/button.mqh» для кнопок. После этого мы определим наши переменные метки. У нас будут метки для входов, магического числа, лотов, времени начала, продолжительности и времени закрытия. Скомпилируем и идем дальше.
В функции createPanel мы добавим метки на панель. Мы создадим метку ввода, используя переменную «M_L_Input». Мы установим текст, цвет и размер шрифта для метки. Затем мы прикрепим этикетку к панели. Мы повторим этот процесс и для других меток. Как только мы добавим все ярлыки, мы скомпилируем и проверим панель слева. Возможно, нам потребуется изменить положение меток для лучшего выравнивания. Скомпилируем и проверим.
Теперь давайте добавим кнопку на панель. Мы определим переменную «M_B_ChangeColor» типа «CButton». Мы установим положение, текст, цвет текста, цвет фона и размер шрифта для кнопки. Наконец, мы добавим кнопку на панель. После компиляции мы увидим кнопку на панели. На данном этапе у кнопки нет никакой функциональности, но мы добавим ее позже.
Далее изменим цвет фона и название шрифта панели. Для этого мы подключим файл «Defiance.mqh» и определим новые значения для настроек по умолчанию. Мы отменяем настройки имени шрифта и цвета фона по умолчанию, а затем определяем для них новые значения. Мы будем использовать имя шрифта «Consolas» и темно-серый цвет фона. После компиляции мы увидим обновленную панель с новым цветом фона и шрифтом.
Наконец, выведем на панель фактические значения из советника. Мы включим файл советника в наш подключаемый файл и получим доступ к входным переменным. Мы обновим метки фактическими значениями из советника. После компиляции мы увидим входные значения, отображаемые на панели.
На этом сегодняшний урок по созданию графической панели на MQL5 завершен. В следующей части мы добавим функционал кнопке и доделаем панель. Оставайтесь с нами, чтобы узнать больше!
Как создать графическую панель в mql5 | Часть 2/2
Как создать графическую панель в mql5 | Часть 2/2
Привет, это Тоби. Сегодня я покажу вам, как создать графическую панель на MQL5. Это вторая часть обучающей серии. В первой части мы создали простую панель с левой стороны. Если вы пропустили это, я дам ссылку на это здесь. В сегодняшнем видео мы добавим метки и кнопку на панель. В этом примере мы будем использовать советник прорыва временного диапазона. Если вы хотите узнать, как кодировать этот экспертный советник, на моем канале есть серия кодов. Я также прикреплю ссылку на первую часть здесь.
Давайте переключимся в редактор Media и начнем программировать. У нас есть включаемый файл графической панели и модифицированный файл советника прорыва временного диапазона, который отображает панель. Во включаемом файле мы создадим метод под названием «checkInputs» для проверки введенных пользователем значений. Мы будем вызывать этот метод перед созданием панели в функции OnInit. Если какой-либо из входных данных недействителен, мы отобразим сообщение об ошибке и вернем false. В противном случае мы продолжим создание панели.
Далее мы добавим метки и кнопку на панель. Чтобы использовать метки и кнопки, нам нужно подключить их файлы классов. Мы добавим в класс необходимые операторы включения для меток и кнопок. Затем мы определим частные переменные для меток и кнопки.
В функции CreatePanel после создания панели мы добавим метки и кнопку на панель. Мы установим их позиции, текст, цвет и размер шрифта. Наконец, мы добавим их на панель с помощью метода Add.
Скомпилируем код и проверим панель. Ярлыки и кнопка должны отображаться на панели. Мы также изменим цвет фона и название шрифта панели для лучшего внешнего вида. Чтобы отобразить фактические значения советника на панели, мы включим файл советника в раздел include. Затем в функции CreatePanel мы получим входные значения от советника и отобразим их на метках. Скомпилируем код и снова проверим панель. Метки теперь должны отображать фактические входные значения советника. Мы повторим этот процесс для всех входных значений.
Как только мы выполним эти шаги, графическая панель с метками и кнопкой будет готова. Теперь мы можем приступить к добавлению значений для остальных меток на панели. Мы сделаем это так же, как и для метки магического числа. Вернемся к нашему включаемому файлу и найдем раздел, в котором мы создаем метки. Здесь мы добавим код для отображения значений лотов, времени начала, продолжительности и времени закрытия.
Для метки лотов мы заменим текст «магическое число» на «лоты» и обновим координату y до 70. Для метки времени начала мы изменим имя на «время начала» и обновим y- на 90. Для метки продолжительности мы изменим имя на «длительность» и обновим координату Y на 110. Наконец, для метки времени закрытия мы изменим имя на «время закрытия» и обновим y-координата на 130.
После внесения этих изменений мы можем скомпилировать код.
Теперь, если мы посмотрим на наш советник и скомпилируем его, мы сможем увидеть фактические значения для лотов, времени начала, продолжительности и времени закрытия на панели. Далее давайте реализуем функциональность кнопки. В настоящее время, когда мы нажимаем кнопку, она не выполняет никаких действий. Давайте изменим это. В нашем включаемом файле мы найдем раздел, в котором мы создаем кнопку. Здесь мы можем добавить обработчик события нажатия кнопки. Для этого воспользуемся функцией OnChartEvent. Внутри обработчика событий мы можем указать действие, которое мы хотим выполнить при нажатии кнопки.
А пока давайте отобразим сообщение при нажатии кнопки. Мы можем использовать функцию Print для вывода сообщения на терминал. После добавления обработчика событий мы можем скомпилировать код.
Теперь, если мы запустим советник и нажмем кнопку, мы должны увидеть сообщение, отображаемое в терминале.
Вот и все! Мы успешно создали графическую панель на MQL5 с метками и кнопкой. Метки отображают входные значения из советника, а кнопка имеет обработчик события клика.
Не стесняйтесь добавлять дополнительные функции к кнопке или настраивать панель в соответствии с вашими требованиями. Не забудьте скомпилировать включаемый файл и файл советника, чтобы изменения вступили в силу.
Динамический размер позиции в mql5 | Программирование МТ5
Динамический размер позиции в mql5 | Программирование МТ5
Привет, это Тоби. Сегодня я покажу вам, как рассчитать размер динамического лота в MQL5, чтобы вы могли добиться результатов, подобных показанному здесь. Вы можете попробовать это сами.
Хорошо, давайте начнем. В этом видео мы добавим динамический расчет размера лота в стратегию, которая в настоящее время использует фиксированный размер лота. Это позволит нам рисковать определенной суммой в каждой сделке, например, 100 долларами или процентом от баланса счета. Кроме того, мы проведем ретроспективное тестирование, чтобы определить, можно ли улучшить стратегию с помощью динамического расчета размера лота. Я также познакомлю вас со стратегией и ее настройками.
Для начала давайте переключимся в MetaEditor и начнем программировать. Здесь мы находимся в редакторе MetaEditor, и для этой демонстрации я буду использовать «Time Range EA», чтобы включить динамический расчет размера лота. Однако вы можете использовать любой другой советник по вашему выбору. Ранее мы писали этот советник в серии на нашем канале. Если вы хотите использовать тот же советник, я дам ссылку на первую часть.
Во-первых, давайте откроем файл Time Range EA. Теперь давайте сохраним его под новым именем. Нажмите «Сохранить как» и назовите его «Динамические лоты временного диапазона EA». Отлично, файл сохранен.
В этом советнике мы добавим динамический расчет размера лота. Скомпилируем файл и проверим входные данные в тестере стратегий. Откройте тестер стратегий в платформе MetaTrader 5 и при необходимости обновите советники. Теперь выберите «Динамические лоты временного диапазона советника». На вкладке «Входные данные» вы увидите ввод «Размер лота», который в настоящее время принимает фиксированное значение. Нам нужно изменить это, чтобы мы могли вводить значения риска в размере 100 долларов США за сделку или процент от баланса счета.
Вернувшись в MetaEditor, мы добавим динамический ввод размера лота в разделе «ввод». Создайте некоторое пространство после «Магического числа» и определите перечисление (перечисление) под названием «Перечисление режима лота». Это перечисление будет иметь три варианта: «Фиксированный», «Деньги» и «Процент от счета». Это позволит нам легко выбрать нужный режим лота. Предоставьте комментарии для каждой опции, чтобы улучшить читабельность.
Далее мы будем использовать это перечисление в качестве входных данных. Определите «вход» с типом нашего «Перечисления режима лота» и назовите его, например, «Режим лота на входе». Установите значение по умолчанию «Режим лота фиксированный» и добавьте комментарий, описывающий цель этого ввода.
Скомпилируйте код и проверьте, как он выглядит в тестере стратегий. Вы заметите раскрывающееся меню «Режим лота», позволяющее выбирать между «Фиксированный», «Лот, основанный на деньгах» и «Лот, основанный на процентах от счета».
Теперь давайте изменим ввод «Размер лота», чтобы он соответствовал различным значениям в зависимости от выбранного режима лота. Измените тип ввода на «двойной» и измените комментарий, чтобы отразить параметры: «Лот/деньги/процент». Снова скомпилируйте код и проверьте тестер стратегий, чтобы убедиться, что изменения отражены.
Чтобы проверить ввод пользователя, мы изменим функцию «CheckInput». Добавьте проверки для каждого параметра режима лота, чтобы убедиться, что ввод находится в допустимом диапазоне. Для режима фиксированного лота размер лота должен быть выше нуля и не превышать определенного предела (например, 10 лотов). Отображать соответствующее сообщение об ошибке, если эти условия не выполняются. Повторите этот процесс для режимов лота «Деньги» и «Процент от счета», соответствующим образом настроив лимиты. Кроме того, если выбран один из этих двух режимов лота, нам нужно будет проверить, активен ли стоп-лосс.
Краткое изложение шагов, связанных с реализацией динамического расчета размера лота в MQL5:
Следуя этим шагам, вы можете обеспечить динамический расчет размера лота на основе желаемого риска на сделку и ограничений вашей торговой стратегии.
Трейлинг-стоп в mql5 | Программирование МТ5
Трейлинг-стоп в mql5 | Программирование МТ5
Сегодня я пошагово расскажу, как добавить тренировочный стоп-лосс в любой советник на MQL5. К концу этого видео мы также проведем тестирование на истории, чтобы оценить, можно ли улучшить нашу стратегию с помощью торгового стоп-лосса. Итак, приступим.
Прежде чем мы начнем программировать, давайте разберемся с основной концепцией торгового стоп-лосса. Представьте, что мы открываем позицию по определенной цене. Изначально наш стоп-лосс выставляется на определенном уровне. По мере того, как цена движется в нашу пользу, мы отслеживаем стоп-лосс за ценой, всегда сохраняя одно и то же расстояние. Если цена откатывается, стоп-лосс остается на месте. Поскольку цена продолжает двигаться в нашем направлении, мы продолжаем отслеживать наш стоп-лосс. В конце концов, цена может развернуться, что приведет к закрытию нашей позиции. Основная идея состоит в том, чтобы получить прибыль от значительных рыночных тенденций и выйти из позиции, когда тренд закончится.
Теперь давайте переключимся в MetaEditor, чтобы начать программировать. Вы можете использовать для этой цели любой советник, но для этого видео мы будем использовать "Timeline GA" с динамическим размером лота, который мы закодировали в предыдущем видео. Откройте файл и сохраните его как новый советник с именем «Stop Loss». Скомпилируйте код, чтобы убедиться, что все работает без ошибок.
Чтобы добавить торговый стоп-лосс в наш советник, нам нужно выполнить несколько шагов. Во-первых, давайте добавим дополнительный ввод для трейлинг-стопа. В разделе ввода добавьте логическую входную переменную с именем «EnableTrailingStopLoss» и установите для нее значение по умолчанию «false». Этот ввод позволит нам активировать или деактивировать торговый стоп-лосс. Скомпилируйте код, чтобы включить изменения.
Теперь вернитесь на платформу MetaTrader и откройте тестер стратегий. Выберите наш советник "Динамические лоты с трейлинг стоп лосс". На вкладке ввода вы найдете недавно добавленный ввод «EnableTrailingStopLoss». Переключите его с «false» на «true», чтобы активировать торговый стоп-лосс.
Далее напишем функцию, которая будет обновлять наш стоп-лосс. Мы поместим эту функцию перед функцией «ClosePosition». В функции сначала проверьте, включили ли мы торговый стоп-лосс и существует ли существующий стоп-лосс для позиции. Если нет, то нет необходимости продолжать, поэтому вернитесь из функции.
Теперь давайте пройдемся по всем открытым позициям. Для каждой позиции мы будем проверять, принадлежит ли она нашему советнику. Получите тип позиции (покупка или продажа), текущие значения стоп-лосса и тейк-профита. Рассчитайте новый стоп-лосс на основе текущей цены и диапазона символа, умноженных на заданный пользователем процент стоп-лосса. Отрегулируйте стоп-лосс в зависимости от типа позиции.
Прежде чем изменить позицию с новым стоп-лоссом, нам нужно выполнить несколько проверок. Во-первых, убедитесь, что новый стоп-лосс отличается от текущего стоп-лосса, чтобы избежать ошибок. Кроме того, некоторые брокеры устанавливают стоп-уровень, предотвращая установку стоп-лосса слишком близко к текущей цене. Проверьте, соответствует ли новый стоп-лосс стоп-уровню, и если нет, перейдите к следующей позиции.
Наконец, измените позицию с новым стоп-лоссом и текущим значением тейк-профита. Если модификация не удалась, напечатайте сообщение об ошибке, указывающее на возникшую проблему. Возврат из функции, чтобы избежать обработки каких-либо дальнейших позиций.
Скомпилируйте код, чтобы убедиться в отсутствии ошибок или предупреждений. Теперь функция обновления стоп-лосса завершена.
Чтобы интегрировать эту функцию в наш советник, нам нужно вызвать ее внутри функции "OnTick". Поместите вызов функции после проверки на прорывы. Это гарантирует, что стоп-лосс обновляется для каждого полученного тика.
Скомпилируйте код в последний раз, чтобы подтвердить изменения. Теперь наш советник имеет возможность отслеживать стоп-лосс на основе заданных пользователем параметров. Мы добавили входную переменную для включения или отключения функции скользящего стоп-лосса, а также реализовали функцию для обновления стоп-лосса для открытых позиций.
Теперь давайте приступим к тестированию нашего советника, чтобы оценить эффективность торгового стоп-лосса. В платформе MetaTrader откройте тестер стратегий и выберите для тестирования наш советник "Stop Loss". Выберите нужный символ и таймфрейм для теста.
На вкладке «Входные данные» вы найдете различные параметры для настройки, включая процент скользящего стоп-лосса и размер лота. Настройте эти параметры в соответствии с вашими предпочтениями и торговой стратегией.
Нажмите кнопку «Пуск», чтобы начать тестирование на истории. Советник будет совершать сделки на основе заданных параметров, а стоп-лосс будет динамически корректироваться по мере движения цены в нашу пользу.
После завершения ретроспективного тестирования вы можете просмотреть результаты на вкладках «Результаты» и «График». Обратите внимание на прибыль и убыток, просадку и другие показатели эффективности, чтобы оценить влияние скользящего стоп-лосса на стратегию.
Если результаты тестирования на истории удовлетворительны, вы можете рассмотреть возможность использования советника с торговым стоп-лоссом на вашем реальном торговом счете. Однако очень важно тщательно оценить эффективность стратегии и провести дальнейшее тестирование или оптимизацию, прежде чем принимать какие-либо торговые решения.
В заключение, мы успешно добавили торговый стоп-лосс в наш советник на MQL5. Отслеживая стоп-лосс за ценой, мы стремимся максимизировать прибыль во время благоприятных рыночных тенденций и минимизировать убытки, когда тенденция меняется. Не забудьте тщательно протестировать любые модификации или стратегии, прежде чем применять их на реальных торговых счетах.
Обратите внимание, что это общее руководство, и перед внедрением таких изменений важно иметь хорошее представление о принципах программирования и торговли. Всегда проявляйте осторожность и подумайте о консультации с профессиональным финансовым консультантом, если это необходимо.
Код простого советника RSI на mql5 | Программирование МТ5
Код простого советника RSI на mql5 | Программирование МТ5
В этом уроке Тоби представляет себя и объясняет цель урока, которая состоит в том, чтобы продемонстрировать, как написать простой советник (EA) с помощью редактора MetaEditor. Советник будет использовать индикатор RSI для генерации сигналов на покупку и продажу на основе условий перепроданности и перекупленности. Тоби также упоминает, что в советник будут включены стоп-лосс, тейк-профит и возможность выхода из сделок при обратном сигнале.
Тоби начинает с создания нового файла советника в MetaEditor и очищает существующий код. Затем он определяет входные параметры для советника, такие как магическое число, размер лота, период RSI, уровень RSI, стоп-лосс, тейк-профит и возможность закрытия сделок при обратном сигнале. Он присваивает этим входным параметрам значения по умолчанию и добавляет комментарии для описания каждого из них.
После определения входных параметров Тоби переходит к созданию раздела глобальных переменных. Он объявляет переменные для дескриптора индикатора RSI, буфер для хранения значений RSI, переменную типа тика для хранения текущего тика, торговый объект для открытия и закрытия позиций и две переменные даты и времени, чтобы обеспечить открытие только одной сделки на бар. Он также включает необходимую директиву #include для доступа к классу CTrade.
Затем Тоби реализует проверку входных параметров в функции OnInit(). Он проверяет, соответствует ли каждый входной параметр заданным критериям, и отображает сообщение об ошибке, если какой-либо вход недействителен. Он использует функцию Alert() для вывода сообщений об ошибках и возвращается из функции OnInit() в случае возникновения ошибки.
В дополнение к проверке ввода Тоби устанавливает магическое число для торгового объекта и создает дескриптор индикатора RSI. Он проверяет, было ли создание дескриптора успешным, и выводит сообщение об ошибке, если это не удается. Также он задает серию для буфера RSI, чтобы упростить работу со значениями.
В функции OnDeinit() Тоби выпускает индикатор RSI, используя функцию IndicatorRelease(), чтобы высвободить ресурсы.
Переходя к функции OnTick(), Тоби начинает с получения текущего тика с помощью функции SymbolInfoTick(). Он проверяет успешность извлечения тика и выводит сообщение об ошибке, если оно не удалось. Он присваивает цены спроса и предложения текущего тика глобальной переменной currentTick для будущего использования.
Затем Тоби извлекает значения индикатора RSI с помощью функции CopyBuffer(). Он присваивает значения переменной с именем rsiValues и проверяет, было ли извлечение успешным. Он сохраняет два значения RSI в буфере для дальнейшего анализа.
Получив необходимые данные, Тоби теперь может приступить к реализации торговой логики в функции OnTick(). Однако приведенный в тексте код обрезан, а остальные детали отсутствуют.
Учебное пособие охватывает первоначальную настройку советника, включая определение входных параметров, проверку входных данных, объявление глобальной переменной, работу с индикатором RSI и получение текущего тика. Учебное пособие закладывает основу для реализации торговой логики на последующих этапах.
Пользовательский индикатор канала Дончиана | Программирование МТ5
Пользовательский индикатор канала Дончиана | Программирование МТ5
Привет, это Тоби. Сегодня я покажу вам, как написать пользовательский индикатор на MQL5. Мы создадим индикатор канала Дончиана, а затем используем его для разработки прибыльного советника (EA). Как только советник будет готов, мы проведем несколько бэктестов, чтобы оценить его производительность. Как видно из результатов, стратегия работает на удивление хорошо. Давайте начнем!
Теперь давайте проанализируем результаты в тестере стратегий. Советник Donchian Channel показывает многообещающие результаты. Итак, наш первый шаг — определить стратегию. Мы напишем собственный индикатор Donchian Channel и используем его для создания советника. Обрисуем основную идею стратегии на графике.
Синие линии представляют индикатор канала Дончиана, который мы будем кодировать в этом видео. Канал Дончиана отображает самый высокий максимум и самый низкий минимум предыдущих n-баров. Многие трейдеры используют канал Дончиана для разработки стратегий прорыва, когда они открывают сделку на покупку, когда цена пересекает верхнюю полосу. Однако для этого советника мы рассмотрим противоположный подход. Мы открываем сделку на продажу всякий раз, когда цена пересекает верхнюю полосу канала Дончиана. Точно так же мы открываем позицию на покупку, когда цена пересекает нижнюю полосу канала Дончиана. Мы также установим стоп-лосс в пунктах или в процентах от канала. Кроме того, мы можем добавить фильтр в советник Donchian Channel EA, чтобы учесть размер канала.
Теперь давайте перейдем в MetaEditor, чтобы начать кодирование нашего пользовательского индикатора Donchian Channel.
В Meta Editor начнем с создания нового файла пользовательского индикатора. Мы немного подчистим код, удалив ненужные комментарии и выровняв скобки. Далее мы определим свойства индикатора. Укажем, что он должен отображаться в основном окне графика, а не в отдельном окне. Мы также объявим количество буферов и графиков, которые будет иметь наш индикатор, в данном случае их два.
Двигаясь дальше, мы определим входные данные для нашего пользовательского индикатора. Эти входные данные позволяют пользователям настраивать индикатор при его применении к графику. Мы создадим входные данные для периода канала Дончиана, смещения канала (в процентах) и цвета канала.
После компиляции кода перейдем к разделу Глобальные переменные, где определим необходимые переменные для индикатора. Мы создадим буферы для верхнего и нижнего значений канала Дончиана и дополнительные переменные для хранения верхнего и нижнего значений, а также индекса первого бара.
В функции OnInit мы инициализируем наши буферы и установим короткое имя индикатора, которое будет использоваться для идентификации индикатора на графике.
Наконец, в функции OnCalculate мы выполним расчет для индикатора Donchian Channel. Мы проверим, достаточно ли баров на графике, чтобы продолжить. Если нет, мы вернем ноль. В противном случае мы будем рассчитывать верхнее и нижнее значения для каждого бара, используя цены открытия. Мы будем хранить эти значения в соответствующих буферах.
Как только код будет скомпилирован без каких-либо ошибок или предупреждений, мы можем протестировать наш пользовательский индикатор. Откройте график, перейдите в навигатор и найдите индикатор My Donchian Channel. Перетащите его на график. В настройках индикатора укажите желаемый период, смещение и цвет.
Удивительный торговый бот RSI на mql5! | Программирование МТ5
Удивительный торговый бот RSI на mql5! | Программирование МТ5
Привет, это Тоби, и сегодня я покажу вам, как написать стратегию со 100% винрейтом. В этом руководстве мы изменим существующий советник (EA) и добавим фильтр к индикатору RSI. Я проведу вас через процесс кодирования шаг за шагом. Давайте начнем!
Шаг 1: Настройка стратегии Работать будем в редакторе MetaEditor. Откройте советник, который мы создали в предыдущем видео. Если вы еще не смотрели его, я дам вам ссылку, чтобы вы могли наверстать упущенное. Сохраните файл под новым именем, например «RSI_MA_Filter_EA».
Шаг 2: Изменение входных данных Для реализации фильтра нам нужно добавить входные данные периода скользящего среднего. Мы также включим ввод для временного интервала, на котором работает скользящая средняя. Мы сохраним стоп-лосс, тейк-профит и противоположные входные сигналы, как они есть.
Шаг 3: Настройка глобальных переменных В разделе глобальных переменных нам нужно переименовать дескриптор и буфер для индикатора RSI, чтобы отличать их от скользящей средней. Мы добавим ручку и буфер для скользящей средней. Кроме того, мы можем удалить ненужные переменные, связанные с покупкой во время открытия и продажей во время открытия.
Шаг 4: Внесение изменений в функцию onInit В функцию onInit мы добавим проверку ввода периода скользящей средней. Мы также изменим дескриптор RSI, чтобы использовать цену открытия вместо цены закрытия. Затем мы создадим дескриптор и буфер для индикатора скользящей средней.
Шаг 5: Обновление функции Untick В рамках функции Untick мы сначала проверим, является ли текущий тик тиком открытия нового бара. Если нет, то вернемся и будем ждать следующего тика открытия бара. Мы добавим пользовательскую функцию для выполнения этой проверки. Затем мы получим значения скользящего среднего и сохраним их в буфере. Мы также изменим условия открытия позиций на покупку и продажу, включив в них фильтр скользящих средних.
Шаг 6: Компиляция и тестирование После внесения всех необходимых изменений мы скомпилируем код, чтобы проверить наличие ошибок. Если все успешно компилируется, можно переходить к тестированию советника в тестере стратегий. Мы проведем визуальный тест, используя исторические данные с 2012 года по настоящее время, выбрав соответствующие входные данные для RSI и периодов скользящих средних, стоп-лосс, тейк-профит и возможность закрытия сделок при противоположном сигнале.
Следуя этому руководству, вы узнали, как кодировать стратегию со 100% винрейтом. Мы модифицировали существующий советник и добавили в индикатор RSI фильтр скользящих средних. Не забудьте сохранить файл и скомпилировать его без ошибок. Теперь вы можете протестировать стратегию на платформе MetaTrader 5 с помощью тестера стратегий. Удачи в ваших будущих начинаниях по кодированию!