Алексей Боровков – 10 роботов для автоматической торговли на Форекс (страница 1)
Алексей Боровков
10 роботов для автоматической торговли на Форекс
Робот 1: «Следователь за трендом» (Trend Follower) – MQL5 Код
Вот полный код советника для MetaTrader 5, реализующий стратегию следования за трендом:
```mql5
//+–+
//| TrendFollower.mq5 |
//| Автор: Алготрейдинг Книга |
//| https://example.com |
//+–+
#property copyright "Алготрейдинг Книга"
#property link "https://example.com"
#property version "1.00"
//+–+
//| Входные параметры советника |
//+–+
input double LotSize = 0.1; // Размер лота
input int FastMAPeriod = 50; // Период быстрой MA
input int SlowMAPeriod = 200; // Период медленной MA
input int ADXPeriod = 14; // Период ADX
input double ADXThreshold = 25.0; // Пороговое значение ADX для силы тренда
input int StopLoss = 200; // Стоп-лосс в пунктах
input int TakeProfit = 400; // Тейк-профит в пунктах
input bool UseTrailingStop = false; // Использовать трейлинг-стоп
input int TrailingStop = 100; // Размер трейлинг-стопа в пунктах
input int MagicNumber = 123456; // Магический номер для идентификации ордеров
input string OrderComment = "TrendFollower"; // Комментарий к ордерам
//+–+
//| Глобальные переменные |
//+–+
int fastMAHandle; // Хэндл для быстрой MA
int slowMAHandle; // Хэндл для медленной MA
int adxHandle; // Хэндл для ADX
double prevFastMA = 0; // Значение быстрой MA на предыдущем баре
double prevSlowMA = 0; // Значение медленной MA на предыдущем баре
//+–+
//| Функция инициализации советника |
//+–+
int OnInit()
{
// Проверка входных параметров
if(FastMAPeriod >= SlowMAPeriod)
{
Alert("Ошибка: Период быстрой MA должен быть меньше периода медленной MA");
return INIT_PARAMETERS_INCORRECT;
}
if(LotSize <= 0 || LotSize > 100)
{
Alert("Ошибка: Неверный размер лота");
return INIT_PARAMETERS_INCORRECT;
}
// Создание хэндлов для индикаторов
fastMAHandle = iMA(_Symbol, _Period, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE);
slowMAHandle = iMA(_Symbol, _Period, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE);
adxHandle = iADX(_Symbol, _Period, ADXPeriod);
// Проверка создания хэндлов
if(fastMAHandle == INVALID_HANDLE || slowMAHandle == INVALID_HANDLE || adxHandle == INVALID_HANDLE)
{
Alert("Ошибка создания индикаторов");
return INIT_FAILED;
}
// Получение начальных значений индикаторов
double fastMA[1], slowMA[1];
if(CopyBuffer(fastMAHandle, 0, 1, 1, fastMA) < 1 || CopyBuffer(slowMAHandle, 0, 1, 1, slowMA) < 1)
{
Alert("Ошибка копирования данных индикаторов");