Новое Распределяем каналы MAX по категориям и территориям. Читать новость
Открытый канал ID 73010515462679

Mql Master канал

Канал о программировании и разработке торговых роботов. Уроки, примеры, коды, библиотеки. Присоединяйся.

Россия
Открыть в MAX

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

💻 MQL5 НА ПРАКТИКЕ: КАК ПОСЧИТАТЬ ОТКРЫТЫЕ ПОЗИЦИИ?

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

В MQL5 для этого можно использовать функцию `PositionsTotal()`.

📌 Простой пример:

```cpp
void OnStart()
{
int total = PositionsTotal();

Print("Всего открытых позиций: ", total);
}
```

🔍 Как это работает?

✅ `PositionsTotal()` возвращает общее количество открытых позиций в текущем торговом счёте.

✅ Результат сохраняется в переменную `total`.

✅ Функция `Print()` выводит количество позиций в журнал терминала.

Например, если на счёте открыто 3 позиции, в журнале появится:

`Всего открытых позиций: 3`

⚠️ Важно: эта функция считает позиции по всему счёту, а не только позиции конкретного торгового робота. Если нужно считать сделки только по определённому символу или Magic Number, необходимо дополнительно перебрать позиции и проверить их параметры.

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

🎓 Больше о программировании торговых роботов — на MQL Master:
https://mql-master.ru/

#MQL5 #Программирование #MetaTrader5 #Советники
Просмотры: 15
Перейти в пост Открыть в MAX Сообщить о неточности
💻 MQL — ЯЗЫК НАСТОЯЩЕГО И БУДУЩЕГО!

🤔 Думаете, программирование на MQL — это только про торговых роботов? На самом деле возможности гораздо шире!

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

🚀 Почему стоит изучать MQL5 уже сегодня?

✅ Автоматизация — превращайте торговые правила в работающие алгоритмы.

✅ Востребованные навыки — развивайтесь в направлении алгоритмической торговли и разработки программного обеспечения.

✅ Свои проекты — создавайте индикаторы, советники и полезные инструменты для MetaTrader.

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

🔥 Самое интересное — вам не обязательно быть профессиональным программистом, чтобы начать. Важно двигаться последовательно: изучать основы языка, разбираться в примерах и постепенно переходить к собственным проектам.

🎓 На MQL Master мы разбираем программирование торговых систем с нуля и учимся применять знания на практике.

👉 Начните свой путь в MQL5: https://mql-master.ru/

Будущее за теми, кто не просто пользуется готовыми решениями, а умеет создавать собственные! 💪

#MQL5 #Программирование #MetaTrader #АлгоритмическаяТорговля #MQLMaster
Просмотры: 16
Перейти в пост Открыть в MAX Сообщить о неточности

Репост из «Trading Go Канал»

🤖 Автоматизация торговой стратегии проще, чем кажется!

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

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

📌 В статье вы узнаете:
✅ Как превратить торговую идею в алгоритм.
✅ Из каких частей состоит торговый робот.
✅ Как правильно проводить тестирвоание стратегии.
✅ Какие ошибки могут ухудшить результат.
✅ На что обратить внимание при изучении VR Smart Grid и рисков сеточной торговли.

📈 Я рекомендую не ограничиваться теорией, а проверять торговые системы в тестере стратегий и на демо-счёте.

👉 Читать полную статью:
https://trading-go.ru/beginner/avtomatizatsiya-torgovoy-strategii-proshche-chem-kazhetsya/?utm_source=max

💻 Хотите научиться создавать собственных торговых роботов? Изучите программу обучения программированию на MQL5:
https://mql-master.ru/

Подписывайтесь на мой канал в MAX, чтобы не пропускать новые публикации о трейдинге, торговых роботах и автоматизации! 🚀
Просмотры: 27
Перейти в пост Открыть в MAX Сообщить о неточности
: показывать основные параметры на графике через Comment(), а важные события записывать через Print().

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

#property strict
#property version "1.00"

// Запуск советника
int OnInit()
{
Print("Советник запущен. Символ: ", _Symbol);

return INIT_SUCCEEDED;
}

// Обработка нового тика
void OnTick()
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

double spread = (ask - bid) / _Point;

Comment("Инструмент: ", _Symbol,
"\nBid: ", DoubleToString(bid, _Digits),
"\nAsk: ", DoubleToString(ask, _Digits),
"\nСпред: ", DoubleToString(spread, 1), " пунктов");
}

// Удаление советника
void OnDeinit(const int reason)
{
Comment("");

Print("Советник остановлен. Причина: ", reason);
}

Что делает программа?

При запуске функция OnInit() записывает в журнал название символа, на котором работает советник.
Затем при каждом новом тике вызывается OnTick(). Программа получает Bid и Ask, рассчитывает разницу между ценами и выводит значения на график. В этом примере спред выражен в пунктах через _Point; конкретные особенности расчёта торговых издержек зависят от инструмента и условий брокера.

Наконец, OnDeinit() очищает комментарий после удаления советника и записывает сообщение об остановке. Параметр reason содержит код причины деинициализации.

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

5. Три ошибки, которых стоит избегать
Ошибка № 1. Ожидать, что Print() выведет текст на график. Эта функция пишет в журнал. Для отображения информации непосредственно на графике используйте Comment().
Ошибка № 2. Выводить слишком много сообщений. Если вызывать Print() при каждом тике, журнал может быстро переполниться ненужными записями. Лучше регистрировать события, которые действительно помогают понять работу программы.
Ошибка № 3. Неправильно форматировать числа. Значения типа double могут выводиться с большим количеством знаков после запятой. Если необходимо контролировать точность представления, применяйте DoubleToString() или PrintFormat().
Дополнительно учитывайте, что Comment() и Print() не выполняют обычный вывод во время оптимизации в тестере стратегий. Если вы проверяете советник в таком режиме, для получения статистики и диагностики могут потребоваться другие средства.


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

Если вы хотите освоить MQL5 глубже и научиться самостоятельно создавать торговых роботов для MetaTrader 5, загляните в обучающие материалы MQL Master: https://mql-master.ru/

Теги: MQL5, программирование на MQL5, MetaTrader 5, Comment, Print, отладка советника, торговый робот, обучение программированию, MQL Master
Просмотры: 33
Перейти в пост Открыть в MAX Сообщить о неточности
MQL5 для начинающих: как вывести комментарий на график и сообщение через Print()

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

Для решения этих задач в MQL5 есть две очень полезные функции: Comment() и Print(). Первая позволяет выводить информацию непосредственно на график, а вторая записывает сообщения в журнал терминала. Разберём их на простых примерах и напишем небольшой советник, который показывает текущие цены Bid и Ask. Эти инструменты станут основой для дальнейшей отладкп торговых алгоритмов.

1. Как вывести комментарий на график с помощью Comment()
Функция Comment() отображает текст в левом верхнем углу графика MetaTrader 5. Она удобна, когда нужно видеть состояние программы непосредственно во время работы советника.
Самый простой пример выглядит так:

void OnTick()
{
Comment("Мой первый советник работает!");
}

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

void OnTick()
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

Comment("Символ: ", _Symbol,
"\nBid: ", DoubleToString(bid, _Digits),
"\nAsk: ", DoubleToString(ask, _Digits));
}

В результате на графике появятся три строки: название торгового инструмента, текущая цена Bid и цена Ask.
Обратите внимание на \n. Это специальный символ переноса строки. С его помощью можно организовать вывод информации в несколько строк, чтобы комментарий оставался читаемым.

Функция DoubleToString() позволяет преобразовать числовое значение в строку с указанным количеством знаков после запятой. В данном примере используется _Digits, чтобы отображать цены с количеством знаков, соответствующим торговому инструменту.
Важно знать ещё одну особенность: при повторном вызове Comment() прежний текст заменяется новым. Если вы хотите очистить комментарий, можно выполнить команду:
Comment("");


2. Как вывести сообщение с помощью Print()
Функция Print() решает другую задачу. Она записывает текст и значения переменных в журнал программы, а не непосредственно на график.
Пример:

void OnTick()
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

Print("Текущая цена Bid: ", bid);
}

Когда поступает очередной тик, терминал добавляет запись с текущей ценой Bid. Посмотреть такие сообщения можно в окне инструментов терминала, во вкладке Experts («Эксперты»).

На первый взгляд всё просто. Но есть нюанс: функция OnTick() вызывается при поступлении новых тиков. Если активно торгуемый инструмент получает много котировок, журнал быстро заполнится сообщениями.

Поэтому в реальных советниках не стоит без необходимости вызывать Print() на каждом тике. Обычно эту функцию используют для фиксации важных событий: запуска советника, открытия позиции, ошибки выполнения торгового запроса или срабатывания определённого условия.
Например:
Print("Советник запущен");
Print("Получен торговый сигнал");
Print("Ошибка при отправке ордера");
Последнее сообщение, конечно, следует выводить только тогда, когда действительно произошла ошибка, а её причину желательно дополнительно записать в журнал.


3. В чём разница между Comment() и Print()
Обе функции предназначены для вывода информации, но применяются в разных ситуациях.
Comment() удобна для визуального контроля состояния советника. Например, можно показывать на графике текущий спред, направление тренда, количество открытых позиций или значение индикатора.
Print() лучше подходит для отладки и записи событий. С её помощью проще выяснить, какая ветка кода выполнилась, какое значение получила переменная и на каком этапе появилась ошибка.
Можно использовать обе функции одновременно
Просмотры: 28
Перейти в пост Открыть в MAX Сообщить о неточности
Массивы в MQL и их применение в торговле

Массив — это набор однотипных значений с доступом по индексу, и для разработчика робота это один из главных инструментов. Одномерный массив хранит одну последовательность, например значения индикатора или цены закрытия. Многомерный добавляет второе измерение и позволяет держать связанные данные вместе. За размером следит ArraySize, меняет его ArrayResize, а направление индексации задаёт ArraySetAsSeries: у обычного массива индекс 0 — первый элемент, у таймсерии — самый свежий бар.

Данные обычно получают через CopyBuffer (значения индикатора) и CopyRates (бары цены) — они копируют диапазон в подготовленный массив. Массивы применяют для буферов, истории цен, разбора позиций и сделок, расчёта среднего и поиска максимума. Типичные ошибки: выход за границу массива, путаница индексации и ArrayResize без ArraySetAsSeries.

// =============================================================================================== //
// = Средняя цена закрытия за последние N баров = //
// =============================================================================================== //
double AverageClose(int count)
{
double closes[];
ArraySetAsSeries(closes, true); // индекс 0 — свежий бар
ArrayResize(closes, count);

// === Копируем историю цен ===
if(CopyClose(_Symbol, _Period, 0, count, closes) <= 0)
return 0.0;

// === Среднее по массиву ===
double sum = 0.0;
for(int i = 0; i < ArraySize(closes); i++)
sum += closes[i];

return sum / count;
}
Подписывайтесь на канал, чтобы разбирать MQL5 шаг за шагом. Больше учебных материалов на https://max.ru/channel_mqlmasters и в Телеграме: https://t.me/mqlmasters.

#MQL5 #массивы #программирование #MetaTrader5 #MQLMaster
Просмотры: 39
Перейти в пост Открыть в MAX Сообщить о неточности
Как создавать собственные функции в MQL

Пока торговый робот небольшой, весь его код помещается в OnTick. Но как только появляются расчёт лота, фильтры и работа с позициями, функция становится громоздкой. На помощь приходят собственные функции: один раз пишете именованный блок, а затем вызываете его по имени в любом месте программы. В MQL5 объявление начинается с типа возвращаемого значения, затем идёт имя, а в скобках — параметры. Если функция ничего не возвращает, вместо типа пишут void.

Вот пример функции, которая считает объём позиции под заданный риск:

// =============================================================================================== //
// = Функция рассчитывает размер лота по риску и расстоянию до Stop Loss = //
// =============================================================================================== //
double CalcLot(double riskPercent, double slPoints)
{
double riskMoney = AccountInfoDouble(ACCOUNT_BALANCE) * riskPercent / 100.0;
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);

// === Стоимость одного пункта при объёме в один лот ===
double pointValue = tickValue * (point / tickSize);
double lot = riskMoney / (slPoints * pointValue);

// === Приводим объём к шагу и границам брокера ===
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
lot = MathRound(lot / step) * step;
lot = MathMax(SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN), lot);
lot = MathMin(SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX), lot);

return lot;
}
Вызов теперь выглядит коротко: double lot = CalcLot(1.0, 300);. Функции делают код читаемым и позволяют править логику в одном месте, а не по всему проекту. Подписывайтесь на канал, чтобы не пропускать новые уроки по MQL5 — материалы выходят регулярно. Больше учебных материалов также на https://max.ru/channel_mqlmasters и в Телеграме: https://t.me/mqlmasters.

#MQL5 #функции #программирование #MetaTrader5 #MQLMaster
Просмотры: 27
Перейти в пост Открыть в MAX Сообщить о неточности
Циклы for и while в торговых алгоритмах

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

Разберём пример подсчёта общей прибыли всех позиций:

// ==== Обход позиций через for ====
double totalProfit = 0;
for (int i = 0; i < PositionsTotal(); i++)
{
if (PositionGetTicket(i) > 0)
totalProfit += PositionGetDouble(POSITION_PROFIT);
}
Здесь for аккуратно перебирает позиции от первой до последней, а накопление суммы делает обработку группы сделок простой. Управлять перебором помогают операторы break и continue: первый прерывает цикл досрочно, второй пропускает ненужную итерацию.

Освоив циклы, вы научитесь писать роботов, которые уверенно работают с множеством ордеров и рыночных значений. Подписывайтесь на канал, чтобы не пропускать новые уроки по MQL5 — материалы выходят регулярно. Больше учебных материалов также на https://max.ru/channel_mqlmasters и в Телеграме: https://t.me/mqlmasters.

#MQL5 #циклы #for #while #MQLMaster
Просмотры: 21
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «Mql Master канал» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти