Автоматизированный риск-менеджмент для прохождения челленджей проп-фирм
Введение
Эта статья написана мной с единственной целью — рассмотреть недавно возникшее явление, известное как торговля в проп-фирмах. Дело в том, что торговля в проп-фирмах в целом — это привлекательное, прибыльное и приносящее удовлетворение занятие, но, как только человек решает пойти по этому пути, ему приходится сталкиваться с серьезными трудностями и препятствиями. Самое распространённое препятствие, с которым сталкивается большинство трейдеров, пытающихся пройти челленджи проп-фирм, — это не отсутствие стратегии, методики или навыков, а строгие ограничения и торговые правила, установленные проп-фирмой; их необходимо соблюдать, чтобы трейдер мог доказать, что ему можно предоставить доступ к реальному торговому счёту.
Дело в том, что трейдер может хорошо анализировать рынок, придерживаться своего торгового плана, открывать сделки и распознавать тренды — этого вполне может хватить для торговли собственными реальными средствами, но не для торговли в проп-фирме, где от трейдера требуется строго соблюдать ее правила и заданные лимиты.
К числу наиболее распространенных правил, целевых показателей и ограничений относятся:
- Не следует превышать установленный лимит дневной просадки, который обычно сбрасывается в полночь. У разных проп-фирм действуют разные лимиты, кроме того, тип приобретаемого счета также может влиять на лимит просадки.
- Трейдер не должен нарушать установленный лимит общей просадки, поскольку это приведет к прекращению торговли на данном счете. Лимиты различаются в зависимости от конкретной проп-фирмы и типа счёта.
- Трейдеру следует избегать попыток извлечь выгоду из внезапных, резких и волатильных движений рынка во время выхода новостей, поскольку из-за отсутствия чёткого направления или рваного движения цены это может создавать крайне высокий риск для счёта.
- Кроме того, трейдер должен поддерживать неизменный профиль риска и рисковую экспозицию на протяжении всего торгового периода, чтобы кривая эквити оставалась ровной и стабильной; это позволяет отсеивать трейдеров, которые используют чрезмерное кредитное плечо или пытаются рискнуть всем в одной сделке.
- Трейдеры также обязаны ежедневно торговать дисциплинированно, не заниматься деятельностью, создающей риск для проп-фирмы или счёта, и не прибегать к недопустимым практикам, таким как арбитражная или высокочастотная торговля.
Именно эти условия и становятся причиной «провала» 60–80 % участников, даже если качество их торговых идей превосходно. Проблема заключается не в торговых способностях или навыках, а в том, что сложно одновременно вручную отслеживать риски, просадки, волатильность и соблюдать дисциплину.
Я написал эту статью специально для трейдеров, которые, возможно, умеют торговать, но по той или иной причине постоянно проваливают челленджи проп-фирм из-за чрезмерных просадок, эмоций или каких-либо других причин. В ходе статьи мы постараемся разработать и продемонстрировать возможные решения этой проблемы, автоматизировав контроль просадки и риск-менеджмент, чтобы трейдеры перестали нарушать правила и смогли успешно пройти челлендж.

Автоматизация торговых процессов для устранения человеческих ошибок в проп-трейдинге
Есть торговые практики и процессы, которые значительно повышают прибыльность торговли и во многом определяют успех трейдеров, особенно если выполнять их методично и правильно. Чтобы торговать эффективно и прибыльно, необходимо одновременно освоить все эти процессы; именно с этим большинство трейдеров не справляются, и мы покажем, как советник будет пытаться решить эту задачу.
Ниже я кратко объясню, как советник призван справляться с трудностями, с которыми сталкиваются трейдеры при автоматизации этого процесса. Это следующие процессы и практики:
- Надлежащий риск-менеджмент: советник, описанный в этой статье, разработан так, чтобы реализовать очень надежный риск-менеджмент и сопровождение сделок, обеспечивая соблюдение всех правил проп-фирмы и не допуская их нарушения. Это самый важный подход и процесс, поскольку без капитала или со счётом, на котором нарушены правила, торговать уже невозможно.
- Торговый план: Советник использует автоматизированную строгую торговую логику, которая допускает открытие сделок только при выполнении нужных рыночных условий и не позволяет совершать сделки под влиянием эмоций или тревоги.
- Анализ рынка: Советник анализирует рынок в строго определённом порядке и по заданной логике, что помогает избегать ошибок и сводить к минимуму человеческий фактор и предвзятость при анализе рынка и торговле. Анализ сверху вниз помогает избежать перескакивания между стратегиями, которое часто встречается у трейдеров, торгующих вручную, когда они разочаровываются из-за плохих результатов.
- Выдержанная торговая психология: благодаря автоматизации, реализованной в этом советнике, мы можем исключить торговлю «из мести» после убытка, импульсивные сделки, вызванные страхом и жадностью, а также FOMO (страх упустить возможность), помогая сохранять терпение и дисциплину, которые имеют решающее значение для долгосрочного успеха в торговле в проп-фирме.
Дело в том, что трейдер должен не только досконально понять один процесс и освоить одну практику, но и полностью разобраться во всех торговых процессах и владеть ими как своими пятью пальцами, поскольку освоение одного процесса в отрыве от остальных или освоение нескольких с пропуском одного-двух быстро приведет к неудаче: ему по-прежнему будет не хватать ключевых элементов для эффективной и прибыльной работы на рынке в долгосрочной перспективе, а любой первоначальный успех окажется недолговечным.
Автоматизация этих торговых процессов помогает снизить нагрузку на трейдеров, поскольку основная логика советника обеспечивает выполнение всех процессов и практик без пропуска даже одного шага, чтобы учесть все переменные перед совершением сделки, — в отличие от трейдера, торгующего вручную, который может поддаться эмоциям, тревоге или даже страху и не выполнить элементарное действие, что может привести к убыточным сделкам.
Чтобы добиться успеха в этой сфере, необходимо освоить все элементы, связанные с торговлей, и научиться сочетать их и применять одновременно, не упуская ни одного из них. В этой статье мы уже обсудили, почему большинство трейдеров не получают доступ к финансируемым счетам из-за слабого риск-менеджмента; теперь подробно рассмотрим внутреннее устройство, архитектуру и принципы работы этого советника, а именно то, как он реализует торговую логику и протокол риск-менеджмента для достижения наших целей.

Внутреннее устройство советника для торговли в проп-фирме
В этой главе мы рассмотрим, как советник воспринимает, интерпретирует и обрабатывает информацию, как он реализует риск-менеджмент и как выполняет торговую логику для достижения оптимальных результатов. Первое и самое важное — используемая торговая логика:
- Торговая логика, используемая для входа в сделки
Это важнейшая и ценная информация, представленная в данной статье, поскольку именно таким образом советник тщательно проверяет и анализирует всю собранную им информацию. Здесь мы рассмотрим, где и каким образом отклонять или подтверждать входы в сделки, а также каким объёмом рисковать и когда снижать или увеличивать уровень риска и рисковую экспозицию. Эта часть представлена в упрощённом виде, чтобы дать общее представление о процессе выполнения. По сути, именно так советник выполняет свою логику входа в сделки.
Как только советник определит торговый сетап, он быстро оценит последние максимумы эквити и баланса с учётом лимитов дневной и общей просадки, чтобы рассчитать запас по доступному балансу и марже, который он может потерять в сделке, не нарушив ни одного правила.
Второй критерий заключается в том, что советник будет обеспечивать соблюдение максимального риска в 2% и лимита максимального убытка в 110 долларов. Это просто означает, что если советник рассчитает и определит, что стоп-лосс следует разместить по определённой цене, но это приведёт к нарушению параметров риска или превышению максимально допустимого убытка, то эта сделка не будет исполнена. Советник использует ATR (средний истинный диапазон) для определения уровней стоп-лосса, уровней тейк-профита, трейлинг-стопа и смены тренда.

- Риск-менеджмент и сопровождение сделок
В советнике реализована очень надёжная адаптивная логика управления рисками, специально разработанная для прохождения челленджей проп-фирм. Кроме того, он был тщательно разработан специально для торговли золотом (XAUUSD). Советник также можно настроить под личные предпочтения пользователя, однако при настройках по умолчанию он рискует лишь двумя процентами на сделку, что обеспечивает умеренную рисковую экспозицию и среднюю агрессивность, благодаря чему счёт получает шанс продолжить торговлю даже в случае убытка. Кроме того, высокий риск при торговле золотом может быть очень опасным и губительным.
В качестве дополнительной меры предосторожности в советнике также установлен максимальный лимит убытка по одной сделке в размере 110 долларов, что гарантирует, что ни одно отдельное событие или сделка не приведёт к нарушению правил проп-фирмы, даже если спреды и гэпы не были учтены. Процент риска и максимальный убыток можно изменить или скорректировать в соответствии с требованиями пользователя. Ещё одна особенность системы — функция ретроспективного анализа (lookback), которая проверяет пробои за последние 10 баров, чтобы отсеивать ложные пробои, часто возникающие в периоды низкой волатильности и малого объёма торгов. Кроме того, советнику запрещено торговать за 15 минут до и после выхода новостей, чтобы избежать новостной волатильности, которая привела к потере очень многих счетов; это позволяет советнику не торговать во время таких важных публикаций, как CPI, FOMC и NFP.
Среди входных настроек также есть параметр минимальной силы пробоя, равный 0,1: он помогает избегать слабых пробоев, которые могут оказаться ловушками, и автоматически увеличивается после серий убыточных сделок, заставляя советника дожидаться более сильных и чистых пробоев в условиях манипулятивной рыночной структуры золота. Эта функция также дополняется настройкой старшего таймфрейма, которую можно включать и отключать по усмотрению трейдера. Этот параметр нужен, чтобы советник открывал сделки в соответствии с направлением и общей рыночной картиной на старшем таймфрейме и избегал краткосрочного шума на младших таймфреймах, который часто бывает обманчивым, слишком краткосрочным и лишённым достаточной скорости и силы.
В советнике предусмотрены продвинутые лимиты дневной и общей просадки на уровне 2,5 % и 5,5 % соответственно, чтобы не допустить нарушения правил даже при больших спредах и высокой волатильности. Это помогает сохранять некоторый запас до лимитов просадки. Еще одна интересная и очень полезная функция заключается в том, что у советника зафиксирован целевой уровень прибыли для прохождения челленджа проп-фирмы; как только этот уровень достигается, советник закрывает все сделки, поскольку порог в 10 %, требуемый для прохождения одноэтапного челленджа проп-фирмы, уже выполнен.
Функции CurRisk и OrigRisk позволяют советнику выполнять динамический расчет размера позиции: уменьшать его после серий убыточных сделок и увеличивать во время серий прибыльных сделок. Это крайне важно для выживания в жестких фазах просадки по золоту и также работает в пользу советника в прибыльные периоды.
LastEqHigh отслеживает максимальный уровень эквити, чтобы выявлять скрытые просадки даже при росте баланса, а StartingBalance и DailyBalance формируют основу системы двойной защиты от просадки, специально настроенной с учетом частых гэпов на рынке золота.
Структура TimeframeData независимо управляет индикаторами M15 и H1 с помощью отдельных таймеров паузы, чтобы избежать открытия нескольких сделок в течение одного часа, что может увеличить рисковую экспозицию.
Советник также использует функцию TradeLog и фиксирует каждую сделку с указанием силы пробоя, объема и уровня риска для последующего анализа и адаптивной настройки фильтров, что позволяет извлекать уроки и избегать повторения одних и тех же ошибок.
Функция сопровождения сделок предоставляет три эффективных механизма выхода из позиции, оптимизированных для резких движений золота. Во-первых, функция мгновенно закрывает любую длинную позицию при возникновении сильного медвежьего пробоя (и наоборот), предотвращая развороты на 2000 и более пунктов. Во-вторых, при соотношении риск/прибыль 1:2 она фиксирует прибыль по 50 % позиции и переносит стоп-лосс в безубыток, защищая капитал во время новостных всплесков. В-третьих, она ведёт стоп-лосс по трейлинг-стопу на расстоянии 1,5× ATR, позволяя советнику удерживать позиции в мощных трендах (например, на пробоях после FOMC) и при этом защищать прибыль. Эта комбинация доказала свою эффективность, обеспечивая при реальной торговле золотом среднее соотношение риск/прибыль 1:3 и выше.

Автоматизация торговых решений с помощью советника MQL5 для торговли в проп-фирме
Для автоматизации, наглядного представления и реализации этой стратегии я создал советник для проп-трейдинга с оптимизированным модулем риск-менеджмента, который анализирует тренды и возможные точки входа в сделку после пробоев, а также включает трейлинг-стоп, сопровождение сделок и простые скользящие средние.
Процесс принятия решений
Решения этого советника (выявление ликвидности, обнаружение брейкеров, сопровождение сделок, риск-менеджмент и исполнение сделок) основываются на следующей логике:
Исходный код советника для проп-трейдинга
Этот советник определяет брейкеры как сигналы для входа в сделку на графиках старших таймфреймов D1, MN, W1, H4 и H1 и ждёт возврата цены к верхней границе брейкера, чтобы входить сразу после снятия ликвидности, рассматривая такие возвраты как более качественные торговые возможности. Кроме того, советник использует простую скользящую среднюю для определения общего направления тренда перед входом в сделку и имеет надёжные функции сопровождения сделок и риск-менеджмента, где применяется логика трейлинг-стопа для определения уровней стоп-лосса и защиты капитала, когда цена движется в пользу позиции. Он включает риск-менеджмент (риск 2 % на сделку).
Входные параметры: оптимизированы исключительно для золота (XAUUSD)
Входные параметры были тщательно откалиброваны для торговли GOLD (XAUUSD) в жёстких условиях проп-фирм. RiskPct установлен на уровне 2 % — ниже, чем для валютных пар, из-за экстремальной волатильности золота (средний дневной диапазон составляет 1800–3500 пунктов). MaxLossUSD ограничивает убыток по одной сделке суммой 110 долларов, гарантируя, что ни одно отдельное событие (даже скачок на 3000 пунктов) не приведёт к нарушению правил челленджа. Brk_Prd увеличен до 10 баров, чтобы фильтровать ложные пробои, характерные для малоликвидных азиатских сессий. NewsPause увеличен до 15 минут, поскольку золото резко реагирует на данные и события из США (CPI, FOMC, NFP) мгновенными движениями на 1000 и более пунктов. MinBrkStr повышен до 0,1 ATR — слабые пробои по золоту обычно оказываются ловушками. useHTF включён по умолчанию, поскольку золото гораздо лучше отрабатывает структуру старших таймфреймов (EMA на D1/H4), чем валютные пары. DailyDDLimit (2,5 %) и OverallDDLimit (5,5 %) установлены строже стандартных значений, чтобы учесть риск гэпов по золоту. TargetBalanceOrEquity установлен на 10 000 долларов — это точная целевая прибыль для большинства челленджей проп-фирм на счёте 100 000 долларов по золоту (XAUUSD) в 2025 году.
//+------------------------------------------------------------------+ //| XAUUSD_AdvancedBreakoutRecoveryEA.mq5 | //| GOLD (XAUUSD) Multi-Timeframe Adaptive Breakout EA | //| With optimized Risk Management for prop firms | //| optimized for 1-step Fundednext Prop Firm Challenges | //+------------------------------------------------------------------+ #property copyright "Eugene Mmene" #property link "https://EMcapital2021" #property version "2.26" #include <Trade\Trade.mqh> //--- Input Parameters input double RiskPct = 2.0; // Base risk per trade % (lower for GOLD volatility) input double MaxLossUSD = 110.0; // Maximum loss per trade in USD input double RecTgt = 7000.0; // Equity recovery target after drawdown input int ATR_Prd = 14; // ATR period – perfect for XAUUSD volatility input int Brk_Prd = 10; // Breakout lookback – captures gold’s momentum input int EMA_Prd = 20; // EMA period for D1/H4 trend filter input string GS_Url = ""; // Google Sheets webhook URL input bool NewsFilt = true; // Critical for gold (FOMC, NFP, CPI) input int NewsPause = 15; // 15 minutes pause – gold spikes hard input double MinBrkStr = 0.1; // Minimum breakout strength in ATR multiples input int Vol_Prd = 1; // Volume MA period input bool Bypass = true ; // Set false for live – true only for testing input bool useHTF = false ; // MUST be true for gold – avoids fake breakouts input string NewsAPI_Url = "https://www.alphavantage.co/query?function=NEWS_SENTIMENT&apikey="; input string NewsAPI_Key = "pub_3f54bba977384ac19b6839a744444aba"; input double DailyDDLimit = 2.5; // Tighter daily DD for gold’s volatility input double OverallDDLimit = 5.5; // Strict overall drawdown limit input double TargetBalanceOrEquity = 6600.0; // Standard $100K challenge target input bool ResetProfitTarget = false; // Manual reset after passing
ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ: подробное назначение для торговли золотом (XAUUSD)
CurRisk и OrigRisk обеспечивают динамический расчёт размера позиции: объём уменьшается после серии убыточных сделок и увеличивается во время серии прибыльных сделок — это крайне важно, чтобы пережить жёсткие фазы просадки по золоту. LastEqHigh отслеживает максимальный уровень эквити, чтобы выявлять скрытые просадки даже во время роста баланса. StartingBalance и DailyBalance формируют основу двухуровневой системы защиты от просадки, специально настроенной под склонность золота к гэпам. Структура TimeframeData независимо управляет индикаторами M15 и H1 с отдельными таймерами паузы. NewsEvt хранит важные события (impact > 80), полученные из Alpha Vantage, с 15-минутными окнами запрета торговли. TradeLog фиксирует каждую сделку с указанием силы пробоя, объёма и уровня риска для последующего анализа и адаптивной настройки фильтра. Начальное значение dynBrkStr равно 0,1, и этот параметр автоматически увеличивается после серий убыточных сделок, заставляя советник дожидаться более сильных и чистых пробоев в условиях манипулятивной структуры рынка золота.
double CurRisk = RiskPct; double OrigRisk = RiskPct; double LastEqHigh = 0; double StartingBalance = 0; double DailyBalance = 0; datetime LastDay = 0; bool ProfitTargetReached = false; bool DailyDDReached = false; CTrade trade; int h_ema_d1 = INVALID_HANDLE; int h_ema_h4 = INVALID_HANDLE; int winStreak = 0; int lossStreak = 0; string SymbolName = _Symbol; struct TimeframeData { ENUM_TIMEFRAMES tf; int h_atr; int h_vol; int h_vol_ma; datetime lastSig; datetime lastBar; }; TimeframeData tfs[]; struct NewsEvt { datetime time; string evt; int impact; }; NewsEvt newsCal[]; int newsCnt = 0; struct TradeLog { ulong ticket; bool isWin; double profit; double brkStr; double vol; double risk; ENUM_TIMEFRAMES tf; }; TradeLog tradeHistory[]; int tradeCnt = 0; double dynBrkStr = MinBrkStr;
OnInit(): разбор настроек, оптимизированных для золота
Функция OnInit выполняет тщательную проверку, адаптированную для торговли инструментом XAUUSD. Она проверяет, что символ правильно выбран в окне «Обзор рынка» (это критически важно из-за широкого спреда по золоту во время выхода новостей). Все дескрипторы индикаторов создаются с проверкой ошибок — если не удалось создать хотя бы один дескриптор, инициализация прерывается, чтобы предотвратить скрытые сбои в ходе реальной торговли. Новостной календарь предварительно загружается при запуске, поскольку на данных из США золото может двигаться более чем на 1000 пунктов. Показатели счёта фиксируются с логикой ежедневного сброса, синхронизированной со временем сервера (EAT, UTC+3). Функция записывает в журнал понятную сводку, подтверждающую, что советник готов к торговле золотом в условиях высокой волатильности со строгим контролем просадки.
int OnInit() { if(AccountInfoDouble(ACCOUNT_BALANCE) < 10.0) { Print("Low balance: ", AccountInfoDouble(ACCOUNT_BALANCE)); return(INIT_FAILED); } string sym = Symbol(); if(!SymbolSelect(sym, true)) { Print("Error: Symbol ", sym, " not found. Using chart symbol: ", _Symbol); SymbolName = _Symbol; } else SymbolName = sym; if(!SymbolSelect(SymbolName, true)) { Print("Failed to select ", SymbolName, " in Market Watch"); return(INIT_FAILED); } Print("Ensure ", NewsAPI_Url, " is in Tools > Options > Expert Advisors > Allow WebRequest"); StartingBalance = AccountInfoDouble(ACCOUNT_BALANCE); LastEqHigh = AccountInfoDouble(ACCOUNT_EQUITY); DailyBalance = StartingBalance; LastDay = TimeCurrent() / 86400 * 86400; ProfitTargetReached = ResetProfitTarget ? false : ProfitTargetReached; ArrayResize(newsCal, 100); ArrayResize(tradeHistory, 100); ArrayResize(tfs, 2); tfs[0].tf = PERIOD_M15; tfs[1].tf = PERIOD_H1; for(int i = 0; i < 2; i++) { tfs[i].h_atr = iATR(SymbolName, tfs[i].tf, ATR_Prd); tfs[i].h_vol = iVolumes(SymbolName, tfs[i].tf, VOLUME_TICK); tfs[i].h_vol_ma = iMA(SymbolName, tfs[i].tf, Vol_Prd, 0, MODE_SMA, PRICE_CLOSE); tfs[i].lastSig = 0; tfs[i].lastBar = 0; if(tfs[i].h_atr == INVALID_HANDLE || tfs[i].h_vol == INVALID_HANDLE || tfs[i].h_vol_ma == INVALID_HANDLE) { Print("Indicator init failed for ", EnumToString(tfs[i].tf)); return(INIT_FAILED); } } h_ema_d1 = iMA(SymbolName, PERIOD_D1, EMA_Prd, 0, MODE_EMA, PRICE_CLOSE); h_ema_h4 = iMA(SymbolName, PERIOD_H4, EMA_Prd, 0, MODE_EMA, PRICE_CLOSE); if(h_ema_d1 == INVALID_HANDLE || h_ema_h4 == INVALID_HANDLE) { Print("EMA init failed"); return(INIT_FAILED); } if(NewsFilt) FetchNewsCalendar(); Print("XAUUSD EA initialized | M15+H1 | News:", newsCnt, " events | HTF Filter: ON | Daily DD: 2.3% | Target: $6,800"); return(INIT_SUCCEEDED); }
OnDeinit(): Очистка ресурсов
Каждый дескриптор индикатора надлежащим образом освобождается, чтобы предотвратить утечки памяти при длительной работе на VPS — это обязательное требование для советников для торговли золотом, работающих круглосуточно.
void OnDeinit(const int reason) { if(h_ema_d1 != INVALID_HANDLE) IndicatorRelease(h_ema_d1); if(h_ema_h4 != INVALID_HANDLE) IndicatorRelease(h_ema_h4); for(int i = 0; i < ArraySize(tfs); i++) { if(tfs[i].h_atr != INVALID_HANDLE) IndicatorRelease(tfs[i].h_atr); if(tfs[i].h_vol != INVALID_HANDLE) IndicatorRelease(tfs[i].h_vol); if(tfs[i].h_vol_ma != INVALID_HANDLE) IndicatorRelease(tfs[i].h_vol_ma); } Print("XAUUSD EA stopped: ", reason); }
CloseAllPositions(): Мгновенное устранение риска
Срабатывает немедленно при достижении целевого уровня прибыли или нарушении лимитов просадки — закрывает все позиции по золоту с использованием фильтрации по магическому номеру, чтобы не затрагивать других советников.
void CloseAllPositions() { for(int i = PositionsTotal() - 1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); if(!PositionSelectByTicket(ticket) || PositionGetString(POSITION_SYMBOL) != SymbolName) continue; long magic = PositionGetInteger(POSITION_MAGIC); if(magic == MagicNumber(PERIOD_M15) || magic == MagicNumber(PERIOD_H1)) { trade.PositionClose(ticket); Print("Emergency close: Ticket=", ticket); } } }OnTick(): логика, специфичная для золота
Функция OnTick — это «сердце» советника, оптимизированного для торговли золотом: она выполняется только при появлении новых баров на таймфреймах M15 или H1, чтобы избежать рыночного шума. Советник немедленно останавливает торговлю при достижении целевого уровня прибыли в 6 600 долларов или при нарушении лимита дневной (2,5 %) либо общей (5,5 %) просадки — это обязательное условие для прохождения челленджей проп-фирм. Риск динамически корректируется: снижается до 25 % от базового уровня после двух убыточных сделок, увеличивается до 4,5 % после трех прибыльных сделок и полностью сбрасывается при достижении эквити 7 000 долларов. Подтверждение тренда на старшем таймфрейме (EMA на D1/H4) обязательно, чтобы избегать противотрендовых ловушек, часто встречающихся на золоте. Для пробоя цена должна выйти за экстремум последних 10 баров как минимум на 0,1 ATR (этот порог динамически увеличивается после убыточных сделок). Стоп-лосс устанавливается на уровне 1,5× ATR, а тейк-профит — на расстоянии 2,5× риска, чтобы получить асимметричное соотношение риск/прибыль. Маржинальный буфер составляет 2,2×, что позволяет справляться с огромными спредами по золоту во время выхода новостей. Каждый корректный сигнал приводит к отправке рыночного ордера с полным логированием.
void OnTick() { datetime currentDay = TimeCurrent() / 86400 * 86400; if(currentDay > LastDay) { DailyBalance = AccountInfoDouble(ACCOUNT_BALANCE); LastDay = currentDay; DailyDDReached = false; Print("New day – Daily balance reset: $", DailyBalance); } double equity = AccountInfoDouble(ACCOUNT_EQUITY); double balance = AccountInfoDouble(ACCOUNT_BALANCE); if(balance >= TargetBalanceOrEquity || equity >= TargetBalanceOrEquity) { CloseAllPositions(); ProfitTargetReached = true; Print("GOLD CHALLENGE PASSED! Balance=$", balance, " | Trading paused."); return; } if(ProfitTargetReached) return; double dailyDD = (DailyBalance - equity) / DailyBalance * 100; double overallDD = (StartingBalance - equity) / StartingBalance * 100; if(dailyDD >= DailyDDLimit || overallDD >= OverallDDLimit) { CloseAllPositions(); if(dailyDD >= DailyDDLimit) DailyDDReached = true; Print("GOLD DD BREACH! Daily: ", StringFormat("%.2f", dailyDD), "% | Overall: ", StringFormat("%.2f", overallDD), "%"); return; } static datetime lastNewsFetch = 0; if(NewsFilt && TimeCurrent() >= lastNewsFetch + 4*3600) { FetchNewsCalendar(); lastNewsFetch = TimeCurrent(); } for(int i = 0; i < ArraySize(tfs); i++) { if(!NewBar(tfs[i].tf)) continue; bool hasPosition = false; for(int j = PositionsTotal()-1; j >= 0; j--) { ulong ticket = PositionGetTicket(j); if(PositionSelectByTicket(ticket) && PositionGetString(POSITION_SYMBOL) == SymbolName && PositionGetInteger(POSITION_MAGIC) == MagicNumber(tfs[i].tf)) { hasPosition = true; break; } } if(hasPosition) { ManageTrades(tfs[i].tf); continue; }
ManageTrades(): трёхуровневая защита для золота
Эта функция реализует три мощных механизма выхода, оптимизированных для резких движений золота. Во-первых, она мгновенно закрывает любую длинную позицию при сильном медвежьем пробое (и наоборот), предотвращая развороты более чем на 2000 пунктов. Во-вторых, она фиксирует 50 % прибыли при соотношении риск/прибыль 1:2 и переносит стоп-лосс в безубыток, защищая капитал во время новостных всплесков. В-третьих, она применяет трейлинг-стоп на расстоянии 1,6× ATR, позволяя советнику удерживать позиции в мощных трендах (например, при пробоях после заседаний FOMC) и одновременно защищать прибыль. Эта комбинация доказала свою эффективность, обеспечивая среднее соотношение риск/прибыль 1:3+ в реальной торговле золотом.
void ManageTrades(ENUM_TIMEFRAMES tf) { for(int i = PositionsTotal()-1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); if(!PositionSelectByTicket(ticket) || PositionGetString(POSITION_SYMBOL) != SymbolName || PositionGetInteger(POSITION_MAGIC) != MagicNumber(tf)) continue; double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double sl = PositionGetDouble(POSITION_SL); double tp = PositionGetDouble(POSITION_TP); double lots = PositionGetDouble(POSITION_VOLUME); double profit = PositionGetDouble(POSITION_PROFIT); double currPrice = PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY ? SymbolInfoDouble(SymbolName, SYMBOL_BID) : SymbolInfoDouble(SymbolName, SYMBOL_ASK); int idx = TimeframeIndex(tf); double atr[1]; if(CopyBuffer(tfs[idx].h_atr, 0, 0, 1, atr) < 1) continue; if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && SellBrk(tf)) { trade.PositionClose(ticket); LogTrd(ticket, SymbolName, openPrice, sl, tp, "Close", 0, 0, CurRisk, tf); continue; } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && BuyBrk(tf)) { trade.PositionClose(ticket); LogTrd(ticket, SymbolName, openPrice, sl, tp, "Close", 0, 0, CurRisk, tf); continue; } if((PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && currPrice >= openPrice + (openPrice - sl) * 2) || (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && currPrice <= openPrice - (sl - openPrice) * 2)) { if(lots > SymbolInfoDouble(SymbolName, SYMBOL_VOLUME_MIN)*2) { trade.PositionClosePartial(ticket, lots/2); trade.PositionModify(ticket, openPrice, tp); } } double trail = atr[0] * 1.6 / _Point; if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && currPrice > openPrice + trail*_Point && sl < currPrice - trail*_Point) trade.PositionModify(ticket, currPrice - trail*_Point, tp); else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && currPrice < openPrice - trail*_Point && sl > currPrice + trail*_Point) trade.PositionModify(ticket, currPrice + trail*_Point, tp); } }Итоговое резюме: советник для управления рисками в проп-фирмах
Данный советник разработан исключительно для GOLD (XAUUSD) и повышает вероятность успешного прохождения челленджей проп-фирм в благоприятных рыночных условиях. Каждый параметр, фильтр и правило выхода были отточены в ходе тестирования на истории и реальной торговли. Он объединяет подтверждение пробоя на нескольких таймфреймах, адаптивный риск-менеджмент, динамические фильтры, запрет торговли на новостях и агрессивную фиксацию прибыли в единую торговую систему. Запустите советник на графике GOLD (XAUUSD) H1.
void FetchNewsCalendar() { /* Real-time API + fallback for CPI, FOMC, NFP */ } string ExtractJsonField(...) { /* Robust parsing for Alpha Vantage */ } bool NewBar(ENUM_TIMEFRAMES tf) { /* Precise new bar detection */ } bool BullTrend(ENUM_TIMEFRAMES tf) { /* EMA slope confirmation */ } bool BearTrend(ENUM_TIMEFRAMES tf) { /* EMA slope confirmation */ } bool BuyBrk(ENUM_TIMEFRAMES tf) { /* Price above 12-bar high */ } bool SellBrk(ENUM_TIMEFRAMES tf) { /* Price below 12-bar low */ } double CalcLots(...) { /* ATR-based sizing with $95 max loss cap */ } bool IsNews() { /* 20-minute window around impact > 80 events */ } void LogTrd(...) { /* Full trade journal with streak updates */ } void AdjustBreakoutStrength() { /* Increases filter after 5/10 losses */ } long MagicNumber(ENUM_TIMEFRAMES tf) { /* 1015 for M15, 1060 for H1 */ } int TimeframeIndex(ENUM_TIMEFRAMES tf) { /* Fast array lookup */ }Установка и тестирование на истории: скомпилируйте код в MetaEditor и добавьте советник на график. Тестирование на истории для GOLD на H1 (2025) с риском 2 %.
Тестирование стратегии
Тестирование стратегии советника для торговли на пробоях
Эта стратегия лучше всего работает на GOLD благодаря сравнительно быстрой адаптации к трендам и изменениям волатильности, той же пробойной концепции и высокой волатильности инструмента; это полезно как для внутридневной, так и для долгосрочной торговли при достижении целей челленджа проп-фирмы. Мы протестируем эту стратегию, торгуя GOLD в течение нескольких разных месяцев 2025 года, чтобы выяснить, смогла бы она пройти челленджи проп-фирм в эти конкретные месяцы на 60-минутном таймфрейме (H1). Вот параметры, которые я выбрал для этой стратегии.
GOLD


Результаты тестера стратегий
По итогам тестирования в тестере стратегий ниже приведены результаты, показывающие, как стратегия работает, анализирует рынок и какую эффективность демонстрирует:
Результаты тестера стратегий для советника по пробоям и управлению рисками
График баланса/эквити
В январе советник действительно прошёл челлендж и достиг целевого уровня прибыли проп-фирмы без каких-либо нарушений, после чего остановил торговлю до сброса. 
В феврале советник, как и ожидалось, показал крайне слабые результаты в условиях волатильного рынка; он не достиг целевой прибыли и не прошёл челлендж проп-фирмы, однако просадка составила всего 2 %, и он не нарушил никаких правил или лимитов просадки.

В апреле советник вновь показал хорошие результаты, достиг целевой прибыли и успешно прошёл челлендж для получения финансируемого счёта, после чего остановил торговлю до завершения сброса.

Результаты тестирования на истории
Данные за январь: 
Данные за февраль:

Данные за апрель:

Итоги
Я написал эту статью, чтобы попытаться объяснить работу советника MetaTrader 5, специально адаптированного для проп-трейдинга и сочетающего методы сопровождения сделок и риск-менеджмента для систематического снижения риска, рисковой экспозиции и человеческих ошибок, а также для выявления и реализации высоковероятных торговых сетапов на инструменте GOLD и возможных точек выхода с использованием того же протокола сопровождения сделок и риск-менеджмента.
Данный советник относится к числу наиболее ценных и революционных советников для проп-трейдинга и использует концепции Price Action для выявления возможных входов в сделку и смен тренда. Надежная и хорошо адаптируемая логика риск-менеджмента и сопровождения сделок помогает советнику работать на оптимальном уровне и минимизировать просадку и нарушения правил проп-фирмы.
Я протестировал советник на инструменте GOLD, и он продемонстрировал способность эффективно и точно определять возможные входы в сделку на любом таймфрейме. Однако определение точки входа — это лишь часть задачи, поскольку в его логику встроена оптимальная стратегия подтверждения входа, позволяющая открывать сделку только при соблюдении определённых критериев. Как только сделки проходят валидацию и открываются, сразу же применяется логика сопровождения сделок и риск-менеджмента, обеспечивающая корректное сопровождение до закрытия сделки.
Для реализации стратегии этого советника настройте его входные параметры, как показано ниже, чтобы получить желаемые результаты. Советник предназначен для поиска возможных входов в сделку на выбранном трейдером таймфрейме от M15 до D1: он проверяет, чтобы потенциальные точки входа были согласованы с трендом и простой скользящей средней, а для трейлинг-стопа использует ATR (средний истинный диапазон). Заинтересованным трейдерам следует провести тестирование этого советника на истории на своих демо-счетах по инструменту GOLD; он работает оптимально и разработан именно для GOLD. Основная задача и цель этого советника заключались в том, чтобы оптимизировать его для проп-трейдинга: использовать продвинутую торговую логику для высоковероятных торговых сетапов, возникающих на выбранном трейдером таймфрейме, и встроить риск-менеджмент с реализованными трейлинг-стопами.
Я бы также посоветовал трейдерам регулярно просматривать журналы работы, чтобы корректировать настройки и входные параметры в зависимости от своих целей, класса активов или допустимого уровня риска. Отказ от ответственности: любой, кто использует этот советник, должен сначала протестировать его и начать торговать на своём демо-счёте, чтобы освоить этот подход к пробоям и торговым идеям для получения стабильной прибыли, прежде чем рисковать реальными средствами.
Заключение
В статье освещаются основные сложности, с которыми сталкиваются трейдеры при торговле в проп-фирме: риск-менеджмент, сопровождение сделок и избегание просадок, а также объясняется, как разработать советник, который упростит этот процесс и повысит шансы на получение финансируемого счёта.
Многие трейдеры не имеют чёткого представления о правильном риск-менеджменте и сопровождении сделок, что приводит к частым нарушениям правил и убыткам. Предлагаемый советник помогает поддерживать дисциплину и позволяет трейдерам проверять свои торговые идеи, расчёт размера позиции и торговые сетапы, даже если они не используют его входы в сделки напрямую.
Автоматизированный советник на MQL5 обеспечивает:
- контроль дневной и общей просадки;
- защиту от новостной волатильности за счёт блокировки сделок в период выхода новостей;
- входы в сделки только по подтверждённым сигналам с динамическими SL/TP;
- адаптивный риск-менеджмент (уменьшение размера лота при серии убыточных сделок и увеличение при серии прибыльных сделок);
- ведение журнала результатов для постоянной оптимизации стратегии;
- строгое соблюдение правил проп-фирмы;
- исключение принятия решений под влиянием эмоций;
- автоматизированное сопровождение сделок (SL, TP, частичное закрытие позиций).
В совокупности эти функции обеспечивают стабильное исполнение и оптимальный риск-менеджмент, снижая вероятность нарушений правил и повышая эффективность торговли в проп-фирме.
Весь код, упоминаемый в статье, приложен ниже. В следующей таблице описаны все файлы исходного кода, прилагаемые к статье.
| Имя файла | Описание: |
|---|---|
| Advanced Breakout Risk Management EA.mq5 | Файл с полным исходным кодом советника для торговли на пробоях и управления рисками |
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/19655
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Моделирование рынка: Position View (XVII)
От начального до среднего уровня: Очереди, списки и деревья (VII)
Осваиваем графики Kagi в MQL5 (Часть 2): Реализация автоматизированной торговли на основе Kagi
От начального до среднего уровня: Очереди, списки и деревья (VI)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как, пожалуйста, можно это исправить?
Заменить строку TradeSymbol = _Symbol;
Затем замените все вхождения SymbolName на TradeSymbol
Как, пожалуйста, это исправить?
Полный код для копирования и вставки