ISTORE2021
Телеграм E-mail

Индикатор MACD: Как он может изменить вашу торговлю на MetaTrader

Разбор исходного кода советника MACD для MetaTrader 4

В данной статье мы подробно рассмотрим исходный код советника, который реализует стратегию торговли на основе индикатора MACD в платформе MetaTrader 4 (MT4). Это поможет вам понять, как работает код, и даст возможность модифицировать его под ваши собственные нужды.

MetaTrader 4 — это популярная платформа для онлайн-трейдинга, которая позволяет пользователям разрабатывать, тестировать и запускать автоматические торговые системы (советники) с использованием языка программирования MQL4. Язык MQL4 позволяет трейдерам автоматизировать свою торговлю, используя различные индикаторы и торговые стратегии.

Структура кода

1. Заголовок и первичные настройки

//+------------------------------------------------------------------+
//|                                         MACD Expert Advisor.mq4  |
//|                               Copyright 2025, forex-robot.store. |
//|                                       https://forex-robot.store/ |
//+------------------------------------------------------------------+
#property strict

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

2. Параметры индикатора и ордеров

// Параметры индикатора MACD
input int MACD_Fast_EMA = 12;     // Период быстрой EMA
input int MACD_Slow_EMA = 26;     // Период медленной EMA
input int MACD_Signal_SMA = 9;    // Период сигнальной линии
// Параметры ордера
input double TakeProfit = 50;      // Тейк-профит в пунктах
input double StopLoss = 50;        // Стоп-лосс в пунктах
input double LotSize = 0.1;        // Размер лота

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

3. Основная функция OnTick()

void OnTick()
{
    // Проверяем, есть ли уже открытые ордера
    if (CheckOpenOrders() > 0) {
        return; // Если есть открытые ордера, выходим из функции
    }
    // Получаем значения MACD
    double macdCurrent, macdSignal, macdPrevious, macdSignalPrevious;
    // Получаем текущие значения MACD
    macdCurrent = iMACD(Symbol(), 0, MACD_Fast_EMA, MACD_Slow_EMA, MACD_Signal_SMA, PRICE_CLOSE, MODE_MAIN, 0);
    macdSignal = iMACD(Symbol(), 0, MACD_Fast_EMA, MACD_Slow_EMA, MACD_Signal_SMA, PRICE_CLOSE, MODE_MAIN, 1);
    macdPrevious = iMACD(Symbol(), 0, MACD_Fast_EMA, MACD_Slow_EMA, MACD_Signal_SMA, PRICE_CLOSE, MODE_MAIN, 1);
    macdSignalPrevious = iMACD(Symbol(), 0, MACD_Fast_EMA, MACD_Slow_EMA, MACD_Signal_SMA, PRICE_CLOSE, MODE_MAIN, 2);
    // Условия для открытия ордеров
    if (macdCurrent > macdSignal && macdPrevious <= macdSignalPrevious) {
        OpenBuy();
    }
    else if (macdCurrent < macdSignal && macdPrevious >= macdSignalPrevious) {
        OpenSell();
    }
}

Функция OnTick() вызывается при каждом изменении цены. В ней происходит:

  • Проверка на наличие открытых ордеров с помощью функции CheckOpenOrders(). Если ордера уже открыты, функция завершает выполнение.
  • Получение текущих и предыдущих значений MACD с использованием функции iMACD().
  • Проверка условий для открытия ордеров: если текущая линия MACD пересекает сигнальную линию снизу вверх, то открывается покупка; если сверху вниз — продажа.

4. Функции открытия ордеров

Открытие ордера на покупку

void OpenBuy()
{
    double price = Ask;
    double sl = price - StopLoss * Point;
    double tp = price + TakeProfit * Point;
    int ticket = OrderSend(Symbol(), OP_BUY, LotSize, price, 3, sl, tp, "Buy Order", 0, 0, clrGreen);
    if (ticket < 0) {
        Print("Ошибка открытия ордера на покупку: ", GetLastError());
    }
}

Функция OpenBuy() выполняет следующие действия:

  • Определяет рыночную цену (Ask) для открытия ордера на покупку.
  • Рассчитывает уровни стоп-лосса и тейк-профита.
  • Отправляет запрос на открытие ордера с помощью функции OrderSend(). Если открытие ордера не удалось, выводится сообщение об ошибке.

Открытие ордера на продажу

void OpenSell()
{
    double price = Bid;
    double sl = price + StopLoss * Point;
    double tp = price - TakeProfit * Point;
    int ticket = OrderSend(Symbol(), OP_SELL, LotSize, price, 3, sl, tp, "Sell Order", 0, 0, clrRed);
    if (ticket < 0) {
        Print("Ошибка открытия ордера на продажу: ", GetLastError());
    }
}

OpenSell() аналогично открывает ордер на продажу, но используется цена Bid. Рассчитываются уровни стоп-лосса и тейк-профита для короткой позиции.

5. Проверка открытых ордеров

int CheckOpenOrders()
{
    int totalOrders = OrdersTotal();
    int count = 0;
    for (int i = 0; i < totalOrders; i++) {
        if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
                count++;
            }
        }
    }
    return count;
}

Функция CheckOpenOrders() подсчитывает общее количество открытых ордеров. Она перебирает все ордера и считает только те, которые являются длинными (покупка) и короткими (продажа). Эта информация необходима для контроля над открытыми позициями.

Заключение

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

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


1087 10.02.2025
Последние Новости
Топ советников с функцией разруливания просадки
Топ советников с функцией разруливания просадки

Просадка — естественная часть торговли на Форекс, но именно она часто становится причиной слива депозита. Ручной трейдинг тр..

Новости по роботам
18.03.2026 388
На какие пари ставить робота? Гайд для трейдера
На какие пари ставить робота? Гайд для трейдера

Вы купили мощного робота, но прибыли нет? 🤔 Часто проблема не в советнике, а в том, на какие валютные пары вы его поставили. У каж..

Общее про форекс
11.03.2026 664
Исполнение ордеров на Форекс: тонкости которые нужно знать
Исполнение ордеров на Форекс: тонкости которые нужно знать

Исполнение ордеров на Форекс - тема которая только кажется простой. Многие думают: "Поставил стоп - он сработает как только цена е..

Общее про форекс
07.03.2026 588
Ручная торговля или роботы: кто выигрывает? Сравнение
Ручная торговля или роботы: кто выигрывает? Сравнение

Спор между "старой школой" и "автоматизаторами" не утихает годами. 🤔 Что лучше: сидеть перед монитором, чувствуя каждый пипс, или ..

Общее про форекс
06.03.2026 629
Топ-5 ошибок при использовании советников
Топ-5 ошибок при использовании советников

Купить форекс робота - это только полдела. 🚗💨 Самое интересное начинается, когда вы ставите его на реальный счет. Многие новички, ..

Общее про форекс
03.03.2026 653
Новичкам: простая инструкция по выбору форекс-робота
Новичкам: простая инструкция по выбору форекс-робота

Ищете своего первого торгового робота, но глаза разбегаются от обилия советников? 🧐 Это нормально. Чтобы автоматизация приносила п..

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