preview
Сеточный советник на клеточном автомате с онлайн-обучением в MQL5

Сеточный советник на клеточном автомате с онлайн-обучением в MQL5

MetaTrader 5Эксперты |
168 2
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Введение

Трейдер, впервые применяющий нейросеть в алготрейдинге, сталкивается с типичной проблемой: сеть обучена, бэктест выглядит хорошо, но на реальном счёте через три недели кривая equity начинает снижаться. Это типичная картина: модель обучена на прошлом и содержит фиксированные веса, которые не знают о новом рыночном режиме. Периодическое переобучение частично помогает, но требует остановки торговли, инфраструктуры и оставляет «мертвые окна», когда адаптации нет.

Целевая аудитория этой статьи — практикующие разработчики MQL5‑советников и алготрейдеры, которым нужно работающее решение «из коробки», а не теоретическая лекция. Конкретные симптомы деградации, на которые стоит ориентироваться: падение Hit Rate ниже 50% (при N>200 прогнозов), Network Health < 40% (доля прибыльных клеток), систематический bias в L/S > 70/30, и низкие PrecisionUP/PrecisionDown у верификатора BPC (50). Если эти метрики ухудшаются — это не «шумы» тестера, а сигнал того, что фиксированные веса теряют актуальность.

Решение, предложенное в статье, — не очередной MLP с таймером переобучения, а архитектура с непрерывной онлайновой адаптацией: 10 000 параметров представлены в виде клеточного автомата (каждый параметр — агент), который обновляет состояния на каждом баре по набору признаков, соседних влияний и правил эволюции; параллельно работает независимый бинарный предиктор (горизонт верификации 10 баров). Будет показано, какие метрики и пороги считать «здоровьем» системы и как диагностировать деградацию, чтобы принять действия без остановки торговли.

В статье последовательно рассматривается:

  • проблема фиксированных весов и критерии деградации
  • архитектура онлайн‑адаптации (CA: клетки, признаки, стратегии, правила)
  • независимая верификация и комбинирование сигналов (BPC)
  • интеграция с сеточным советником и параметры торговли
  • практическая диагностика и пороги принятия решений.


Почему фиксированные веса — системная проблема

Классическая нейросеть обучается один раз на исторических данных. Это принципиальное ограничение: модель описывает рынок, который был, а не тот, который есть. Рынок меняет режим — переходит от тренда к волатильному боковику, от низкой к высокой волатильности — а модель продолжает искать паттерны, которые перестали существовать.

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

Стандартное решение — периодическое переобучение. Советник останавливается, данные докачиваются, модель переобучается, советник перезапускается. Это либо ручная работа, либо сложная инфраструктура. И главное: между переобучениями модель всё равно мертва.

Решение, описанное в этой статье, иное: параметры модели непрерывно адаптируются к рынку прямо во время торговли. Инструмент — клеточный автомат.


Что такое клеточный автомат и почему он подходит для этой задачи

Клеточный автомат (КА) — дискретная динамическая система. Пространство разбито на ячейки, каждая в каждый момент времени находится в некотором состоянии. Следующее состояние клетки определяется её текущим состоянием и состоянием соседей по заданному правилу. Классические примеры — «Жизнь» Конвея и элементарные CA Вольфрама.

В архитектуре CCellularNeuralNet10K каждая клетка — вещественное число в диапазоне [-1, +1]: торговое мнение агента. +1 означает «сильный лонг», -1 — «сильный шорт», 0 — нейтральность. Это значение одновременно является живым параметром модели — аналогом веса нейрона, но обновляющимся без остановки торговли.

Ключевые константы архитектуры:

#define CNN_GRID_W     100   // ширина сетки
#define CNN_GRID_H     100   // высота сетки
#define CNN_CELLS      10000 // 10 000 клеток-параметров
#define CNN_FEATURES   50    // признаков на вход
#define CNN_STRATEGIES 10    // стратегий-архетипов
#define CNN_CA_TICKS   6     // шагов автомата за предсказание
#define CNN_NEIGHBORS  8     // Moore neighbourhood

Сетка 100×100 расположена на тороидальной плоскости: правый край соединён с левым, нижний — с верхним. Тороидальная топология устраняет граничные эффекты: в прямоугольной сетке угловые клетки имеют только 3 соседей вместо 8, создавая системную асимметрию. На торе у каждой клетки ровно 8 соседей.

Индексы соседей предвычисляются при инициализации и сохраняются в массиве m_nb[CNN_CELLS × 8]; это критично для производительности. За один прогноз: 10 000 клеток × 6 шагов × 8 соседей = 480 000 обращений к памяти. Предвычисление заменяет арифметику по модулю на прямое чтение:

int nx = (x + dx + CNN_GRID_W) % CNN_GRID_W;
int ny = (y + dy + CNN_GRID_H) % CNN_GRID_H;
m_nb[i * CNN_NEIGHBORS + k] = ny * CNN_GRID_W + nx;


50 рыночных признаков: как рынок входит в сеть

Метод ExtractFeatures() вычисляет 50 нормализованных признаков из последних 200 баров. Все признаки нормализуются через MathTanh() в диапазон [-1, +1] — тот же диапазон, что и состояния клеток. Для ускорения строятся кумулятивные суммы доходностей и True Range, что позволяет вычислить любое оконное среднее за O(1).

Группа Индексы Содержание
Импульс feat[0..4] Нормированный моментум за 5, 10, 20, 50, 100 баров
Сила тренда feat[5..9] DI+/DI− отношение (аналог ADX) за 5, 10, 14, 20, 50 баров
Волатильность feat[10..14] Нормированный ATR за 5, 10, 14, 20, 50 баров
RSI feat[15..17] Перекупленность/перепроданность (7, 14, 21)
MACD feat[18..20] Три настройки: (8,17), (12,26), (5,13)
Боллинджер feat[21..23] Позиция цены в полосах (10, 20, 50)
Объём feat[24..26] Отношение текущего тикового объёма к среднему
Автокорреляция feat[27..29] Серийная корреляция доходностей, лаги 1, 2, 5
Mean Reversion feat[30..32] Отклонение от SMA 20, 50, 100
Уровень цены feat[33..35] Позиция цены в диапазоне за 20, 50, 100 баров
Хёрст feat[36..37] Показатель Хёрста за 30 и 100 баров
Свечной анализ feat[38..41] Тело/тени свечи, гэп открытия
Ускорение feat[42..44] Производная импульса, изменение волатильности
Кросс-признаки feat[45..47] Импульс×Объём, Тренд/Волатильность, RSI×Боллинджер
Время feat[48..49] sin и cos часа (циклическое кодирование)

Показатель Хёрста (feat[36..37]) описывает долгосрочную память временного ряда: H > 0.5 соответствует трендовому рынку, H < 0.5 — возвратному, H ≈ 0.5 — случайному блужданию. Вычисление выполняется методом нормированного размаха (R/S analysis):

double hurst = MathLog(range_rs / std_rs) / MathLog((double)w); // нормировка: +1 = тренд, -1 = возврат к среднему
feat[36 + p] = (hurst - 0.5) * 2.0;

Если feat[36] близко к +1 — трендовые стратегии клеток получают усиление через правило R12. Если к -1 — mean-reversion стратегии берут инициативу. Переключение между режимами происходит автоматически.

Циклическое кодирование времени (feat[48..49]) — синус и косинус часа:

double hour_norm = dt.hour / 24.0 * 2.0 * M_PI;
feat[48] = MathSin(hour_norm);
feat[49] = MathCos(hour_norm);

Синус и косинус гарантируют, что 23:00 и 01:00 «близки» в пространстве признаков (расстояние ≈ 0.26), хотя числа 23 и 1 далеки. Линейное кодирование часа создало бы искусственный разрыв на границе суток.


10 стратегий-архетипов: гены клеток

Каждая клетка приписана к одной из 10 стратегий — это её «ген». При инициализации распределение равномерное: 1000 клеток на стратегию. Инициализация обеспечивает полное покрытие пространства признаков:

m_strategy[i] = i % CNN_STRATEGIES;
m_feat_idx[i] = (i / CNN_STRATEGIES) % CNN_FEATURES; // 10 × 50 = 500 пар, по 20 клеток в каждой

Сигнал стратегии — взвешенная комбинация признаков, специфичная для её рыночной гипотезы:

case CNN_TREND_SHORT:
   //--- краткосрочный тренд: импульс + сила тренда + волатильность
   return 0.5 * feat[0] + 0.3 * feat[5] + 0.2 * feat[10];

case CNN_REVERSAL:
   //--- разворот: RSI + Боллинджер + mean-reversion
   return -0.4 * feat[16] - 0.4 * feat[22] + 0.2 * feat[30];

case CNN_MEAN_REV:
   //--- возврат к среднему: SMA50 + RSI14 + Хёрст
   return -0.5 * feat[31] - 0.3 * feat[17] + 0.2 * feat[37];

case CNN_CONSENSUS:
   //--- консенсус: 70% среднее соседей + 30% собственный сигнал
   return nb_mean * 0.7 + feat[0] * 0.3;

Стратегия CNN_CONSENSUS — особый случай: эти клетки голосуют вместе с соседями. Они усиливают консенсус, но не формируют его. Это встроенная инерция сети.

Важно: стратегия не является постоянным атрибутом клетки. По правилу R7 после трёх убыточных прогнозов подряд клетка меняет стратегию. Распределение стратегий в сети непрерывно адаптируется к текущему рыночному режиму.


12 правил эволюции клеток

На каждом из 6 шагов CA каждая клетка вычисляет новое состояние. Базовый сигнал — 50% от основного признака, 30% от стратегии, 20% от средней соседей:

double primary   = feat[m_feat_idx[i]] * 0.5;
double strat_sig = GetStrategySignal(m_strategy[i], feat, nb_mean) * 0.3;
double nb_signal = nb_mean * 0.2;
double new_state = primary + strat_sig + nb_signal;

Затем применяются правила эволюции, модифицирующие базовый сигнал. Ниже — ключевые из них.

R1–R2: PnL как усилитель сигнала. Прибыльные клетки «говорят громче» — аналог механизма внимания:

if(pnl_i > 0)
   new_state *= 1.0 + 0.2 * MathMin(pnl_i, 1.0);
else
   new_state *= MathMax(0.4, 1.0 + 0.3 * pnl_i);

R3: Социальный консенсус соседей. При согласии 5 из 8 соседей клетка мягко выравнивается с большинством:

if(nb_agree >= 5.0 / 8.0)
  {
   new_state = new_state * (1.0 - nb_agree * 0.4) +
               msign * MathAbs(new_state) * nb_agree * 0.4;
  }

R5: Высокая волатильность снижает уверенность. На хаотичном рынке сигналы приглушаются — советник не входит при неопределённости:

if(feat[12] > 0.3)
   new_state *= MathMax(0.4, 1.0 - feat[12] * 0.4);

R6: Подтверждённый тренд усиливается. Когда краткосрочный и среднесрочный тренды согласны — клетки получают дополнительный импульс:

if(feat[7] * feat[2] > 0.05)
  {
   double boost = MathMin(0.3, MathAbs(feat[7]) * 0.4);
   new_state += sign(feat[7]) * boost;
  }

R7: Смена стратегии при серии убытков. Три убытка подряд — клетка переходит на соседнюю стратегию:

if(m_losses[i] >= 3)
  {
   m_strategy[i] = (m_strategy[i] + 1 + MathRand() % 3) % CNN_STRATEGIES;
   m_losses[i] = 0;
  }

R8: Глобальный консенсус схлопывает сеть. При согласии 70%+ клеток в одном направлении сеть начинает усиливать этот консенсус:

if(MathAbs(consensus) > 0.7)
  {
   double csign = (consensus > 0) ? 1.0 : -1.0;
   new_state = 0.6 * new_state + 0.4 * csign * MathAbs(new_state);
  }

R12: Фрактальная инерция на трендовом рынке. На трендовом рынке клетка «помнит» предыдущее мнение:

if(feat[36] > 0.2)
   new_state = 0.7 * new_state + 0.3 * m_state[i]; // 30% веса прошлому состоянию

В сочетании с OptimizeParameters() — который пересаживает слабые клетки (capital < 0.15) на случайные стратегии — сеть непрерывно исследует пространство возможностей и не застревает в локальных минимумах.


Взвешенное голосование и автокоррекция смещения

После 6 шагов CA итоговый прогноз — взвешенное среднее 10 000 клеток. Вес клетки зависит от её накопленного авторитета:

double WeightedVote()
  {
   double wsum = 0.0, wtotal = 0.0;

   for(int i = 0; i < CNN_CELLS; i++)
     {
      double w = m_capital[i] * (1.0 + MathMax(0.0, m_pnl[i]) * 0.005);
      wsum   += m_state[i] * w;
      wtotal += w;
     }

   double vote = wsum / wtotal + m_bias;
   return MathTanh(vote * 2.0);
  }

Клетки при capital → 0.05 (нижняя граница) почти не влияют на итог. Клетки с высоким накопленным PnL имеют вес, пропорционально превышающий базовый.

Автокоррекция систематического смещения срабатывает при дисбалансе лонгов/шортов за последние 200 и более прогнозов:

if(total_sig > 200)
   m_bias = 0.15 * (double)(m_short_cnt - m_long_cnt) / total_sig;

Это защита от систематической предвзятости, которая возникает на трендовых рынках с преобладанием одного направления.


Бинарный предиктор: второй независимый горизонт

CBinaryPredictor10K решает задачу, принципиально отличную от основного CA: не «куда движется рынок прямо сейчас», а «будет ли цена выше или ниже через 10 баров». Это горизонт сеточного советника. Если BPC говорит «через 10 баров выше» — открывать BUY-сетку разумнее, чем опираться только на текущий импульс.

Ключевой механизм — кольцевой буфер верификации. Каждый бар OnNewBar() делает два действия одновременно:

//--- Верификация прогноза, сделанного BPC_HORIZON баров назад
int    verify_idx = m_ring_idx;
double curPrice   = r[0].close;
double predPrice  = m_ring[verify_idx].price;

//--- Запись нового прогноза в тот же слот кольцевого буфера
m_ring[m_ring_idx] = {direction=dir, price=curClose, confidence=conf, valid=true};
m_ring_idx = (m_ring_idx + 1) % BPC_HORIZON; // один индекс обслуживает проверку прошлого и запись нового прогноза

BPC ведёт полную матрицу ошибок (confusion matrix) с раздельной точностью по направлениям:

double GetPrecisionUp()
  {
   int tp_fp = m_true_pos + m_false_pos;
   return (tp_fp > 0) ? (double)m_true_pos / tp_fp : 0;
  }
double GetPrecisionDown()
  {
   int tn_fn = m_true_neg + m_false_neg;
   return (tn_fn > 0) ? (double)m_true_neg / tn_fn : 0;
  }

Если PrecisionUP = 65%, а PrecisionDown = 48% — система статистически значима только в сторону лонгов. Советник учитывает это при комбинировании сигналов.


Комбинирование сигналов двух движков

На каждом новом баре советник объединяет CA и BPC:

double vote   = g_ca.PredictNextMove(_Symbol); // текущий импульс
int    bpcDir = g_bpc.GetLastDirection();      // направление BPC
double bpcAcc = g_bpc.GetAccuracy();

//--- Комбинирование сигналов двух независимых движков
if(bpcAcc > 0.55)
  {
   int caDir = (vote > 0) ? 1 : -1;

   if(bpcDir == caDir)
      effConf *= 1.0 + (bpcAcc - 0.5) * 2.0;               // усиление уверенности при совпадении сигналов
   else
      effConf *= MathMax(0.3, 1.0 - (bpcAcc - 0.5) * 2.0); // снижение уверенности при противоречии сигналов
  }

Два независимых движка с разными горизонтами голосуют за направление. Согласие повышает уверенность, противоречие — подавляет. Это встроенная кросс-валидация в реальном времени.


Трёхуровневое онлайн-обучение

Система обучается на трёх временных горизонтах одновременно.

Побарно. После каждого нового бара сравнивается прошлый прогноз CA с реальным движением. Обновляется PnL и авторитет всех 10 000 клеток:

void UpdateStats(int hour, bool correct, double prediction, double actual_move)
  {
   for(int i = 0; i < CNN_CELLS; i++)
      UpdateCellPnL(i, m_state[i], actual_move); // обновление результата клетки по фактическому движению
  }

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

//--- Реакция генома на убыточный торговый цикл
if(avgProfit < 0)
  {
   g_genome[s].sl_factor   *= 1.05;
   g_genome[s].risk_factor *= 0.92;
   g_genome[s].grid_step   *= 1.05;
  }

//--- Реакция генома на нестабильную серию результатов
if(stability < 0.3)
  {
   g_genome[s].risk_factor *= 0.88;
   g_genome[s].lot_mult    *= 0.97;
   g_genome[s].max_levels  -= 1;
  }

Каждые 15 прогнозов. Клетки с capital < 0.15 реструктурируются: получают случайные стратегию и признак, capital восстанавливается до 0.25. Это эволюционный отбор — слабые конфигурации вытесняются мутациями.


Эволюция параметров советника

Советник поддерживает 5 геномов торговых параметров — от агрессивного до консервативного. Каждые 5 торговых циклов геномы мутируют на основе истории результатов:

//--- Мутация параметров после убыточного торгового цикла
if(avgProfit < 0)
  {
   g_genome[s].sl_factor   *= 1.05;
   g_genome[s].risk_factor *= 0.92;
   g_genome[s].grid_step   *= 1.05;
  }

//--- Снижение агрессивности при нестабильной серии результатов
if(stability < 0.3)
  {
   g_genome[s].risk_factor *= 0.88;
   g_genome[s].lot_mult    *= 0.97;
   g_genome[s].max_levels  -= 1;
  }

Все параметры советника вычисляются из ATR и геномов. Единственный входной параметр — Magic Number.


Интеграция с простым и лёгким сеточным советником

Метод ComputeGridParams() переводит голос CA в конкретные торговые инструкции:

struct CAGridDecision
  {
   double raw_vote;       // сырой прогноз [-1..+1]
   int    direction;      // +1 лонг, -1 шорт, 0 нейтрально
   double confidence;     // уверенность = |vote|
   int    grid_step;      // динамический шаг сетки в пунктах
   double lot_multiplier; // коэффициент роста лота
   bool   reverse_signal; // сигнал разворота всей сетки
   bool   close_signal;   // сигнал принудительного закрытия
   string reason;         // текстовый лог для диагностики
  };

Динамический шаг сетки масштабируется по волатильности. На спокойном рынке шаг сжимается до 0.5× базового, на волатильном расширяется до 3×:

//--- Масштабирование шага сетки по текущей волатильности
stepScale = 1.0 + (feat[12] + 1.0) * 0.5;

//--- Ограничение шага сетки в безопасном диапазоне
stepScale = MathMax(0.5, MathMin(3.0, stepScale));
decision.grid_step = (int)MathRound(baseGridStep * stepScale);

Сигнал разворота срабатывает, если позиция противоречит уверенному прогнозу CA (confidence ≥ 0.25):

if((isLong && caShort) || (!isLong && caLong))
   decision.reverse_signal = true;

Сигнал закрытия срабатывает на глубоком уровне сетки при потере уверенности — сеть признаёт ошибку до последнего уровня:

if(currentLevel >= maxLevels / 2 && decision.confidence < 0.03)
   decision.close_signal = true;


Скелет советника

#include <Cellular10K\CellularNeuralNet10K.mqh>
#include <Cellular10K\CellularBinaryPredictor10K.mqh>

input int InpMagicNumber = 777777; // единственный входной параметр советника

CCellularNeuralNet10K *g_ca  = NULL;
CBinaryPredictor10K   *g_bpc = NULL;

int OnInit()
  {
   g_ca  = new CCellularNeuralNet10K();
   g_bpc = new CBinaryPredictor10K();

   g_ca.Initialize();
   g_bpc.Initialize();

   CalibrateGenomes();
   return INIT_SUCCEEDED;
  }

void OnTick()
  {
   SyncGridState();
   TrackDrawdown();
   CheckStopLoss();

   //--- Управление уже открытой сеткой
   if(g_direction != 0)
     {
      CheckTakeProfit();
      CheckMaxHold();
      ManageGrid();
     }

   if(IsNewBar())
      HandleNewBar();

   ShowStatus();
  }

void HandleNewBar()
  {
   VerifyPrediction();

   //--- Верификация прошлого прогноза BPC и запись нового прогноза
   g_bpc.OnNewBar(_Symbol);

   //--- Пересчёт активного генома по истории торговых циклов
   ComputeOptimalParams();

   double vote    = g_ca.PredictNextMove(_Symbol);
   double effConf = CombineSignals(vote, g_bpc);

   //--- Проверка условий для нового входа
   if(g_direction != 0)
      return;
   if(effConf < g_cur.min_conf)
      return;

   int dir = (vote > 0) ? 1 : -1;
   OpenPosition(dir, 0);
  }


Показатели здоровья сети

Что смотреть

PrintDetailedStats() выводит состояние сети в лог. Пример реального вывода после 4800+ прогнозов:

Показатель Значение
Total Predictions 4821
Hit Rate 58.34%
Best Hit Rate 63.12%
Network Health 67.3% (6730/10000 прибыльных клеток)
Top Cell #1 Cell[23,45] TREND_M F:7 Cap:0.987 PnL:0.00412
Top Cell #2 Cell[71,12] MOMENTUM F:1 Cap:0.972 PnL:0.00389
TREND_S 1023 клетки, PnL: +0.4821
REVERSAL 987 клеток, PnL: −0.1203
BPC 10bar UP точность 61.2% (47 верификаций), P+63%, P−59%
Как интерпретировать метрики
Показатель Норма Тревога Интерпретация
Network Health > 60% < 40% Доля прибыльных клеток. < 40% — рынок сломал текущую конфигурацию
Hit Rate (>200 прогнозов) > 55% < 50% Значимое преимущество присутствует. < 50% — проверить direction логику
CONSENSUS-доля < 20% > 20% Сеть «сдалась» и повторяет сама себя
BPC Precision+ / Precision- > 58% < 52% Статистически значимы при N > 50 верификаций
Signal Balance L/S 40/60–60/40 > 70/30 Систематическое смещение; bias correction помогает частично

Network Health — основной индикатор адаптации. Постепенное снижение с 67% до 50% — нормально при смене рыночного режима, автоматическая реструктуризация должна восстановить значение в течение 50–100 баров. Резкое падение ниже 40% за 10–15 баров — признак аномального движения рынка (новостной шок, разрыв).

Strategy Distribution после адаптации показывает, какой режим доминирует. На трендовом рынке доля TREND_S/TREND_M/TREND_L растёт, REVERSAL и MEAN_REV падают. Это нормально и ожидаемо — именно для этого существует правило R7.


Сравнение с фиксированными архитектурами

Приведённые цифры — ориентировочные значения, наблюдаемые в тестовом прогоне на EURUSD H1. Конкретные результаты зависят от периода, инструмента и рыночного режима.

Архитектура Hit Rate (EURUSD H1) Адаптация к смене режима
MLP с фиксированными весами ~51% Нет (требует переобучения)
MLP с еженедельным переобучением ~53% Частичная
Только BPC (горизонт 10 баров) ~54% Частичная
CA 10K без BPC ~56% Непрерывная
CA 10K + BPC (полная архитектура) ~58% Непрерывная + кросс-верификация

Ключевое отличие заключается не в абсолютной точности, а в поведении системы при смене рыночного режима. MLP с фиксированными весами деградирует постепенно и незаметно. CA-архитектура видна «изнутри»: Network Health и Strategy Distribution показывают адаптацию в реальном времени.

Бэктест системы на участке 2017-2026 годы в режиме моделирования OHLC на таймфрейме H1 (EURUSD) показывает устойчивость системы, но не идеальность результатов:

Метрики: коэффициент Шарпа и профит-фактор также весьма слабоваты:


Что получает трейдер

Трейдер столкнулся с проблемой: нейросеть с фиксированными весами деградирует на живом рынке через несколько недель. Решение не в более частом переобучении и не в более глубокой сети, а в другой концепции параметра. В этой архитектуре каждый из 10 000 параметров — агент, который конкурирует, эволюционирует и отключается прямо во время торговли. Бинарный предиктор независимо верифицирует прогнозы каждые 10 баров. Пять геномов торговых параметров изменяются (мутируют) на основе истории циклов.

Три файла MQL5, ноль внешних зависимостей, один входной параметр.

Критерии успеха и практические шаги запуска:

  • Рекомендуемый старт: EURUSD H1, Magic Number по умолчанию.
  • Мониторинг в первые 200–300 прогнозов: Hit Rate должен стремиться к >55% (значимо при N>200), Network Health ≳ 60% — считается нормой; BPC PrecisionUP/PrecisionDown >58% при N>50 — статистически значимо. Если после 300 прогнозов Hit Rate ≤ 52% — проверьте Network Health, баланс L/S и min_conf в логах.
  • Осторожность: CONSENSUS‑доля >20% или L/S >70/30 — сигнал систематического смещения; активируйте диагностику и проанализируйте dominant strategies/feature distribution.

Теперь, вместо редкого «переобучения» и мёртвых весов система обновляет параметры на каждом баре (правила R1–R12 реагируют на PnL, волатильность, Hurst и согласие соседей), слабые клетки пересаживаются, геномы торговых параметров мутируют, а BPC ограничивает ложные входы по горизонту. Это устраняет «мертвые окна» и даёт измеримые индикаторы адаптации (Network Health, Strategy Distribution, BPC precision), по которым можно судить, решена ли исходная проблема деградации.

Короткая памятка действий при ухудшении показателей:

  • Hit Rate падает, Network Health <40%: дождаться 50–100 баров реструктуризации; если не помогает — уменьшить min_conf и/или проанализировать распределение стратегий.
  • BPC теряет точность: проверить N верификаций, восстановить калибровку или временно снижать влияние BPC при комбинировании сигналов.
  • Сильный bias L/S: включить bias‑correction и проанализировать причину (новостной шок, смена волатильности, сбой признаков).

В результате мы получаем практическую реализацию идеи: переход от «фиксированных весов» к онлайн‑эволюции параметров с ясными метриками здоровья и инструментами диагностики — без необходимости останавливать торговлю для переобучения.

Название файла Описание файла
CA_Grid_10K.mq5
Основной сеточный советник системы
CellularNeuralNet10K.mqh
Включаемый файл торгующих клеточных автоматов; разместить в Include\Cellular10K
CellularBinaryPredictor10K.mqh
Включаемый файл прогнозирующих клеточных автоматов; разместить в Include\Cellular10K
Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (2)
IVAN TITOV
IVAN TITOV | 12 мая 2026 в 14:10
Проще тогда кронос использовать, такая же вероятность адаптации, даже больше можно обучить
Aliaksandr Kazunka
Aliaksandr Kazunka | 12 мая 2026 в 16:46
моделирование на OHLC  можно выбросить в топку сразу
Нейросети в трейдинге: Внимание, память и рыночные паттерны в GDformer Нейросети в трейдинге: Внимание, память и рыночные паттерны в GDformer
Статья разбирает архитектуру GDformer применительно к алгоритмическому трейдингу. Показано, как обучаемая память, Dictionary-based Cross-Attention и Similarity Branch помогают сопоставлять текущее состояние рынка с выученными режимами и оценивать степень надёжности интерпретации. Дана реализация прямого прохода механизма внимания в OpenCL с использование разреженных коэффициентов без повторного перенормирования, что повышает устойчивость модели и эффективность на длинных последовательностях.
Двумерные копулы в MQL5 (Часть 2): Реализация архимедовых копул в MQL5 Двумерные копулы в MQL5 (Часть 2): Реализация архимедовых копул в MQL5
Во второй части серии мы рассматриваем свойства двумерных архимедовых копул и их реализацию в MQL5. Мы также изучаем применение копул для разработки простой стратегии парного трейдинга.
От матриц к модели: Как запустить ML-пайплайн в MQL5 и довести его до ONNX От матриц к модели: Как запустить ML-пайплайн в MQL5 и довести его до ONNX
Показано, как организовать согласованный ML-конвейер в MetaTrader 5 с разделением ролей: Python обучает и экспортирует модель в ONNX, MQL5 воспроизводит нормализацию и PCA через matrix/vector и выполняет инференс. Такой подход делает входы модели стабильными и проверяемыми, а тестер стратегий MetaTrader 5 даёт метрики для анализа поведения системы.
Кодекс рыночных состояний в MQL5 (Часть 1): Побитовое обучение на примере Nvidia Кодекс рыночных состояний в MQL5 (Часть 1): Побитовое обучение на примере Nvidia
Мы начинаем новую серию статей, которая развивает наши предыдущие наработки, изложенные в серии о MQL5 Wizard, и продвигает их дальше по мере усиления нашего подхода к системной торговле и тестированию стратегий. В этой новой серии мы сосредоточимся на советниках, запрограммированных на удержание только одного типа позиций — преимущественно длинных. Сосредоточение на одном направлении торговли может упростить анализ, снизить сложность стратегии и дать важные наблюдения, особенно при работе с активами за пределами Forex. Поэтому в этой серии мы исследуем, эффективен ли такой подход для акций и других невалютных активов, где long-only-системы часто хорошо согласуются с подходом smart money и стратегиями институциональных участников.