Стратегия торговли «Орел и Решка» является одной из популярных торговых методик среди трейдеров российского рынка. Название отражает суть подхода: выбор направления сделки осуществляется случайным образом, аналогично подбрасыванию монеты («орел» или «решка»). Такой подход привлекает внимание начинающих трейдеров своей доступностью и интуитивностью, поэтому заглянем внутрь неё.
Суть стратегии
Основная идея заключается в следующем:
- Актив: трейдер выбирает финансовый инструмент для торговли (например, акции, валюты).
- Подбрасывание монеты даёт случайный выбор направления сделки: «купить» или «продать».
- Открытие позиции: после выбора стороны открывается сделка на заранее определенный объём.
- Управление рисками: для каждой сделки устанавливаются стоп-лосс и тейк-профит уровни для ограничения убытков и фиксации прибыли соответственно.
Таким образом, вся торговая активность сводится к случайному выбору направления движения цены, что существенно упрощает процесс принятия решений.
Преимущества и недостатки стратегии
Плюсы:
- Простота: нет необходимости проводить сложный технический или фундаментальный анализ рынка.
- Минимизация психологического давления: не нужно постоянно анализировать рынок снижает уровень стресса.
- Автоматизация: стратегия легко автоматизируется и может использоваться в рамках автоматизированных торговых систем.
Минусы:
- Низкая эффективность: вероятность успеха составляет всего 50%, что значительно ниже, чем у большинства профессиональных стратегий.
- Отсутствие учета рыночных факторов: игнорирование важных экономических показателей и технических индикаторов повышает риски потерь.
- Необходимость большого капитала: для минимизации рисков рекомендуется иметь значительный торговый капитал, позволяющий выдержать возможные убытки.
Практическое применение
Для успешной реализации стратегии важно учитывать следующие моменты:
- Размер позиции: оптимальным считается открытие позиций объемом не более 1% от общего торгового капитала.
- Контроль риска: строгое соблюдение уровней стоп-лоссов и тейк-профитов.
- Диверсификация активов: использование разных финансовых инструментов позволяет снизить общий риск портфеля.
В итоге, «Орел и Решка» – простой и понятный способ входа на рынок, однако её использование требует осторожности и тщательного управления рисками. Начинающим трейдерам рекомендуется сначала тестировать стратегию на демо-счетах, чтобы оценить потенциал и выработать собственные подходы к управлению позициями.
Автоматизация торговой стратегии
- Общая структура файла
Файл эксперта начинается с заголовка (комментария), где указаны:
- название файла (VR Heads or Tails.mq5);
- информация об авторе и годе выпуска;
- веб‑сайт разработчика и другие сопроводительные комментарии.
Далее следуют директивы #property, задающие метаданные эксперта.
- Подключение библиотек и объявление переменных
Для работы с торговыми операциями подключаются стандартные библиотеки MQL5:
mql5
#include <Trade\Trade.mqh>
CTrade trade; // Экземпляр класса для управления торговлей
#include <Trade\PositionInfo.mqh>
CPositionInfo posit; // Экземпляр для хранения информации о позициях
- CTrade — класс, позволяющий отправлять торговые приказы (покупки, продажи);
- CPositionInfo — класс для получения данных о открытых позициях.
Затем объявляются входные параметры эксперта (настраиваются пользователем в интерфейсе MT5):
mql5
input double iStartLots = 0.01; // Начальный лот
input int iTakeProfit = 450; // Тейк‑профит (в пунктах)
input int iStopLoss = 390; // Стоп‑лосс (в пунктах)
input int iMagicNumber = 227; // Уникальный идентификатор сделок
input int iSlippage = 30; // Максимально допустимое проскальзывание
- iStartLots — объём первой сделки;
- iTakeProfit и iStopLoss — уровни прибыли и убытка;
- iMagicNumber — число для идентификации сделок робота (чтобы не путать их с ручными);
- iSlippage — допустимое отклонение цены при исполнении ордера.
- Функция OnInit() — инициализация робота
Эта функция выполняется один раз при запуске эксперта. Её задача — настроить торговые параметры:
mql5
int OnInit() {
trade.SetExpertMagicNumber(iMagicNumber); // Устанавливаем MagicNumber
trade.SetDeviationInPoints(iSlippage); // Задаём проскальзывание
trade.SetTypeFillingBySymbol(_Symbol); // Тип исполнения по символу
trade.SetMarginMode(); // Режим маржи (хеджинг)
MathSrand(GetTickCount()); // Инициализируем генератор случайных чисел
return(INIT_SUCCEEDED); // Сообщаем об успешном запуске
}
Ключевые действия:
- SetExpertMagicNumber() — присваивает сделкам уникальный идентификатор.
- SetDeviationInPoints() — задаёт максимально допустимое проскальзывание.
- SetTypeFillingBySymbol() — настраивает тип исполнения ордеров (например, «по рынку»).
- SetMarginMode() — активирует режим хеджирования (раздельные позиции по одному инструменту).
- MathSrand() — инициализирует генератор случайных чисел (позже используется для случайного выбора направления сделки).
- Функция OnTick() — обработка новых котировок
Эта функция вызывается при каждом новом тике (изменении цены). Разберём её по частям.
4.1. Получение данных о рынке и позициях
mql5
int total = ::PositionsTotal(); // Количество открытых позиций
double Bid = ::SymbolInfoDouble(_Symbol, SYMBOL_BID); // Цена BID
double Ask = ::SymbolInfoDouble(_Symbol, SYMBOL_ASK); // Цена ASK
- PositionsTotal() — возвращает число открытых позиций;
- SymbolInfoDouble() — получает текущие цены BID (продажа) и ASK (покупка).
Если цены некорректны (≤ 0), функция прерывается:
mql5
if(Bid <= 0 || Ask <= 0)
return;
4.2. Анализ открытых позиций
Цикл перебирает все позиции и подсчитывает количество длинных (BUY) и коротких (SELL) сделок:
mql5
for(int i = 0; i < total; i++) {
if(posit.SelectByIndex(i)) {
if(posit.Symbol() == _Symbol && posit.Magic() == iMagicNumber) {
if(posit.PositionType() == POSITION_TYPE_BUY) b++;
if(posit.PositionType() == POSITION_TYPE_SELL) s++;
}
}
}
- SelectByIndex() — выбирает позицию по индексу;
- Symbol() и Magic() — проверяют, относится ли позиция к текущему инструменту и роботу;
- PositionType() — определяет тип позиции (BUY/SELL).
4.3. Открытие новой сделки
Если позиций нет (b + s == 0), робот случайно выбирает направление сделки:
mql5
if((b + s) == 0) {
if(MathRand() % 2 == 0) { // Случайный выбор: 0 — BUY, 1 — SELL
trade.Buy(iStartLots, _Symbol, Ask, Ask — iStopLoss * _Point, Ask + iTakeProfit * _Point, «»);
} else {
trade.Sell(iStartLots, _Symbol, Bid, Bid + iStopLoss * _Point, Bid — iTakeProfit * _Point, «»);
}
}
- MathRand() % 2 — генерирует случайное число (0 или 1);
- trade.Buy() — открывает длинную позицию с заданными TP и SL;
- trade.Sell() — открывает короткую позицию.
Параметры торговых функций:
- iStartLots — объём сделки;
- _Symbol — торговый инструмент;
- Ask/Bid — цена открытия;
- Ask — iStopLoss * _Point — уровень стоп‑лосса для BUY;
- Ask + iTakeProfit * _Point — уровень тейк‑профита для BUY;
- _Point — размер пункта для инструмента.
После открытия сделки функция завершается (return), чтобы не отправлять дублирующие приказы.
- Функция OnDeinit() — деинициализация
Эта функция вызывается при удалении робота с графика. В данном примере она пуста, но может использоваться для:
- сохранения статистики;
- закрытия открытых позиций;
- вывода логов.
mql5
void OnDeinit(const int reason) {
// Здесь можно добавить код для завершения работы
}
Как работает робот в целом
- При запуске (OnInit) настраиваются торговые параметры.
- При каждом тике (OnTick):
- проверяется наличие открытых позиций;
- если позиций нет —случайно открывается LONG или SHORT с заданными TP/SL;
- если позиции есть — ничего не делается.
- При удалении робота (OnDeinit) выполняется очистка (в данном случае — пустая).
Важные замечания для начинающих
- Тестирование: перед использованием на реальном счёте протестируйте робота на демо‑счёте или в тестере стратегий MT5.
- Риски: случайный выбор направления сделки — высокорискованная стратегия. В реальных условиях используйте фильтры (индикаторы, анализ тренда).
- Настройка параметров: подбирайте iStartLots, iTakeProfit и iStopLoss под свой стиль торговли и размер счёта.
- MagicNumber: убедитесь, что iMagicNumber не совпадает с другими роботами на счёте.
- Проскальзывание: значение iSlippage должно соответствовать ликвидности инструмента.
Что можно улучшить
Этот робот — базовый пример. Для реальной торговли добавьте:
- фильтры по индикаторам (например, RSI, MACD);
- управление рисками (расчёт лота по балансу);
- логирование сделок;
- защиту от множественных открытий;
- оптимизацию параметров.
Мы вместе изучили структуру простого торгового робота на MQL5, разобрали ключевые функции и принципы работы. Теперь вы можете модифицировать этот код под свои стратегии или создавать собственные эксперты.