В этой статье обозреваю возможности платформы для трейдинга MetaTrader 5, но глазами программиста. Покажу, как самому написать на MQL5 программы-советники (по-трейдерски — индикаторы), которые избавят трейдеров от рутины.
Скелет программы: из чего состоит советник
Любая программа на MQL5 начинается с описания свойств и подключений:
#property strict
#property version "1.00"
#include <Trade/Trade.mqh>
После этого идут системные обработчики событий — функции, которые вызываются самим терминалом в нужный момент:
Функция |
Когда вызывается |
Для чего нужна |
|---|---|---|
|
при запуске эксперта |
инициализация, загрузка параметров |
|
при остановке |
очистка, сохранение состояния |
|
при каждом новом тике |
основная логика торговли |
|
по таймеру |
периодические проверки, повторные попытки |
|
при любых торговых событиях |
реакция на ордера и сделки |
|
при действиях на графике |
работа с линиями, кнопками, панелями |
Дальше вы можете выбрать сами, какие именно события обрабатывать: в простых задачах достаточно OnTradeTransaction, а в торговых системах — весь набор.
Зачем автоматизировать управление риском
Смысл написания программ сводится к двум целям:
автоматизировать рутинные процессы, которые отнимают время и отвлекают от наблюдений за движением рынка;
устранить человеческий фактор при оценке риска и защитить капитал.
Представьте, что вы видите четкий сигнал для входа в сделку и забываете поставить стоп-лосс — такое случается даже с опытными трейдерами. Увы, без стоп-лосса вероятность потерять депозит никогда не равна нулю.
А с программой-советником не придется постоянно держать в голове мысль о стоп-лоссе. Достаточно один раз осознанно выбрать процент риска, который вы готовы понести в сделке — например, 1%. Дальше программа будет подставлять это значение в каждую вашу сделку.
А если вы передумали, процент риска всегда можно поменять как в большую, так и в меньшую сторону.
Как автоматизировать расчет стоп-лосса и тейк-профита
В прошлой главе я привел в пример ситуацию, когда трейдер забыл про стоп-лосс. Но в реальности все гораздо прозаичнее: большинству просто лень его проставлять вручную в каждой сделке. Наблюдая эту тенденцию, брокер обратился ко мне с запросом автоматизировать установку стоп-лосса и тейк-профита.
Для решения проблемы я написал помощника, который автоматически ставит SL и TP на основе заданного трейдером риска. Вот как он работает.
-
Определяем допустимый убыток в деньгах:
double balance = AccountInfoDouble(ACCOUNT_BALANCE); double risk_money = balance * (RiskPercent / 100.0); -
Получаем стоимость пункта и минимальный шаг:
double pip_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); double pip_value = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE); -
Вычисляем, сколько пунктов допустимо до стопа:
double volume = PositionGetDouble(POSITION_VOLUME); double sl_pips = risk_money / (pip_value * volume); double dist = sl_pips * pip_size; -
Строим уровни SL и TP:
double entry = PositionGetDouble(POSITION_PRICE_OPEN); double sl, tp; if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY){ sl = entry - dist; tp = entry + dist * RiskRewardRatio; }else{ sl = entry + dist; tp = entry - dist * RiskRewardRatio; } -
Отправляем изменения в торговый сервер:
MqlTradeRequest req={0}; MqlTradeResult res={0}; req.action = TRADE_ACTION_SLTP; req.position = PositionGetInteger(POSITION_TICKET); req.sl = NormalizeDouble(sl, _Digits); req.tp = NormalizeDouble(tp, _Digits); req.symbol = _Symbol; OrderSend(req, res);
«А может сразу и расчет лотности нам автоматизируешь?», — получил я в догонку от брокера, приступив к созданию помощника.
«Человеческая лень не ведает границ», — подумал я и согласился сделать калькулятор лотов.
double lot = risk_money / (stop_pips * pip_value);
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
double minlot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
lot = MathMax(minlot, MathRound(lot / step) * step);
Переводя с MQL5 на человеческий, я сделал так, чтобы при срабатывании стоп-лосса убыток всегда был равен заданному проценту от депозита. Программа делает все расчеты за вас и подстраивает SL и TP под ваш риск. Причем не важно, открыли вы сделку вручную, кнопкой или по рыночному ордеру.
Почему нельзя просто написать «100 пунктов стопа»
У разных инструментов — разные размеры пункта и разная стоимость тика:
Символ |
Размер тика |
Стоимость тика |
Комментарий |
|---|---|---|---|
EURUSD |
0.00001 |
~1 USD |
стандартная пара |
USDJPY |
0.001 |
~1 USD |
другая точность |
XAUUSD (золото) |
0.01 или 0.1 |
~1 USD / 0.01 |
брокер-зависимо |
US500 (индекс) |
0.25 или 1.0 |
зависит от контракта |
CFD-инструмент |
Но есть нюанс. Для сделок по золоту брокеры часто используют:
нестандартный шаг цены (0.01 или 0.1);
крупный минимальный лот (0.1 или 1);
другие параметры контракта.
Если указать «100 пунктов», то на паре EURUSD — это 10 пипсов, а на золоте (XAUUSD) — уже 10 долларов движения. Если вы этого не учли, то советник откроет позицию в 10 раз больше расчётной.
Поэтому важно всегда запрашивать параметры у брокера — только так вы можете быть уверены, что расчёт будет точным для любого рынка.
Например, я использовал такие:
double tick_value = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double tick_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
double pip_value_per_lot = (tick_value * pip_size) / tick_size;
Что калькулятор лотов даёт трейдеру
В эпоху нейросетей странно пренебрегать программами, которые автоматизируют рутину. При этом калькулятор лотов дает больше свободы и гибкости в принятии решений, чем классический алготрейдинг. Проще говоря, трейдер будет кататься, а программа — саночки возить.
Преимущества очевидны, но давайте огласим весь список:
Контроль риска: вы устанавливаете процент риска от депозита всего один раз и дальше он действует для всех сделок, пока вы не поменяете его вручную.
Защита капитала от лени и провалов в памяти: стопы ставятся мгновенно, можно не перепроверять.
Совместимость: калькулятор подходит для сделок с валютными парами, металлами и индексами.
Дисциплина: риск перестаёт зависеть от эмоций.
Программу можно развивать: например, добавить перенос стопа в безубыток, частичное закрытие позиции, визуальную панель для управления риском.
Напишите, какой еще помощник нужен трейдерам — возьму идеи в разработку.