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

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

Общий Разбор Этот индикатор, созданный на языке MQL4, предназначен для платформы MetaTrader 4. Он предоставляет торговые рекоменд.. →

Разбор исходного кода советника MACD для MetaTrader 4 В данной статье мы подробно рассмотрим исходный код советника, который реал.. →