Индикатор 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. Понимание каждой части кода позволит вам адаптировать и изменять стратегию в зависимости от ваших собственных торговых предпочтений и условий рынка.

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


242 10.02.2025
Последние Новости
Open Lock AutoСalibration - самонастраивающийся советник
Open Lock AutoСalibration - самонастраивающийся советник

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

Новости по роботам
24.04.2025 239
Закрытая группа по форекс советникам без ограничений
Закрытая группа по форекс советникам без ограничений

Присоединяйтесь к нашей закрытой телеграм группе по форекс советникам 👋 Уважаемые трейдеры! Мы рады представить вам нашу новую ..

Новости сайта
07.04.2025 623
Что такое виртуальный сервер VPS в трейдинге
Что такое виртуальный сервер VPS в трейдинге

В последние годы виртуальные частные серверы (VPS) стали популярным инструментом среди трейдеров, использующих автоматизированные ..

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