Как правильно рассчитать лот в MetaTrader 5: риск, Stop Loss, маржа и примеры MQL5
Здравствуйте, друзья! Сегодня предлагаю разобрать один из самых важных вопросов для начинающих трейдеров: как правильно рассчитать объём сделки в MetaTrader 5 и почему привычные 0,01 лота далеко не всегда означают небольшой риск.
Представьте обычную ситуацию. Вы открыли торговый терминал, нашли интересную точку входа по EURUSD, установили Stop Loss и решили открыть покупку. Но какой объём выбрать: 0,01, 0,05, 0,10 или целый лот?
Многие новички поступают очень просто. Если депозит небольшой, выбирают 0,01 лота. Если депозит увеличился, начинают торговать 0,10 лота. А иногда объём определяется исключительно желанием заработать определённую сумму.
На мой взгляд, это неправильный подход. Размер позиции должен рассчитываться не по настроению трейдера, а исходя из допустимого риска, расстояния до защитного уровня и характеристик конкретного инструмента.
За более чем двадцать лет работы на финансовых рынках и разработки торговых алгоритмов я неоднократно убеждался, что ошибки в расчёте объёма способны уничтожить даже неплохую торговую стратегию.
На моей странице MQL5 я регулярно рассматриваю практические вопросы трейдинга и автоматизации, а в Telegram-канале мы обсуждаем применение торговых инструментов и управление рисками.
Сегодня подробно разберём, что такое торговый лот, как рассчитать денежный риск, почему необходимо учитывать Stop Loss, чем отличается объём позиции от маржи и как выполнять подобные расчёты автоматически на MQL5.
1. Что такое объём сделки в MetaTrader 5
Объём сделки определяет количество финансового инструмента, которое трейдер покупает или продаёт.
В MetaTrader 5 торговый объём обычно указывается в лотах.
Но здесь важно понимать: один лот не означает одинаковое количество базового актива для всех финансовых инструментов.
Например, для стандартного валютного контракта EURUSD один лот обычно соответствует 100 000 евро.
Для золота XAUUSD у многих брокеров один лот соответствует 100 тройским унциям золота.
Однако конкретный размер контракта необходимо проверять в спецификации инструмента. У разных брокеров и для разных рынков он может отличаться.
В MetaTrader 5 нужные параметры можно посмотреть через окно «Обзор рынка». Выберите инструмент, откройте его свойства и изучите раздел «Спецификация».
Пример для EURUSD
Допустим, размер контракта составляет 100 000 EUR за один лот.
| Объём | Количество базовой валюты |
|---|---|
| 1,00 лота | 100 000 EUR |
| 0,10 лота | 10 000 EUR |
| 0,05 лота | 5 000 EUR |
| 0,01 лота | 1 000 EUR |
Но обратите внимание: эти значения описывают объём базового актива, а не размер возможного убытка и не сумму средств, которую необходимо иметь на счёте.
Это три разных понятия, и путать их нельзя.
2. Почему 0,01 лота не всегда означает маленький риск
Предположим, два трейдера открывают BUY по EURUSD одинаковым объёмом 0,01 лота.
Первый устанавливает Stop Loss на расстоянии 20 пипсов.
Второй устанавливает Stop Loss на расстоянии 200 пипсов.
Объём позиции одинаковый, но потенциальные убытки совершенно разные.
Для стандартного контракта EURUSD на долларовом счёте стоимость одного пипса при объёме 0,01 лота составляет приблизительно 0,10 доллара.
В первом случае потенциальный убыток от изменения цены до Stop Loss:
20 × 0,10 = 2 доллара.
Во втором случае:
200 × 0,10 = 20 долларов.
Получается, что при одинаковом торговом объёме денежный риск отличается в десять раз.
Это простой, но очень важный пример.
Поэтому утверждение «я торгую минимальным лотом, значит, практически ничем не рискую» может быть ошибочным.
Кроме того, фактический убыток способен превысить предварительный расчёт из-за проскальзывания, комиссий и других условий исполнения.
3. Начинать нужно с риска, а не с лота
Правильная последовательность расчёта выглядит следующим образом:
- Определяем текущий капитал, который используем как основу расчёта.
- Выбираем допустимый процент риска.
- Находим точку входа.
- Устанавливаем обоснованный Stop Loss.
- Рассчитываем денежный убыток на один лот.
- Находим подходящий торговый объём.
- Проверяем ограничения брокера и требования к марже.
В этой последовательности нет ничего случайного.
Сначала мы принимаем решение, сколько можем позволить себе потерять в рамках торгового плана, и только после этого определяем, каким объёмом можно открыть позицию.
Не наоборот.
Что такое риск в процентах
Допустим, размер средств счёта составляет 1000 долларов.
Трейдер решил ограничивать плановый риск одной новой сделки величиной 1% от текущих средств.
Получаем:
1000 × 1 / 100 = 10 долларов.
Таким образом, плановый бюджет риска составляет 10 долларов.
Это не означает, что сделка гарантированно не сможет потерять больше этой суммы. Stop Loss может исполниться по худшей цене, а комиссии и дополнительные расходы увеличат итоговый убыток.
Но теперь у нас появляется конкретная величина, от которой можно рассчитывать объём.
4. Как рассчитать объём сделки по Stop Loss
Рассмотрим простую формулу для инструментов, у которых известна корректная денежная стоимость пипса на один лот:
Объём = Денежный риск / (Расстояние Stop Loss в пипсах × Стоимость пипса для одного лота).
Допустим, мы торгуем EURUSD на счёте в долларах США.
Исходные условия:
- Средства счёта — 1000 долларов.
- Допустимый риск — 1%.
- Денежный бюджет риска — 10 долларов.
- Планируемая цена BUY — 1.08500.
- Stop Loss — 1.08300.
- Расстояние до Stop Loss — 20 стандартных пипсов.
- Стоимость одного пипса для 1,00 лота EURUSD — приблизительно 10 долларов.
Теперь рассчитаем потенциальный убыток на один полный лот:
20 × 10 = 200 долларов.
Это означает, что один лот при таком расстоянии до Stop Loss имеет расчётный ценовой риск около 200 долларов.
Наш допустимый риск — 10 долларов.
Следовательно:
10 / 200 = 0,05 лота.
Получается, что при указанных исходных данных расчётный торговый объём составляет 0,05 лота.
| Объём | Убыток при Stop Loss 20 пипсов | Доля от 1000 USD |
|---|---|---|
| 0,01 | 2 USD | 0,2% |
| 0,05 | 10 USD | 1% |
| 0,10 | 20 USD | 2% |
| 0,50 | 100 USD | 10% |
Все значения в таблице приблизительные и показывают только результат ценового движения до указанного Stop Loss. Комиссии, свопы и возможное ухудшение исполнения здесь не учитываются.
Обратите внимание, насколько сильно изменяется риск при увеличении лота.
Иногда трейдер считает, что изменение объёма с 0,05 до 0,10 не имеет существенного значения.
Но в нашем примере запланированный денежный риск при этом увеличивается ровно вдвое.
5. Почему нельзя рассчитывать лот только по размеру депозита
Предположим, один трейдер использует депозит 1000 долларов и выбирает объём 0,10 лота для каждой сделки.
В первой операции Stop Loss находится на расстоянии 15 пипсов.
Во второй — на расстоянии 50 пипсов.
В третьей — на расстоянии 100 пипсов.
Если стоимость одного пипса на 0,10 лота EURUSD составляет приблизительно 1 доллар, получаем:
| Stop Loss | Объём | Расчётный убыток |
|---|---|---|
| 15 пипсов | 0,10 | 15 USD |
| 50 пипсов | 0,10 | 50 USD |
| 100 пипсов | 0,10 | 100 USD |
Для депозита 1000 долларов это соответственно 1,5%, 5% и 10%.
Один и тот же лот создаёт совершенно разную нагрузку на капитал.
Поэтому фиксированный объём не является заменой расчёта риска.
Фиксированный лот может использоваться в некоторых торговых алгоритмах, но тогда трейдер должен понимать, каким будет риск при разных расстояниях до защитного уровня.
6. Пункты и пипсы: распространённая путаница
При расчётах в MetaTrader 5 начинающие трейдеры часто путают стандартные валютные пипсы и минимальное ценовое значение Point, которое предоставляет терминал.
Например, для пятизначной котировки EURUSD:
- Один Point обычно равен 0.00001.
- Один стандартный валютный пипс равен 0.00010.
- Один пипс соответствует десяти таким Point.
Таким образом, движение цены с 1.08500 до 1.08300 составляет 20 пипсов или 200 Point.
Если перепутать эти величины, при самостоятельном расчёте лота можно получить ошибку в десять раз.
Дополнительная сложность возникает на металлах, индексах, фьючерсах и других инструментах, где принятая трейдерами терминология «пункт» не всегда совпадает с техническим свойством SYMBOL_POINT.
В MQL5 существуют отдельные характеристики:
- SYMBOL_POINT — значение одного Point.
- SYMBOL_TRADE_TICK_SIZE — минимальный ценовой шаг.
- SYMBOL_TRADE_TICK_VALUE — расчётная денежная стоимость тика.
- SYMBOL_TRADE_CONTRACT_SIZE — размер контракта.
Я рекомендую не предполагать, что эти свойства одинаковы для всех инструментов.
Для универсального расчёта лучше использовать функции MQL5, которые учитывают особенности выбранного символа и валюты торгового счёта.
7. Как рассчитать риск по золоту XAUUSD
Теперь рассмотрим пример, который хорошо показывает, почему нельзя переносить расчёты EURUSD на другие инструменты без проверки спецификации.
Допустим, у нашего брокера один лот XAUUSD соответствует 100 тройским унциям.
Представим, что трейдер планирует купить золото по условной цене 2500 долларов за унцию и установить Stop Loss на уровне 2490 долларов.
Расстояние до защитного уровня составляет 10 долларов на унцию.
Для одного лота, соответствующего 100 унциям, изменение цены на 10 долларов создаёт ценовой результат:
100 × 10 = 1000 долларов.
Для объёма 0,01 лота:
1000 × 0,01 = 10 долларов.
Если средства счёта составляют 1000 долларов, это соответствует 1% от капитала.
Теперь изменим только Stop Loss.
Пусть расстояние составляет не 10, а 25 долларов на унцию.
Тогда при объёме 0,01 лота получаем потенциальный ценовой убыток:
100 × 25 × 0,01 = 25 долларов.
Это уже 2,5% от средств счёта.
А если наш лимит риска составляет всего 10 долларов, расчётный объём будет:
10 / (100 × 25) = 0,004 лота.
Но что делать, если брокер разрешает открывать сделки минимум 0,01 лота?
Правильный ответ: не увеличивать объём автоматически до минимума, если это нарушает допустимый риск.
Возможно, придётся отказаться от сделки, использовать другой инструмент или изменить условия торгового плана, но не устанавливать Stop Loss произвольно только ради подходящего лота.
Подчеркну, что параметры XAUUSD приведены исключительно для примера. Фактический размер контракта и минимальный объём нужно проверять у своего брокера.
8. Что делать, если расчётный лот меньше минимального
В MetaTrader 5 любой торговый инструмент имеет ограничения на допустимые объёмы операций.
Основные характеристики:
- SYMBOL_VOLUME_MIN — минимальный объём сделки.
- SYMBOL_VOLUME_MAX — максимальный объём одной сделки.
- SYMBOL_VOLUME_STEP — шаг изменения торгового объёма.
- SYMBOL_VOLUME_LIMIT — ограничение совокупного объёма в одном направлении, если оно задано.
Предположим, для EURUSD разрешён минимальный объём 0,01 лота и шаг 0,01.
Наш расчёт показал 0,057 лота.
Если задача заключается в том, чтобы не превышать выбранный денежный риск, разумно округлить объём вниз до 0,05 лота, а не вверх до 0,06.
Но бывают ситуации, когда расчётный объём составляет 0,006 лота, а минимальный разрешённый — 0,01.
Тогда открытие минимального лота способно нарушить риск-лимит.
Поэтому в торговой программе необходимо предусмотреть возможность отказаться от сделки.
Это особенно важно для небольших депозитов и инструментов с высокой стоимостью ценового движения.
9. Риск сделки и маржа — совершенно разные понятия
Это ещё одна распространённая ошибка начинающих трейдеров.
Некоторые считают, что если для открытия позиции требуется 50 долларов маржи, то максимальный возможный убыток тоже составляет 50 долларов.
Это неверно.
Маржа — обеспечение, которое брокер требует для удержания позиции.
Риск по Stop Loss — расчётный убыток, возникающий при движении цены от предполагаемого входа до защитного уровня.
Эти показатели рассчитываются по разным правилам.
Например, при высоком кредитном плече сравнительно крупная позиция может потребовать небольшое обеспечение, но потенциальный денежный убыток от движения цены останется значительным.
Именно поэтому большое кредитное плечо само по себе не делает стратегию безопасной.
Для оценки необходимой маржи в MQL5 предусмотрена функция OrderCalcMargin().
Однако важно понимать, что она предварительно рассчитывает маржу для указанной операции, не учитывая существующие открытые позиции и отложенные ордера.
При реальной проверке заявки необходимо также учитывать фактическое состояние счёта и результат проверки торгового запроса.
10. Почему удобнее использовать Equity вместо Balance
Предположим, баланс счёта составляет 1000 долларов, но открытые позиции уже имеют плавающий убыток 200 долларов.
При отсутствии других корректировок текущие средства Equity составляют приблизительно 800 долларов.
Если рассчитывать 1% от Balance, получаем 10 долларов.
Если рассчитывать 1% от Equity, получаем 8 долларов.
Разница вроде бы небольшая, но она отражает реальное текущее состояние счёта.
Поэтому для динамического расчёта объёма я часто предпочитаю использовать текущие средства счёта, а не только баланс.
Однако выбор базы риска зависит от торгового плана. Главное — чтобы этот принцип был определён заранее и применялся последовательно.
Ещё один важный момент: если у трейдера уже открыто несколько позиций, риск новой сделки нельзя оценивать полностью изолированно.
Необходимо учитывать совокупную нагрузку и возможную корреляцию позиций.
11. Как автоматически рассчитать лот на MQL5
Теперь перейдём к программированию.
Для универсального расчёта потенциального финансового результата в MetaTrader 5 предусмотрена функция OrderCalcProfit().
Она позволяет оценить прибыль или убыток для заданного торгового объёма, инструмента, направления сделки, цены открытия и цены закрытия.
Результат возвращается в валюте торгового счёта.
Это удобно, поскольку не приходится самостоятельно реализовывать отдельные формулы для EURUSD, USDJPY, XAUUSD, индексов и других типов инструментов.
Предлагаю рассмотреть учебную функцию, которая определяет объём по заданному проценту риска и установленному Stop Loss.
// Risk-based volume calculation double CalculateRiskVolume( const string symbol, const ENUM_ORDER_TYPE type, const double entry, const double stop, const double risk_percent) { if(type != ORDER_TYPE_BUY && type != ORDER_TYPE_SELL) return 0.0; if(entry <= 0.0 || stop <= 0.0 || risk_percent <= 0.0) return 0.0; if(type == ORDER_TYPE_BUY && stop >= entry) return 0.0; if(type == ORDER_TYPE_SELL && stop <= entry) return 0.0; double min_volume = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); double max_volume = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); double step = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); if(min_volume <= 0.0 || max_volume < min_volume || step <= 0.0) return 0.0; double risk_money = AccountInfoDouble(ACCOUNT_EQUITY) * risk_percent / 100.0; if(risk_money <= 0.0) return 0.0; double result = 0.0; if(!OrderCalcProfit(type, symbol, min_volume, entry, stop, result)) { Print("OrderCalcProfit error: ", GetLastError()); return 0.0; } if(result >= 0.0) return 0.0; double loss_at_min = -result; if(loss_at_min > risk_money) return 0.0; double raw_volume = risk_money * min_volume / loss_at_min; double volume = MathMin(raw_volume, max_volume); volume = min_volume + MathFloor((volume - min_volume) / step + 1e-10) * step; volume = NormalizeDouble(volume, 8); double check_profit = 0.0; if(!OrderCalcProfit(type, symbol, volume, entry, stop, check_profit)) return 0.0; if(check_profit >= 0.0 || -check_profit > risk_money + 1e-6) return 0.0; return volume; }
Что делает эта функция?
- Проверяет направление сделки и корректность защитного уровня.
- Получает минимальный, максимальный объём и шаг лота.
- Вычисляет денежный бюджет риска от текущего Equity.
- Через OrderCalcProfit() определяет потенциальный убыток для минимального разрешённого объёма.
- Рассчитывает объём, соответствующий выбранному риску.
- Округляет его вниз по допустимому шагу.
- Повторно проверяет расчётный убыток перед возвратом результата.
Если допустимый риск слишком маленький даже для минимального лота, функция возвращает 0.0.
Это осознанное поведение: алгоритм не должен автоматически увеличивать риск ради открытия сделки.
Обратите внимание: функция выполняет только предварительный расчёт объёма. Она не открывает позицию и не гарантирует, что реальный убыток точно совпадёт с расчётным.
OrderCalcProfit() не заменяет учёт комиссий, свопов, возможного проскальзывания и других расходов. Для более строгого риск-лимита их необходимо оценивать отдельно, оставляя соответствующий резерв.
12. Как использовать рассчитанный объём
Допустим, мы хотим вычислить объём покупки по текущей цене Ask, а Stop Loss планируем расположить на 200 Point ниже цены входа.
Пример вызова:
MqlTick tick; if(SymbolInfoTick(_Symbol, tick)) { double entry = tick.ask; double stop = entry - 200 * _Point; double volume = CalculateRiskVolume( _Symbol, ORDER_TYPE_BUY, entry, stop, 1.0 ); Print("Calculated volume: ", volume); }
Здесь значение 1.0 означает 1% от текущего Equity.
А расстояние 200 Point приведено исключительно для примера. В реальной стратегии Stop Loss должен определяться правилами торговой системы, а не выбираться произвольно.
Перед отправкой торгового приказа необходимо убедиться, что защитный уровень соответствует спецификации инструмента, объём допустим, свободной маржи достаточно, а текущая цена не изменила параметры риска.
Также следует учитывать SYMBOL_VOLUME_LIMIT, уже открытые позиции и отложенные ордера.
После отправки торгового запроса обязательно проверяйте результат его обработки сервером.
13. Почему OrderCalcProfit удобнее самодельной формулы
Для стандартной пары EURUSD на долларовом счёте денежную стоимость одного пипса рассчитать относительно просто.
Но что произойдёт, если счёт открыт в евро, а торгуемый инструмент — USDJPY?
Потребуется учитывать пересчёт прибыли в валюту депозита.
Если мы перейдём к золоту, индексам, фьючерсам или другим инструментам, могут измениться размер контракта и принципы расчёта финансового результата.
В результате универсальная функция на основе самодельной постоянной стоимости пункта рискует работать неправильно.
OrderCalcProfit() позволяет использовать встроенные торговые расчёты терминала для заданного инструмента и текущего окружения счёта.
Это не отменяет необходимости проверять спецификацию брокера и корректность возвращаемого значения, но помогает избежать многих ошибок.
14. Как проверить, хватит ли свободной маржи
После расчёта объёма остаётся ещё одна задача: понять, может ли торговый счёт открыть такую позицию.
Для предварительной оценки обеспечения используйте OrderCalcMargin().
Например, для рассчитанного объёма покупки:
double margin = 0.0; if(OrderCalcMargin(ORDER_TYPE_BUY, _Symbol, volume, entry, margin)) { Print("Estimated margin: ", margin); }
Однако у этой функции есть важное ограничение.
Она рассчитывает обеспечение для запланированной операции так, словно на счёте нет существующих открытых позиций и отложенных ордеров.
Поэтому для полноценной проверки конкретного торгового запроса полезно применять OrderCheck(), а после отправки приказа контролировать фактический ответ торгового сервера.
И ещё раз подчеркну: маржа не равна запланированному убытку по Stop Loss.
15. Семь ошибок новичков при расчёте объёма
Первая ошибка — выбирать лот исключительно по размеру депозита. Сам по себе размер счёта не говорит, каким будет денежный риск конкретной сделки.
Вторая ошибка — игнорировать Stop Loss. Без известного защитного уровня нельзя надёжно ограничить расчётный риск традиционной формулой фиксированного процента.
Третья ошибка — путать стандартные пипсы и технические Point. На пятизначных валютных котировках это способно дать ошибку в десять раз.
Четвёртая ошибка — применять одинаковую стоимость пункта ко всем инструментам. EURUSD, золото, индекс и фьючерс могут иметь совершенно разные характеристики.
Пятая ошибка — округлять лот вверх. Если расчёт показал объём меньше разрешённого минимума, лучше отказаться от операции, чем случайно превысить лимит риска.
Шестая ошибка — путать маржу и риск. Небольшое обеспечение не означает, что позиция способна потерять только эту сумму.
Седьмая ошибка — забывать про совокупный риск. Несколько одновременно открытых позиций могут создавать значительно большую нагрузку на капитал, особенно если они чувствительны к одному рыночному фактору.
16. Как сделать расчёт объёма частью торгового плана
Я рекомендую использовать единую последовательность принятия решений перед каждой сделкой.
Сначала определите торговую идею и место, где она перестаёт быть актуальной.
Именно там, с учётом устройства стратегии и торговых ограничений, должен рассматриваться защитный уровень.
Затем определите максимально допустимый бюджет риска.
Рассчитайте денежный результат движения от предполагаемой цены входа до Stop Loss.
На основании этого значения получите допустимый объём.
После этого проверьте торговые ограничения и свободную маржу.
Если расчётный объём слишком мал для выбранного инструмента, это не повод двигать Stop Loss ближе исключительно ради увеличения лота.
Защитный уровень должен отражать логику стратегии, а не желание открыть позицию любой ценой.
Отдельное внимание уделяйте сериям сделок. Если алгоритм планирует несколько последующих входов, важно оценивать не только риск первой позиции, но и потенциальный совокупный риск всей серии.
Рекомендации
Друзья, теперь мы разобрались, почему объём сделки нельзя выбирать случайным образом.
Главная идея заключается в следующем: сначала рассчитываем допустимый денежный риск, затем определяем положение Stop Loss и только после этого находим подходящий лот.
Для обычного EURUSD при долларовом счёте можно воспользоваться простой формулой через стоимость пипса.
Но для универсальных торговых алгоритмов я рекомендую применять OrderCalcProfit(), которая помогает рассчитать финансовый результат в валюте счёта с учётом особенностей инструмента.
Не забывайте проверять минимальный и максимальный лоты, шаг объёма, требования к марже и ограничения брокера.
Помните, что плановый риск по Stop Loss не является гарантированным максимальным убытком. При неблагоприятном исполнении и дополнительных расходах реальная потеря может быть выше.
И самое важное: если минимальный доступный лот создаёт слишком большой риск, иногда правильное решение — вообще не открывать сделку.
Для тех, кто хочет глубже изучить MQL4, MQL5 и создание собственных торговых советников, у меня есть образовательный проект MQL Master.
А теперь предлагаю обсудить практический вопрос.
Как вы рассчитываете объём позиций: используете фиксированный лот, процент от депозита, риск по Stop Loss или собственную систему управления капиталом?
И считаете ли вы обязательным автоматический расчёт объёма для торговых советников?
Поделитесь своим опытом в комментариях. Особенно интересно узнать, какие ошибки в риск-менеджменте вам приходилось исправлять на практике.
Материал носит образовательный характер и не является индивидуальной инвестиционной рекомендацией. Торговля финансовыми инструментами связана с риском потери капитала.
Теги: MetaTrader 5, MT5, MQL5, расчёт лота, торговый объём, риск-менеджмент, Stop Loss, размер позиции, EURUSD, XAUUSD, программирование советников, управление капиталом



