Нейроструктурный торговый движок — NSTE (Часть I): Построение мультиаккаунтной системы с учетом ограничений проп-фирм
Введение
При торговле криптовалютными CFD на счетах в проп-фирмах рынок может сорвать ваш торговый день тремя способами еще до его начала: волатильная свеча пробивает стоп-лосс на основе ATR и исчерпывает дневной лимит убытка; скрипт переключается между счетами и незаметно закрывает открытые позиции; либо шумный боковой рынок сводит преимущество к нулю десятками мелких убытков. Эта статья решает все три проблемы
Это первая статья в серии из 19 частей, посвященной нейроструктурному торговому движку (Neuro-Structural Trading Engine) — мультиаккаунтной системе алгоритмической торговли, предназначенной для одновременной торговли криптовалютными CFD, включая BTCUSD и ETHUSD, на нескольких счетах в проп-фирмах. Система объединяет нейронные сети LSTM, обнаружение рыночного режима на основе сжатия и адаптивные алгоритмы, вдохновленные биологией, в единую торговую систему.
Эта статья предназначена для алгоритмических трейдеров, которым нужна надежная основа для запуска автоматизированных стратегий на нескольких счетах в проп-фирмах без нарушения правил по просадке. К концу статьи у вас будет рабочая архитектура процессов, формула фиксированного долларового риска, фильтр шума для исключения неблагоприятных рынков и полный каркас советника, который можно скомпилировать и протестировать в Тестере стратегий.
Система построена на трех непременных принципах.
Принцип 1. Стоп-лосс неприкосновенен
Риск по каждой сделке ограничен фиксированной суммой в долларах — $1,00. Не процентом от цены. Не множителем ATR. Жестко заданной суммой в долларах. Размер лота корректируется так, чтобы расстояние до SL точно соответствовало риску в $1,00.
Формула:
lot = MAX_LOSS_DOLLARS / (sl_distance_points * tick_value)
Это предотвращает катастрофические убытки свыше $500, к которым могут привести стоп-лоссы на основе ATR на волатильных криптовалютных рынках. Когда курс биткоина изменяется на 2 000 долларов за считанные минуты, стоп-лосс на основе ATR может в одной сделке исчерпать весь дневной лимит убытка. Стоп-лосс с фиксированным долларовым риском гарантирует, что независимо от волатильности рынка убыток не превысит заранее заданную сумму.
Принцип 2. Один скрипт на счет
Python API для MetaTrader 5, то есть пакет MetaTrader 5, является синглтоном. Вызов mt5.login() для переключения счетов закрывает все открытые сделки в текущем терминале. Для каждого счета в проп-фирме запускается отдельный процесс Python, подключающийся к собственному экземпляру терминала MetaTrader 5. Это архитектурное решение основано на негативном опыте: попытка управлять несколькими счетами в проп-фирмах из одного скрипта приводила к тихому закрытию сделок при переключении скрипта между счетами.
Принцип 3. Централизованная конфигурация, децентрализованное исполнение
Все торговые параметры хранятся в файле MASTER_CONFIG.json. Каждый скрипт импортирует значения через файл config_loader.py. Ни в одном исполняемом скрипте нет жестко зашитых торговых параметров. Это предотвращает случайное изменение параметров риска. При работе с реальными деньгами на шести разных счетах в проп-фирмах случайная правка, изменяющая риск на сделку с $1,00 до $10,00, недопустима.
Архитектура "один скрипт на счет"
Каждый скрипт BRAIN запускает независимый процесс, подключенный к собственному терминалу MetaTrader 5:
// --- Architecture Diagram: One-Script-Per-Account ---
+-------------------+ +-------------------+ +-------------------+
| BRAIN_Account_A | | BRAIN_Account_B | | BRAIN_Account_C |
| Process 1 | | Process 2 | | Process 3 |
+--------+----------+ +--------+----------+ +--------+----------+
| | |
v v v
+-------------------+ +-------------------+ +-------------------+
| MT5 Terminal 1 | | MT5 Terminal 2 | | MT5 Terminal 3 |
+-------------------+ +-------------------+ +-------------------+
Каждый скрипт BRAIN выполняет 60-секундный цикл:
- получить 100 баров минутных данных из терминала MetaTrader 5;
- рассчитать 8 технических признаков, включая RSI, MACD, полосы Боллинджера и т.д.;
- проверить рыночный режим с помощью анализа коэффициента сжатия;
- получить прогноз LSTM (BUY/SELL/HOLD) с оценкой уверенности;
- исполнить сделку, если сигнал проходит все фильтры и превышает порог уверенности;
- управлять открытыми позициями, включая частичное закрытие при достижении 50% TP и скользящий стоп-лосс;
- сделать паузу на 60 секунд и повторить весь цикл.
На приведенной ниже схеме показана полная архитектура:

Рисунок 1. Три независимых процесса BRAIN подключаются к отдельным экземплярам терминала MetaTrader 5 для полной изоляции процессов.
Эта архитектура масштабируется горизонтально. Добавление нового счета в проп-фирме означает добавление нового скрипта BRAIN и нового экземпляра терминала MetaTrader 5. Существующие процессы не затрагиваются.
Нейронная сеть LSTM
Основной механизм прогнозирования использует стековую архитектуру LSTM (долгой краткосрочной памяти) из нескольких слоев. LSTM — это тип рекуррентных нейронных сетей, специально предназначенный для выявления долгосрочных зависимостей в последовательных данных, поэтому такие сети хорошо подходят для прогнозирования временных рядов на финансовых рынках.
Спецификация архитектуры:
- входные данные — 8 признаков × 30 временных шагов = 240 входных значений на один прогноз;
- слой LSTM 1 — 128 скрытых нейронов с функцией активации tanh;
- слой LSTM 2 — 128 скрытых нейронов с функцией активации tanh;
- dropout-слой — 40% между слоями для предотвращения переобучения;
- выходные данные — три класса (BUY, SELL, HOLD) через вероятностное распределение Softmax.
Модель обучается офлайн с использованием методологии пошаговой оптимизации (walk-forward) и экспортируется в виде файлов .pth для PyTorch. Во время реальной торговли инференс выполняется на CPU, поскольку DirectML для GPU AMD не поддерживает обратное распространение ошибки для LSTM на уровне своего вычислительного ядра. Прямой проход на CPU занимает менее 10 мс на один прогноз, что более чем достаточно для 60-секундного торгового цикла.
При обучении используется целевая функция из шести компонентов, балансирующая несколько целей:
- доля прибыльных сделок — байесовская апостериорная оценка с априорным распределением Beta(10,10) для работы с малыми выборками;
- профит-фактор — средняя прибыль / средний убыток; должен превышать 1,5;
- коэффициент Шарпа — доходность с поправкой на риск в годовом выражении;
- штраф за максимальную просадку — экспоненциальный штраф по мере приближения просадки к лимитам;
- количество сделок — для статистической значимости требуется не менее 30 наблюдений;
- оценка стабильности по окнам walk-forward, штрафующая за переобучение на одном периоде.
Байесовское априорное распределение Beta(10,10) играет ключевую роль. Без него модель, совершившая две сделки и выигравшая обе, показала бы долю прибыльных сделок 100%. Априорное распределение Beta смещает апостериорную оценку к 50%, поэтому требуются существенные доказательства, прежде чем оценка доли прибыльных сделок значительно отклонится от базового уровня.
Обнаружение рыночного режима на основе сжатия
Ключевая идея системы обнаружения рыночного режима проста:
Данные с выраженной структурой хорошо сжимаются; случайные данные сжимаются плохо.
Если ценовое движение имеет распознаваемый паттерн — трендовый, с возвратом к среднему или иной структурированный, — данные сожмутся сильнее, поскольку алгоритм сжатия сможет выявить повторяющиеся паттерны. Если ценовое движение представляет собой случайный шум, то есть шумный рынок без четкого направления, сжатие почти не дает результата, поскольку отсутствуют пригодные для использования паттерны.
Реализация алгоритма включает следующие шаги:
- взять последние 100 цен закрытия с 1-минутного графика;
- преобразовать данные в байты с помощью struct.pack из Python;
- сжать данные с помощью zlib с максимальным уровнем сжатия 9;
- вычислить ratio = len(original_bytes) / len(compressed_bytes).
Коэффициент сжатия показывает, насколько структурировано текущее ценовое движение:
// --- Regime Classification Thresholds --- ratio >= 3.5 -> CLEAN regime -> Market is structured, TRADE ratio >= 2.5 -> VOLATILE regime -> Moderate structure, HOLD ratio < 2.5 -> CHOPPY regime -> Random noise, HOLD
Три зоны рыночного режима и их значение для торговли:

Рисунок 2. Обнаружение рыночного режима на основе сжатия. Три зоны рыночного режима — CLEAN, VOLATILE и CHOPPY, — определяемые пороговыми значениями коэффициента сжатия. Только режим CLEAN допускает торговлю.
Торговля выполняется только в режиме CLEAN. Этот единственный фильтр отсеивает значительную долю убыточных сделок, возникающих в условиях шумного бокового рынка. При тестировании на исторических данных один фильтр сжатия повысил долю прибыльных сделок системы примерно на 12 процентных пунктов по сравнению с торговлей во всех режимах.
Преимущество этого подхода в том, что он полностью независим от конкретной модели. Он не зависит от индикаторов, паттернов или какой-либо конкретной рыночной теории. Он лишь определяет, содержат ли текущие ценовые данные пригодную для использования структуру независимо от ее формы.
Управление фиксированным долларовым риском
Система управления рисками построена на одном неизменном правиле: убыток по любой сделке не должен превышать $1,00. Все остальное вытекает из этого ограничения.
Параметры риска по сделкам:
- максимальный убыток — $1,00 на сделку (абсолютный предел);
- начальный SL — $0,60 (начальное расстояние до стоп-лосса в долларах);
- скользящий SL — уменьшает расстояние до стоп-лосса в 1,5 раза по мере благоприятного движения цены;
- итоговый SL — $1,00 (максимальное расстояние до стоп-лосса после всех скользящих корректировок);
- TP = 3 × расстояние до SL (соотношение риска и вознаграждения 1:3).
Двухэтапный механизм фиксации прибыли:

Рисунок 3. Двухэтапная фиксация прибыли. При достижении 50% расстояния до TP половина позиции закрывается, а стоп-лосс переносится в безубыток. Оставшаяся половина позиции продолжает движение до полного TP без риска.
Система динамического тейк-профита. При достижении 50% расстояния до TP система закрывает половину позиции. После частичного закрытия стоп-лосс переносится в безубыток, то есть на цену входа. В результате фиксируется прибыль по закрытой половине позиции, а оставшаяся часть может продолжать приносить доход без риска дальнейших потерь. Этот механизм превращает каждую прибыльную сделку в двухэтапный процесс фиксации прибыли.
Защитные лимиты проп-фирмы:
- дневной лимит убытка — 5% от баланса счета;
- максимальная просадка — 10% от баланса счета относительно пикового значения эквити;
- целевая прибыль — 10% от баланса счета.
Когда любой лимит приближается с учетом защитного запаса, BRAIN полностью прекращает торговлю по данному счету. Это предотвращает нарушение правил проп-фирмы, которое могло бы привести к закрытию счета и потере выделенного капитала.
Пайплайн конструирования признаков
На вход LSTM поступают восемь признаков, рассчитанных на основе необработанных минутных данных OHLCV. Каждый признак выбран для отражения отдельного аспекта микроструктуры рынка:
| Признак | Расчет | Назначение |
|---|---|---|
| RSI(14) | Индекс относительной силы, период 14 | Обнаружение перекупленности и перепроданности |
| MACD | EMA(12) - EMA(26) | Направление тренда и моментум |
| Сигнальная линия MACD | EMA(9) линии MACD | Подтверждение смены тренда |
| Верхняя полоса Боллинджера | SMA(20) + 2*StdDev | Верхняя граница волатильности |
| Нижняя полоса Боллинджера | SMA(20) - 2*StdDev | Нижняя граница волатильности |
| Momentum(10) | Close - Close[10] | Необработанный ценовой импульс |
| ROC(10) | (Close-Close[10])/Close[10] | Процентный темп изменения |
| ATR(14) | Средний истинный диапазон, период 14 | Оценка текущей волатильности |
При нормализации используется глобальная z-оценка: из значения вычитается среднее по набору данных, а затем результат делится на стандартное отклонение. Это обеспечивает независимость от масштаба всех признаков для разных инструментов. Без нормализации значения ATR для BTCUSD, которые могут составлять сотни долларов, доминировали бы над такими признаками, как RSI, значения которого находятся в диапазоне от 0 до 100.
Реализация на MQL5
Часть программы на MQL5 отвечает за исполнение сделок. Часть на Python отвечает за аналитическую логику: инференс LSTM, обнаружение рыночного режима и генерацию сигналов. Обмен данными между ними осуществляется через JSON-файлы сигналов, которые записываются Python и считываются советником MQL5, работающим на графике.
Ниже приведены ключевые особенности реализации советника. Полный исходный код приложен к статье для скачивания.
Входные параметры и настройки риска
В советнике сначала задаются входные параметры, соответствующие настройкам MASTER_CONFIG.json. Они позволяют настраивать параметры риска непосредственно в интерфейсе MetaTrader 5:
input group "=== Core Risk Settings ===" input double InpMaxLossDollars = 1.00; // Max Loss per Trade ($) input double InpInitialSL = 0.60; // Initial SL ($) input double InpTpMultiplier = 3.0; // TP = Nx SL Distance input double InpRollingSLMult = 1.5; // Rolling SL Divider input int InpDynamicTpPct = 50; // Dynamic TP Trigger (%) input bool InpUseDynamicTp = true; // Enable Dynamic TP input bool InpUseRollingSL = true; // Enable Rolling SL input double InpConfidenceThresh = 0.70; // Min Confidence to Trade input group "=== Drawdown Limits ===" input double InpDailyDDLimit = 4.5; // Daily DD Limit % input double InpMaxDDLimit = 9.0; // Max DD Limit %
Расчет размера лота при фиксированном долларовом риске
Основная формула риска рассчитывает точный размер лота, необходимый для риска ровно $1,00 при заданном расстоянии до стоп-лосса. Это важнейшая функция во всей системе:
// CalculateLotSize - determines exact lot size to risk InpMaxLossDollars // symbol - the trading instrument (e.g. "BTCUSD") // slDistPoints - stop loss distance in price points // returns - lot size clamped to broker min/max limits double CalculateLotSize(string symbol, double slDistPoints) { // Query broker for instrument specifications at runtime double tickVal = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE); double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE); double minLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); double maxLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); double lotStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); if(tickVal <= 0 || slDistPoints <= 0) return minLot; // (tickVal / tickSize) = dollar value per one point of price movement // So: slDistPoints * (tickVal / tickSize) = total dollar loss per lot // Dividing maxLoss by that gives the lot size for exact risk control // // Example: BTCUSD, SL = 50 points, tickVal = $0.01, tickSize = 0.01 // valuePerPoint = 0.01 / 0.01 = $1.00 per point per lot // dollarRisk = 50 * 1.00 = $50.00 per lot // lot = 1.00 / 50.00 = 0.02 lots -> risks exactly $1.00 double lot = InpMaxLossDollars / (slDistPoints * (tickVal / tickSize)); // Round DOWN to nearest lot step (never round up to avoid exceeding risk) lot = MathFloor(lot / lotStep) * lotStep; // Clamp to broker min/max volume limits if(lot < minLot) lot = minLot; if(lot > maxLot) lot = maxLot; return lot; }
Эта функция во время выполнения запрашивает у брокера стоимость тика и размер тика, обеспечивая корректный расчет размера лота для любого инструмента. Округление с помощью MathFloor гарантирует, что риск-бюджет не будет случайно превышен из-за округления в большую сторону.
Проверка безопасности по просадке
Перед принятием каждого торгового решения советник сверяет дневную и максимальную просадку с лимитами проп-фирмы:
bool IsDrawdownSafe() { double equity = AccountInfoDouble(ACCOUNT_EQUITY); double balance = AccountInfoDouble(ACCOUNT_BALANCE); // Daily drawdown check double dailyDD = (g_dailyStartBalance - equity) / g_dailyStartBalance * 100.0; if(dailyDD >= InpDailyDDLimit) { Print("DAILY DD LIMIT REACHED: ", DoubleToString(dailyDD, 2), "%"); return false; } // Max drawdown check (from peak balance) if(balance > g_peakBalance) g_peakBalance = balance; double maxDD = (g_peakBalance - equity) / g_peakBalance * 100.0; if(maxDD >= InpMaxDDLimit) { Print("MAX DD LIMIT REACHED: ", DoubleToString(maxDD, 2), "%"); return false; } return true; }
Дневная просадка рассчитывается относительно баланса на начало торгового дня. Максимальная просадка отслеживается относительно пикового значения баланса счета. При достижении любого из лимитов функция возвращает false, и советник прекращает торговую активность до улучшения условий.
Управление позициями: частичное закрытие и скользящий стоп-лосс
Функция ManagePositions реализует двухэтапную систему фиксации прибыли. Она перебирает все открытые позиции данного советника, отфильтрованные по магическому числу, и применяет логику динамического тейк-профита и скользящего стоп-лосса:
void ManagePositions() { for(int i = PositionsTotal() - 1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); if(ticket <= 0) continue; if(PositionGetInteger(POSITION_MAGIC) != InpMagic) continue; double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double curPrice = PositionGetDouble(POSITION_PRICE_CURRENT); double volume = PositionGetDouble(POSITION_VOLUME); long type = PositionGetInteger(POSITION_TYPE); // Calculate profit distance from entry double profitDist = 0; if(type == POSITION_TYPE_BUY) profitDist = curPrice - openPrice; else profitDist = openPrice - curPrice; double slDist = g_tracks[idx].initialSLDist; double tpDist = slDist * InpTpMultiplier; // Stage 1: Partial close at 50% of TP distance if(InpUseDynamicTp && !g_tracks[idx].partialClosed) { double trigger = tpDist * InpDynamicTpPct / 100.0; if(profitDist >= trigger) { // --- Simplified logic (full implementation in attached EA) --- // 1. Close half the position via OrderSend(TRADE_ACTION_DEAL) // 2. Move SL to breakeven (entry price) via OrderSend(TRADE_ACTION_SLTP) // 3. Set partialClosed = true to prevent repeat execution } } // Stage 2: Rolling SL tightens as price moves favorably if(InpUseRollingSL && profitDist > 0) { double newSLDist = slDist / InpRollingSLMult; // --- Simplified logic (full implementation in attached EA) --- // Calculate new SL price, only modify if tighter than current SL } } }
Механизм частичного закрытия особенно полезен для торговли на счетах в проп-фирмах. При закрытии половины позиции при достижении 50% целевого уровня тейк-профита и переносе стоп-лосса в безубыток каждая прибыльная сделка, достигшая этого порога, фиксирует гарантированную прибыль. Оставшаяся открытая часть позиции может продолжить движение до полного TP или дальше без риска потерять уже зафиксированную прибыль.
Результаты и оценка эффективности
Базовая архитектура с января 2026 года используется в реальной торговле на нескольких счетах в проп-фирмах. К ключевым характеристикам эффективности относятся:
- риск на сделку — ровно $1,00, ни разу не превышался;
- фильтр сжатия — отсеивает примерно 60-70% потенциальных сделок, оставляя сделки только в структурированных рыночных условиях;
- доля частичных закрытий — примерно 40% прибыльных сделок достигают порога 50% TP для частичного закрытия;
- соблюдение лимитов просадки — отсутствие нарушений правил проп-фирм на всех счетах;
- масштабируемость архитектуры — успешная одновременная работа более чем с шестью счетами при независимой изоляции процессов.
Самый важный показатель — последний: отсутствие нарушений правил. В торговле на счетах в проп-фирмах соблюдение ограничений важнее прибыльности. Система, последовательно соблюдающая лимиты просадки, со временем пройдет испытания и сохранит профинансированные счета, тогда как более прибыльная система, периодически нарушающая правила, может потерять все.
Полный каркас советника
Приведенный ниже минимальный каркас показывает, как все рассмотренные выше компоненты объединяются в рамках стандартного жизненного цикла советника MetaTrader 5. Полная реализация со всей логикой исполнения сделок приведена в приложенном файле .mq5.
//+------------------------------------------------------------------+ //| Article_01_EA.mq5 | //| Neuro-Structural Trading Engine - Foundation | //+------------------------------------------------------------------+ #property copyright "QuantumChildren Trading Systems" #property version "1.00" input double InpMaxLossDollars = 1.00; // Max Loss per Trade ($) input double InpInitialSL = 0.60; // Initial SL ($) input double InpTpMultiplier = 3.0; // TP = Nx SL Distance input double InpDailyDDLimit = 4.5; // Daily DD Limit % input double InpMaxDDLimit = 9.0; // Max DD Limit % input int InpMagic = 212001;// Magic Number double g_dailyStartBalance, g_peakBalance; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { g_dailyStartBalance = AccountInfoDouble(ACCOUNT_BALANCE); g_peakBalance = g_dailyStartBalance; Print("Foundation EA initialized. Balance: $", DoubleToString(g_dailyStartBalance, 2)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function - main trading loop | //+------------------------------------------------------------------+ void OnTick() { // Step 1: Safety check - are we within prop firm drawdown limits? if(!IsDrawdownSafe()) return; // Step 2: Manage existing positions (partial close + rolling SL) ManagePositions(); // Step 3: Generate or read trading signal // (signal generation via indicators shown in attached EA) // Step 4: Calculate lot size for fixed dollar risk // double lots = CalculateLotSize(_Symbol, slDistance); // Step 5: Execute trade if signal passes all validation // (full execution logic in attached EA) } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print("Foundation EA stopped. Reason: ", reason); }
Тестирование в Тестере стратегий
Чтобы протестировать приложенный советник в Тестере стратегий MetaTrader 5:
- Откройте MetaEditor (F4) и скомпилируйте приложенный файл Article_01_EA.mq5 (F7).
- В MetaTrader 5 откройте панель "Тестер стратегий" (Ctrl+R).
- Выберите скомпилированный советник в раскрывающемся списке "Советник".
- Задайте символ BTCUSD и таймфрейм M1 (1 минута).
- Для максимальной точности выберите модель тестирования "Каждый тик на основе реальных тиков".
- Укажите диапазон дат, охватывающий как минимум один месяц последних данных.
- Установите начальный депозит в соответствии с размером счета в проп-фирме, например $100 000.
- Нажмите "Старт", чтобы запустить тестирование на исторических данных.
Основные параметры, которые необходимо проверить на вкладке "Настройки" перед запуском:
| Параметр | По умолчанию | Описание |
|---|---|---|
| InpMaxLossDollars | 1,00 | Максимальный долларовый риск на сделку |
| InpInitialSL | 0,60 | Начальное расстояние до стоп-лосса в долларах |
| InpTpMultiplier | 3,0 | Тейк-профит как кратное расстояние до SL |
| InpDailyDDLimit | 4,5 | Порог приостановки торговли при дневной просадке (%) |
| InpMaxDDLimit | 9,0 | Порог приостановки торговли при максимальной просадке (%) |
После завершения тестирования просмотрите вкладки "Результаты", "График" и "Отчет". Кривая эквити должна показывать контролируемые просадки, соответствующие фиксированному риску $1,00 на сделку.

Рисунок 4. Отчет Тестера стратегий. Результаты тестирования на исторических данных BTCUSD на таймфрейме M1 с торговой статистикой, профит-фактором и показателями просадки.

Рисунок 5. Кривая эквити. Линии баланса и эквити за период тестирования на исторических данных, демонстрирующие контролируемые просадки при фиксированном риске $1,00 на сделку.
Как использовать- Откройте приложенный файл .mq5 в MetaEditor и нажмите F7, чтобы скомпилировать его.
- В MetaTrader 5 откройте "Навигатор" (Ctrl+N), найдите советник в разделе "Советники" и перетащите его на график BTCUSD или XAUUSD на таймфрейме M1.
- В окне свойств советника настройте входные параметры в соответствии с правилами управления рисками счета. Как минимум, проверьте параметры InpMaxLossDollars, InpDailyDDLimit и InpMaxDDLimit.
- Нажмите кнопку "Алготрейдинг" на панели инструментов MetaTrader 5, чтобы включить алгоритмическую торговлю.
- Запустите сигнальный механизм Python в отдельном окне терминала, чтобы советник мог считывать файлы сигналов.
- Отслеживайте вкладку "Эксперты" в нижней части MetaTrader 5: там отображаются логи исполнения сделок и сообщения о статусе сигналов.
Рекомендуемый таймфрейм: M1 (1 минута). Советник считывает сигналы, генерируемые бэкендом Python с интервалом 60 секунд.
Что теперь готово
После прочтения статьи готовы к использованию следующие практические результаты:
- Схема архитектуры процессов — один выделенный скрипт Python и один выделенный терминал MetaTrader 5 для каждого счета в проп-фирме без общего состояния между ними.
- Функция CalculateLotSize для расчета размера лота с фиксированным долларовым риском — ее можно вставить в любой советник, чтобы убыток по отдельной сделке не превышал указанную сумму независимо от волатильности инструмента.
- Фильтр рыночного режима на основе сжатия — три строчки логики, определяющие наличие у текущего рынка пригодной для использования структуры и отсеивающие 60-70% убыточных сделок в условиях шумного бокового рынка.
- Проверка безопасности по просадке IsDrawdownSafe — ее следует вызывать перед каждым торговым решением, чтобы не нарушать дневной лимит убытка или лимит максимальной просадки проп-фирмы.
- Двухэтапная система фиксации прибыли — частичное закрытие при достижении 50% TP и скользящий стоп-лосс, которые с одной стороны фиксируют часть прибыли по выигрышной сделке, а с другой стороны сохраняют безрисковую остаточную позицию, ожидающую конечного тейк-профита.
- Полный каркас советника — скомпилируйте приложенный файл .mq5 в MetaEditor, добавьте его на график и протестируйте в Тестере стратегий.
Пять параметров, которые не следует изменять без понимания последствий:
- InpMaxLossDollars — увеличение этого значения пропорционально увеличивает максимально возможный убыток по сделке;
- InpDailyDDLimit — установка значения выше фактического дневного лимита проп-фирмы приведет к закрытию счета;
- InpMaxDDLimit — то же, но для максимальной просадки;
- InpTpMultiplier — значения ниже 2,0 нарушают соотношение риска и вознаграждения, необходимое для прибыльности системы;
- InpDynamicTpPct — слишком высокое значение приводит к редкому срабатыванию частичных закрытий и исключает механизм гарантированной прибыли.
Критерии успешности при тестировании в Тестере стратегий: тестирование на исторических данных должно показать, что убыток ни по одной сделке не превышает InpMaxLossDollars, дневная просадка никогда не превышает InpDailyDDLimit процентов, а кривая эквити демонстрирует контролируемые неглубокие просадки, а не резкие вертикальные падения.
Заключение
Эта основа обеспечивает пять ключевых возможностей, на которых строится каждая последующая статья серии:
- фиксированный долларовый риск, предотвращающий катастрофические убытки независимо от волатильности рынка;
- определение режима CLEAN по коэффициенту сжатия, позволяющее избегать шумных убыточных боковиков;
- интеллектуальная часть системы на основе нейронной сети LSTM для прогнозирования направления движения с оценкой уверенности;
- двухэтапная фиксация прибыли посредством частичного закрытия позиции и скользящего стоп-лосса;
- защитные лимиты проп-фирмы, встроенные в каждый цикл принятия решений.
Система одновременно работает более чем с шестью счетами в проп-фирмах, каждый из которых имеет собственный выделенный процесс и терминал MetaTrader 5. Централизованная конфигурация гарантирует, что все счета используют одинаковые параметры риска, а в скриптах выполнения отсутствуют жестко заданные значения.
В следующей статье будет представлен Jardine's Gate — квантовый фильтр с шестью этапами проверки, расположенный между генерацией сигналов и исполнением сделок. Этот фильтр заметно повысил качество сделок, требуя, чтобы перед разрешением на исполнение сигналы проходили шесть независимых этапов проверки.
Полный исходный код советника, реализующий все рассмотренное в статье, приложен для скачивания. Код напрямую компилируется в MetaEditor 5, а полученный советник можно добавить на любой график для тестирования в Тестере стратегий.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/21372
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Разработка индикатора паттерна "Мегафон" на MQL5
Свинговые экстремумы и откаты в MQL5 (Часть 1): Разработка мультитаймфреймового индикатора
Вероятностный метод главных компонент на MQL5
Нейросети в трейдинге: Управление риском через распределение результатов (AC-SRM)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования