Задача: собрать из готовых модулей боевую архитектуру на 2026 год.
Я бы строил её вокруг regime-gated Mixture of Experts + прогноз распределения MAE/MFE + отдельный execution veto.
Линейный score можно оставить как диагностический baseline. Главный мозг должен понимать взаимодействия признаков и контекст. Для твоей задачи базовый production-движок я бы делал на GBDT (LightGBM/CatBoost) + ONNX, а нейросетевой анализ последовательности стакана добавлял отдельным экспертом только после накопления качественной L2-истории.
ТЗ: нелинейный торговый Brain для MQL5
1. Общая концепция
Система работает в два этапа:
Haos / внешний быстрый осциллятор
↓
создаёт TradeCandidate
↓
Brain
↓
определяет:
- состояние рынка;
- качество конкретного сигнала;
- наличие continuation / absorption / noise;
- ожидаемый MAE;
- ожидаемый MFE;
- вероятность быстрого follow-through;
- качество исполнения;
- разрешение сделки;
- допустимый SL;
- целевой TP.
Главный принцип:
Haos отвечает за момент возникновения идеи сделки.
Brain отвечает за вопрос, стоит ли эту конкретную идею торговать.
—
2. Архитектура Brain
HAOS TRIGGER
|
v
+----------------+
| TradeCandidate |
+----------------+
|
v
FEATURE SNAPSHOT
|
+--------------+--------------+
| | |
v v v
STRUCTURE VOLATILITY MOMENTUM
| | |
+--------------+--------------+
|
v
ORDER FLOW
|
v
EFFORT vs RESULT
|
v
REGIME GATE
|
+------------+------------+
| | |
v v v
CONTINUATION ABSORPTION NOISE
EXPERT EXPERT / SKIP
| |
+------+-----+
|
v
MAE/MFE MODELS
|
v
EXECUTION FILTER
|
v
DECISION POLICY
|
TRADE / WAIT / REJECT
—
3. Первый уровень: TradeCandidate
Brain запускается только после появления триггера Haos.
На каждом триггере создать объект:
struct TradeCandidate
{
ulong time_msc;
int direction; // +1 LONG, -1 SHORT
double entry_price;
double atr0;
int haos_signal_id;
};
Модель должна обучаться именно на событиях Haos.
Не следует обучать её на каждом баре рынка, поскольку задача Brain:
оценить качество уже возникшего торгового сигнала.
—
4. Нормализация направления
Большинство признаков привести к направлению предполагаемой сделки.
Для LONG:
direction = +1
Для SHORT:
direction = -1
Пример:
directional_delta = raw_delta * direction
directional_price_move =
(price_now - price_start) * direction
Тогда:
+ значение = подтверждает сделку
- значение = работает против сделки
Это позволяет основной модели понимать LONG и SHORT в общем пространстве признаков.
При обнаружении устойчивой статистической асимметрии LONG/SHORT оставить возможность использовать два отдельных Expert Model.
—
5. Ось №1. STRUCTURE
Использовать уже существующие модули KDE / Market Profile / S1-R1.
Минимальный набор:
distance_KDE_node
distance_HVN
distance_LVN
distance_S1
distance_R1
distance_next_support
distance_next_resistance
room_in_signal_direction
position_inside_value_area
position_relative_POC
level_strength
number_of_level_tests
distance_to_structure / ATR
Особенно важный признак:
STRUCTURAL_ROOM
Он показывает свободное пространство перед сигналом.
Пример:
Haos LONG
+ сильный импульс
+ positive delta
+ через 2 тика находится мощный R1
и
Haos LONG
+ тот же импульс
+ та же delta
+ ближайшее сопротивление через 1.3 ATR
должны восприниматься Brain как совершенно разные состояния.
—
6. Ось №2. VOLATILITY / ENERGY
Использовать:
Higuchi FD short
Higuchi FD medium
ATR short
ATR medium
ATR_short / ATR_long
ATR percentile
ATR compression
realized volatility
volatility acceleration
volatility of volatility
Очень полезный признак:
COMPRESSION_RELEASE
Он должен показывать переход:
compression -> expansion
Именно этот переход часто намного полезнее абсолютного ATR.
Higuchi FD желательно считать минимум на двух окнах.
Таким образом Brain сможет различать:
локальный тренд внутри общего шума
и
реальное изменение структуры движения.
—
7. Ось №3. MOMENTUM
Использовать Haos как часть контекста после возникновения самого триггера.
Признаки:
Haos amplitude
Haos slope
Haos acceleration
distance_from_zero
cross_strength
time_since_cross
spectral_slope
price_velocity
price_acceleration
impulse_duration
impulse_distance
momentum persistence
Особенно полезно хранить:
Haos[t]
Haos slope
Haos acceleration
Поскольку одинаковое значение Haos при ускорении и затухании имеет разный смысл.
—
8. Ось №4. EXECUTION / MICROSTRUCTURE
Основные признаки:
aggressive_buy_volume
aggressive_sell_volume
delta
delta_zscore
cumulative_delta
delta_acceleration
trade_intensity
OFI
bid_ask_imbalance_L1
bid_ask_imbalance_L3
bid_ask_imbalance_L5
microprice_distance
spread
spread_zscore
queue_depletion
queue_replenishment
sweep_volume
sweep_levels
large_trade_intensity
Считать признаки минимум на нескольких горизонтах.
Например:
250 ms
1 sec
3 sec
10 sec
Для более медленной торговли эти интервалы должны задаваться параметрами.
—
9. Effort vs Result
Это должен быть отдельный модуль Brain.
Effort
Пример:
Effort =
signed aggressive volume /
median aggressive volume
Дополнительно:
delta_zscore
trade_intensity_zscore
sweep_volume_zscore
Result
Result =
directional_price_displacement / ATR0
и дополнительный вариант:
ResultTicks =
directional_price_displacement / TickSize
—
10. Market Efficiency
Ввести:
EFFICIENCY =
Result / (abs(Effort) + epsilon)
Высокий Effort + высокий Result:
CONTINUATION
Высокий Effort + почти отсутствующий Result:
ABSORPTION
—
11. Absorption Engine
Абсорбция должна иметь отдельное состояние.
Признаки:
high aggressive volume
high delta
low price displacement
structural level nearby
replenishment
repeated executions
failure to progress
queue persistence
Состояния:
enum ENUM_FLOW_STATE
{
FLOW_NORMAL,
FLOW_CONTINUATION,
FLOW_ABSORPTION,
FLOW_EXHAUSTION,
FLOW_UNKNOWN
};
Критически важное правило:
ABSORPTION
не превращать в обычный отрицательный коэффициент score.
При подтверждённой абсорбции:
continuation model -> BLOCK
После этого событие можно передать:
ReversalExpert
При этом ReversalExpert должен иметь собственную статистически проверенную логику входа.
Автоматически переворачивать LONG в SHORT запрещено.
—
12. Regime Gate
Перед основной моделью должен работать классификатор режима.
Выход:
P_CONTINUATION
P_ABSORPTION
P_MEAN_REVERSION
P_NOISE
Например:
0.71 continuation
0.12 absorption
0.05 mean-reversion
0.12 noise
Использовать soft probabilities.
Это лучше жёсткого:
TREND = true
—
13. Рекомендуемая модель Regime Gate
Основной вариант:
LightGBM / CatBoost
Небольшая модель.
Примерно:
20-50 основных признаков
HMM / Markov Switching можно использовать как дополнительный индикатор режима.
Основным Brain я бы HMM не делал из-за:
- инерционности;
- чувствительности к предположениям распределения;
- нестабильности состояния около transitions.
Полезнее передать HMM-state как ещё один признак GBDT.
—
14. Mixture of Experts
После Regime Gate использовать отдельные модели.
Минимум:
ContinuationExpert
Absorption/ReversalExpert
Опционально:
BreakoutExpert
MeanReversionExpert
Каждый Expert видит один и тот же FeatureVector, однако обучается на своей рыночной среде.
Финальный прогноз:
P = Σ P(regime_i) * Expert_i(X)
Можно использовать и hard routing при очень высокой вероятности режима.
Например:
P_absorption > 0.80
↓
ContinuationExpert disabled
—
15. Главный Target
Бинарный:
WIN / LOSS
оставить только вспомогательной метрикой.
Основные targets должны быть другими.
Для каждого TradeCandidate записывать будущую траекторию цены за горизонт H.
—
16. MFE
MFE = maximum favorable excursion
Сохранять:
MFE_ticks
MFE_ATR
—
17. MAE
MAE = maximum adverse excursion
Сохранять:
MAE_ticks
MAE_ATR
Важно:
MAE/MFE сначала хранить в тиках и единицах ATR на момент сигнала.
Это устраняет зависимость обучающей выборки от заранее выбранного стопа.
—
18. First Passage Targets
Дополнительно создать классификационные targets.
Например:
P(MFE >= 0.5 ATR before MAE >= 0.25 ATR)
P(MFE >= 1 ATR before MAE >= 0.5 ATR)
P(MFE >= 1.5 ATR before MAE >= 0.5 ATR)
После выбора базового R:
P(+1R before -0.25R)
P(+1R before -0.5R)
P(+2R before -0.5R)
Это значительно информативнее общего WIN.
—
19. Ideal Entry Target
Отдельно создать:
INSTANT_FOLLOWTHROUGH
Например:
1,
если MFE >= 1R
раньше, чем MAE >= 0.25R
Именно эта модель будет находить твои:
зоны почти нулевого сопротивления.
—
20. Quantile Models MAE/MFE
Использовать Quantile Regression.
Создать отдельные модели:
MFE
MFE_Q20
MFE_Q50
MFE_Q80
MAE
MAE_Q50
MAE_Q80
MAE_Q90
Тогда Brain сможет сказать:
Expected MFE median = 1.6 ATR
80% MAE quantile = 0.28 ATR
90% MAE quantile = 0.42 ATR
Это намного полезнее:
вероятность WIN = 61%
—
21. Финальный ML stack
Production версия:
MODEL 1
RegimeClassifier
MODEL 2
ContinuationProbability
MODEL 3
ReversalProbability
MODEL 4
InstantFollowThrough
MODEL 5
MFE_Q20
MODEL 6
MFE_Q50
MODEL 7
MFE_Q80
MODEL 8
MAE_Q50
MODEL 9
MAE_Q80
MODEL 10
MAE_Q90
10 небольших GBDT работают достаточно быстро.
При необходимости часть моделей можно объединить.
—
22. Decision Engine
Вход разрешается только после выполнения нескольких условий.
Пример:
P_success >= P_MIN
MFE_Q20 >= MIN_MFE
MAE_Q80 <= MAX_MAE
MFE_Q50 / MAE_Q80 >= MIN_ASYMMETRY
ExecutionScore >= MIN_EXECUTION
DriftScore <= MAX_DRIFT
AbsorptionAgainstTrade == false
—
23. Asymmetry Score
Ввести:
ASYMMETRY =
MFE_Q50 /
(MAE_Q80 + epsilon)
Например:
MFE_Q50 = 1.7R
MAE_Q80 = 0.32R
Asymmetry = 5.31
Такой сигнал потенциально намного интереснее:
WinRate = 75%
MFE = 0.6R
MAE = 0.8R
—
24. Expected Utility
Дополнительно считать:
ExpectedUtility =
expected_reward
- expected_risk
- spread
- commission
- expected_slippage
- uncertainty_penalty
Все расходы привести к R.
Например:
EV_R = +0.31R
Trade разрешать при:
EV_R > EV_MIN
—
25. Dynamic Stop
После получения MAE:
SL =
MAE_Q80 + safety_buffer
с ограничениями:
SL_MIN <= SL <= SL_MAX
Можно сравнивать с ближайшей структурой.
Например:
SL_ML
SL_STRUCTURE
и использовать отдельный RiskPolicy.
—
26. Dynamic Target
Аналогично:
TP =
MFE_Q50
либо более консервативно:
MFE_Q20
в зависимости от режима.
Continuation может позволять:
TP = MFE_Q50-MFE_Q80
Mean Reversion использовать более консервативный выход.
—
27. Uncertainty
Brain должен уметь отвечать:
I DON'T KNOW
Нужен:
UncertaintyScore
Минимальный вариант:
- disagreement нескольких моделей;
- расстояние текущих признаков от training distribution;
- экстремальные значения признаков;
- недостаточная статистика текущего режима.
Если:
OOD = true
результат:
NO TRADE
—
28. Concept Drift
Рынок меняется.
Нужен DriftMonitor.
Отслеживать:
prediction calibration
MAE distribution
MFE distribution
feature distributions
win probability residual
execution/slippage
Рекомендуется CUSUM / change-point detector на residuals модели.
При сильном drift:
MODEL_DEGRADED
и повышение порога входа либо полная остановка Brain.
—
29. Feature interactions
GBDT сам умеет находить нелинейные взаимодействия.
При этом несколько экономически понятных interaction features стоит передавать непосредственно:
Delta × DistanceToLevel
Effort / Result
HaosStrength × StructuralRoom
Momentum × HiguchiFD
Compression × ImpulseStrength
OFI × StructuralRoom
AggressiveVolume × Replenishment
Не требуется создавать сотни произведений признаков.
—
30. Основной ML алгоритм
Для первой production-версии:
GBDT
Предпочтение:
LightGBM
или
CatBoost
Причины:
- идеально подходят для tabular features;
- хорошо ловят нелинейные взаимодействия;
- работают с разными масштабами;
- относительно устойчивы;
- быстро обучаются;
- быстро исполняются;
- легко проводить feature importance / SHAP;
- подходят для небольших и средних датасетов.
—
31. Deep Learning слой
Добавлять после накопления качественной L2 последовательности.
Отдельный:
MicrostructureSequenceExpert
Вход:
последние N snapshots стакана
+
последние N trades
Архитектура:
TCN / 1D CNN
или небольшой:
Temporal Transformer
Выход:
P_continuation
P_absorption
P_adverse_selection
Его результат передать основному GBDT/Stacking Engine.
Для первой production-версии Transformer не требуется.
—
32. Итоговый ensemble
Версия Brain 2:
Tabular GBDT
+
Microstructure Sequence Model
+
Regime Gate
|
v
Calibrator / Meta Model
Последний слой очень небольшой:
logistic regression
или
small GBDT
Он объединяет прогнозы экспертов.
—
33. Что не использовать как основной Brain
Не делать главным механизмом:
weighted score
Также на первом этапе не использовать:
reinforcement learning
large Transformer
LSTM на всём подряд
генетическую оптимизацию сотен коэффициентов
Иначе риск получить красивый backtest при слабом out-of-sample резко возрастает.
RL можно исследовать позднее для исполнения и управления позицией.
—
34. Сбор Dataset
Каждый Haos trigger = одна training event.
В момент t0 сохранить:
event_id
timestamp
symbol
direction
весь FeatureVector
market regime
spread
price
ATR0
model_version
feature_version
После истечения H вычислить:
MAE
MFE
time_to_MFE
time_to_MAE
first barrier reached
instant_followthrough
cost adjusted result
—
35. Multi-Horizon labels
Рекомендую минимум три горизонта:
H_FAST
H_MAIN
H_SLOW
Конкретные значения задаются параметрами стратегии.
Например:
5 sec
30 sec
120 sec
для очень быстрой торговли.
Для баровой системы можно использовать:
1 bar
3 bars
10 bars
Поскольку predictive power Order Flow сильно зависит от горизонта. Исследования микроструктуры также показывают horizon-dependent и regime-dependent поведение order-flow imbalance. (arXiv)
—
36. Train / Validation
Запрещён:
Random Train/Test Split
Использовать:
Walk Forward
Пример:
TRAIN
Jan-Apr
VALIDATION
May
TEST
June
затем:
TRAIN
Feb-May
VALIDATION
June
TEST
July
—
37. Purging
Haos signals часто пересекаются по времени.
Если:
Trade A label horizon
пересекается с:
Trade B
обычная cross validation создаёт leakage.
Поэтому реализовать:
Purged Walk Forward
+
Embargo
Размер embargo минимум соответствует максимальному label horizon.
—
38. Probability Calibration
После обучения:
P = 0.70
должно приблизительно означать:
около 70% подобных событий заканчиваются заданным исходом.
Использовать out-of-fold calibration:
Isotonic Regression
при большом числе наблюдений.
При меньшей выборке:
Platt Scaling
—
39. Метрики
Оптимизировать систему по набору:
Expected R / trade
Median MAE
MAE Q90
Median MFE
MFE Q20
MFE / MAE asymmetry
Profit Factor
Max Drawdown
Tail Loss
Calibration Error
Brier Score
trade frequency
cost sensitivity
WinRate использовать дополнительной статистикой.
—
40. Stress Testing
Обязательно проверять:
spread × 1.5
spread × 2
slippage +1 tick
slippage +2 ticks
entry delay
missing ticks
missing DOM updates
extreme volatility
opening/closing sessions
news spikes
Если edge исчезает от одного дополнительного тика slippage, модель считать непригодной для production.
—
41. MQL5 структура
Предлагаемая архитектура классов:
CTriggerEngine
CFeatureEngine
CStructureFeatures
CVolatilityFeatures
CMomentumFeatures
COrderFlowFeatures
CEffortResultEngine
CRegimeEngine
CBrainModel
CUncertaintyEngine
CDriftMonitor
CRiskPolicy
CExecutionFilter
CTradeEngine
CEventLogger
—
42. Event flow MQL5
OnTick()
Обновлять:
tick features
delta
trade intensity
velocity
Haos
При появлении Haos:
CreateTradeCandidate()
BuildFeatureVector()
EvaluateBrain()
—
OnBookEvent()
Только быстрые операции:
MarketBookGet()
update L2 buffer
update imbalance
update replenishment
update queue statistics
Тяжёлые расчёты внутри OnBookEvent() запрещены.
Причина особенно важна для MT5: BookEvent может идти очень быстро, а MarketBookGet() возвращает актуальное состояние на момент вызова. Платформа прямо предупреждает, что получить гарантированно все уникальные состояния стакана невозможно. (MQL5)
—
43. Ring Buffer
Для ticks:
TickRingBuffer
Для стакана:
BookRingBuffer
С временными метками:
time_msc
Все microstructure features вычислять относительно этих буферов.
—
44. DOM Recorder
Создать отдельный режим:
MODE_RECORD
Он записывает:
timestamp_msc
Bid/Ask
Last
top N DOM levels
volumes
tick trades
flags
spread
Рекомендуемая глубина:
TOP 10
или
TOP 20
уровней.
—
45. Причина собственного DOM Recorder
MetaTrader хранит историю тиков, включая возможность CopyTicksRange(), однако исторический Depth of Market терминал не хранит. DOM доступен онлайн и отсутствует в обычном Strategy Tester. (MQL5)
Следовательно, для честного backtest:
собственный DOM recorder
↓
binary files
↓
Replay Engine
↓
Strategy Tester
—
46. DOM Replay Engine
Реализовать класс:
CDOMReplay
который читает сохранённые snapshots по:
time_msc
В tester:
LiveMarketBook
заменяется:
RecordedMarketBook
FeatureEngine при этом должен использовать один интерфейс.
То есть:
IDataFeed
|
+ LiveFeed
|
+ ReplayFeed
Все формулы признаков должны быть абсолютно одинаковыми live/replay.
—
47. Режимы деградации
Предусмотреть:
FULL_L2
TICK_ONLY
PRICE_ONLY
Для каждого режима использовать подходящую модель.
Если DOM отсутствует, нельзя просто передавать:
imbalance = 0
поскольку ноль является реальным значением признака.
Следует переключить модель:
Brain_FULL_L2.onnx
Brain_TICK.onnx
Brain_PRICE.onnx
либо передавать полноценную missingness mask.
—
48. Python Training Pipeline
MQL5:
сбор данных
+
live inference
Python:
dataset preparation
feature diagnostics
training
walk-forward
calibration
SHAP
model comparison
stress testing
ONNX export
Схема:
MQL5 Recorder
↓
Raw Dataset
↓
Python
↓
Event Dataset
↓
Walk Forward
↓
GBDT Models
↓
Calibration
↓
ONNX
↓
MQL5
MQL5 официально позволяет обучать модель во внешней среде, экспортировать её в ONNX и выполнять модель непосредственно в терминале. (MQL5)
—
49. Online inference
В EA:
BrainResult result = brain.Evaluate(features);
Результат:
struct BrainResult
{
double p_continuation;
double p_reversal;
double p_followthrough;
double mfe_q20;
double mfe_q50;
double mfe_q80;
double mae_q50;
double mae_q80;
double mae_q90;
double asymmetry;
double uncertainty;
double drift_score;
int regime;
bool absorption;
bool allow_trade;
int reject_reason;
};
—
50. Reject Reason
Каждое отклонение сделки обязательно логировать.
Например:
101 LOW_PROBABILITY
102 HIGH_MAE
103 LOW_MFE
104 LOW_ASYMMETRY
201 ABSORPTION
202 STRUCTURAL_BLOCK
301 BAD_SPREAD
302 BAD_LIQUIDITY
401 MODEL_UNCERTAINTY
402 OUT_OF_DISTRIBUTION
403 MODEL_DRIFT
Это критически важно для последующего исследования Brain.
—
51. Logging
Логировать абсолютно каждый Haos signal:
TAKEN
и:
REJECTED
Для rejected сигналов всё равно посчитать будущие:
MFE
MAE
Иначе через несколько месяцев возникнет selection bias и невозможно будет понять, правильно ли Brain блокировал сделки.
—
52. Model Versioning
Каждая модель должна иметь:
MODEL_VERSION
FEATURE_VERSION
TRAIN_FROM
TRAIN_TO
MODEL_HASH
В trade log записывать версию модели.
—
53. Feature parity test
Обязательный unit test.
Для одного и того же market snapshot:
Python features
и
MQL5 features
должны совпадать.
Допустимая погрешность задаётся для каждого типа признака.
Если feature parity нарушена, live-модель использовать запрещено.
—
54. Lookahead protection
Все признаки вычисляются строго из данных:
time <= t0
Labels:
time > t0
В коде разделить:
FeatureBuilder
и
LabelBuilder
LabelBuilder никогда не используется в live EA.
—
55. Acceptance Criteria
Первая версия считается готовой, когда выполнены:
- Haos создаёт TradeCandidate.
- FeatureVector фиксируется строго в
t0.
- Все четыре оси признаков работают.
- Effort vs Result работает.
- Absorption может жёстко блокировать continuation.
- RegimeGate выдаёт вероятности режимов.
- GBDT прогнозирует качество кандидата.
- MAE/MFE quantile models работают.
- DecisionEngine использует asymmetry.
- В расчёт включены spread/slippage/commission.
- Все принятые и отклонённые сигналы логируются.
- Есть полноценный walk-forward.
- Есть purging/embargo.
- Есть probability calibration.
- Есть stress test.
- Есть OOD/uncertainty control.
- Есть model versioning.
- ONNX работает внутри MT5.
- Python/MQL5 feature parity подтверждена.
- При ошибке Brain EA переходит в
NO_TRADE.
—
56. Порядок разработки
PHASE 1
Создать единый:
FeatureVector
и Event Logger.
—
PHASE 2
Создать Dataset Builder:
Haos event
+
features at t0
+
future MAE/MFE
—
PHASE 3
Обучить первый:
GBDT Meta Model
без DOM sequence network.
—
PHASE 4
Добавить:
Regime Gate
+
Continuation Expert
+
Absorption Expert
—
PHASE 5
Добавить:
MAE/MFE Quantile Models
—
PHASE 6
Перевести DecisionEngine с:
Score
на:
Probability
+
MAE
+
MFE
+
Asymmetry
+
Execution
+
Uncertainty
—
PHASE 7
Создать:
DOM Recorder
+
DOM Replay
—
PHASE 8
Провести полноценный:
Walk Forward
+
Stress Test
+
Ablation Test
—
PHASE 9
Если L2 history показывает дополнительный edge, создать:
MicrostructureSequenceExpert
на TCN/1D-CNN или небольшом Temporal Transformer.
—
57. Ablation Test
Очень важный этап.
Последовательно проверить:
Haos only
Haos + Structure
+ Volatility
+ Momentum
+ Order Flow
+ Effort/Result
+ Regime Gate
+ MAE/MFE
+ Sequence Expert
Для каждого этапа сравнить:
EV
Drawdown
MAE
MFE
Asymmetry
Trade count
stability across periods
Так станет понятно, какой модуль реально приносит edge.
—
58. Финальная production-архитектура
Я бы стремился к следующей системе:
HAOS
|
v
TradeCandidate
|
v
40-70 quality features
|
v
Effort vs Result
|
v
Regime Gate
|
+-----------+-----------+
| |
v v
Continuation Expert Reversal Expert
| |
+-----------+-----------+
|
v
MAE/MFE Models
|
v
Uncertainty / Drift
|
v
Execution Veto
|
v
ASYMMETRY
|
v
DECISION
Именно эту архитектуру рекомендую считать Brain 1.0 production.
После накопления качественной L2 истории:
Brain 2.0 =
Brain 1.0
+
Microstructure Sequence Expert
Что здесь самое важное
Я бы не пытался сразу кормить одной огромной модели все 150-300 индикаторов, даже если они у тебя уже написаны. Сначала 40-70 хороших признаков, распределённых по твоим четырём осям. Затем ablation покажет, что действительно добавляет информацию.
И я бы сделал центральной целью модели вот эту величину:
[
P(MFE \ge T; before; MAE \ge S \mid X)
]
плюс:
[
Q_{20/50/80}(MFE),\qquad Q_{50/80/90}(MAE)
]
То есть мозг отвечает не «сделка хорошая на 73 балла», а примерно так:
Continuation 81%
MFE median = 1.84R
MFE Q20 = 1.12R
MAE Q80 = 0.31R
MAE Q90 = 0.47R
Asymmetry = 5.9
Absorption = 6%
Execution = OK
Trade = ALLOW
Вот это уже действительно качественно другой класс фильтра.
Ещё один момент по footprint/L2: MT5 позволяет подписываться на стакан через MarketBookAdd() и получать его через MarketBookGet(), но DOM доступен только для инструментов/брокеров, которые его реально поставляют. Причём MQL5 предупреждает, что при очень быстрых обновлениях OnBookEvent не гарантирует получение каждого уникального состояния книги. Поэтому recorder надо делать максимально лёгким. (MQL5)
И мой выбор алгоритмов для первой боевой версии: Haos trigger → GBDT Regime Gate → GBDT Experts → Quantile GBDT MAE/MFE → calibrated decision → execution veto. ONNX позволяет всё это исполнять непосредственно в MT5, без Python в боевом контуре. (MQL5)
А стандартный conformal prediction я пока не делал бы главным фильтром неопределённости: свежий обзор 2026 года отдельно подчёркивает проблему временной зависимости и нарушения exchangeability для time series. Его можно добавить позже в адаптированном online-варианте. (arXiv)
Следующим шагом я бы уже спроектировал конкретный FeatureVector v1 примерно из 50 признаков, прямо по именам переменных для MQL5, с формулами каждого признака и указанием, какие 15-20 из них считать ядром Brain, а какие оставить вторым эшелоном. Это как раз превратит архитектуру выше в непосредственное задание программисту.