Разработка платформы и журнал исправленных багов — бок о бок
~2 года: от концепции до автономной системы
Фид Alpaca по умолчанию стоял iex — ОДНА биржа из полутора десятков. Замер по PLTR на пятнадцатиминутках за месяц: iex дал 591 бар и 28.7 млн объёма, полный тейп sip — 818 баров и 426.6 млн. Треть баров отсутствовала вовсе, остальные сложены из одной пятнадцатой сделок: их максимум, минимум и закрытие не отражали рынок. ВСЕ стоковые стратегии были доказаны на этой тени. Вывод «по бумаге эджа нет» оказался выводом о фиде: на полных данных тот же прогон нашёл семь стратегий вместо одной.
Ошибка с фидом прожила месяцы, потому что данные никто не спрашивал, кто они. Теперь перед перебором ряд проверяется на источник, глубину, полноту, разрывы и битые бары — с поправкой на режим торгов, поскольку круглосуточную крипту нельзя мерить меркой шестичасовой американской сессии. Паспорт кладётся рядом со стратегией: через месяц видно, на чём она доказана.
Порог взвода сравнивал пиковую прибыль в фунтах с ПЛАНОВЫМ риском в фунтах, а план расходится с фактом всегда — минимум лота, маржинальный кап, курс котируемой валюты. Все победители нефти выходили ровно на +1.00R при цели 2.9R: победитель стал равен проигравшему, и при винрейте 27% минус был гарантирован арифметикой. R теперь берётся из цен, где валюта и объём не участвуют. Исправлено в четырёх ботах.
Сигнал выхода считался по последнему закрытому бару — тому самому, на котором открылись. Форма бара входа выбивала сделку немедленно: медиана жизни позиции была ПЯТЬ МИНУТ при часовых и дневных стратегиях, три четверти закрывались за четверть часа. Каждое такое закрытие ставило инструмент на паузу, и бот сам себе блокировал повторный вход.
Калибровка случайности копилась через максимум со старым значением: один испорченный замер отравлял инструмент навсегда. По PLTR держалось 11.01, тогда как честный перезамер дал 1.77 — завышено вшестеро, и стратегии резались против числа, которого шум никогда не показывал. Таких ключей было 96 из 652. Перезамер теперь замещает, файл ведёт список замен.
Была зашита ровно 0.7. Если сильное движение попадало в хвост ряда, оно целиком уходило в проверку и раздувало её: у PLTR обучение дало 0.76, а проверка 11.01 — в 16 раз лучше, потому что в неё попал рывок +39% за пять дней. Сдвиг границы разоблачает такие находки за одну команду: настоящая стратегия сдвиг переживает, окно — нет.
Журнал вырос со 129 полей до 224 и подключён ко всем торгующим ботам вместо одного. На входе: тренд, положение в диапазоне, волатильность против собственной истории, время и сессия, состояние счёта и серия. На закрытии: форма пути, доля времени в прибыли, откат после пика, КПД выхода и смена режима под сделкой. Всё считается из свечей, которые бот уже держит.
Сканер читает код — этот слой смотрит на поведение. Десять проверок стоят внутри журнала, через который проходит каждая сделка, поэтому покрыты и боты, которых ещё не написали. Главная: полный стоп ОБЯЗАН давать ровно −1.0R. За первый час работы инварианты поймали живой дефект у четырёх ботов сразу — доля взятого от хода выходила больше единицы, чего быть не может.
Каждый новый класс добавлен по случившемуся на счёте: время свечи через parseFloat (у всех баров выходило число 2026), выдуманная сетка объёма, риск на котируемую валюту, закрытие чужих позиций в цикле по всему счёту, отказ брокера без паузы, флэт в поражениях, частичный фид, данные без паспорта. Из 130 находок настоящими оказались меньше половины — остальные разобраны глазами и признаны ложными.
У исполнителя Saxo профит-выход шёл по ВСЕМ позициям счёта и закрывал любую прибыльную старше десяти минут — независимо от того, кто её открыл. Счёт общий на несколько ботов: так уже гасились чужие сделки по совпадению инструмента. Теперь трогается только своё, чужое пишется в журнал и обходится.
Состав набирался по качеству, а стоимость проверялась ПОСЛЕ — дорогие стратегии занимали места, тут же выпадали на проверке доступности, и слоты стояли пустыми до следующей перезагрузки. Работало восемь из десяти. Теперь стратегия, не влезшая в план риска, пропускается при наборе, а место уходит той, что по карману; запись живёт шесть часов и снимается сама.
У ботов без брокерского идентификатора — симуляторов, крипты, акций — ключ сделки оставался пустым, и запись входа с записью выхода не связывалась. Все разрезы отчёта по сессии, дню недели и режиму молчали. Ключ теперь собирается из бота, инструмента, стратегии и момента открытия.
Проверка 500 закрытых сделок показала, что банился не тот набор: худший донор счёта торговался свободно, а инструмент с положительным результатом был закрыт. Списки переписаны по фактическим числам, а не по памяти.
Инструмент раз в два часа сравнивает, что стратегия обещала на отборе, с тем, что она дала на счёте: пять диагнозов и история расхождения. Вскрыл, что вся прибыль основного исполнителя пришла от двух сделок стратегии, которой в текущем составе уже нет.
Деление прибыли в фунтах на дистанцию в котируемой валюте давало число, лишь похожее на R. Поймано проверкой: полный стоп обязан давать −1.0, а выходило −0.098. Теперь R — это отношение пройденного к риску, без валюты.
Тринадцать страниц переведены полностью. Три ловушки ложной готовности: схема строилась из скрипта и проверку обходила, сама проверялка резала строки на четырёхстах символах и не видела длинные абзацы, а сырые угловые скобки в тексте рвали разбор и давали гибридные фразы.
Пробой с ретестом на 1833 непересекающихся сделках дал математическое ожидание +0.001R ДО издержек. Преимущество над случайным входом таяло с ростом выборки — признак шума, а не находки. Точкой отсчёта должен быть случайный вход, а не безубыточный винрейт.
Ступень «разведка» не кусалась: минимум лота биржи возвращал полный размер, и в журнале стоял £1.00 вместо £0.05. Функция расчёта бюджета не вызывалась нигде.
Реальные закрытые сделки берутся у брокера и прогоняются через модель с их же параметрами — стоп и цель читаются из самой сделки, а не задаются. Инструмент ловит расхождения, о которых не догадывались: первый прогон нашёл бота, у которого модель обещала +1.31R, а счёт дал +0.05R. Причина вскрылась разбором причин закрытия — 86% его сделок гасились рыночным ордером извне, не дойдя ни до стопа, ни до цели.
Все прежние лабы меряли одну стратегию отдельно, но деньги теряются в связке. Новая торгует весь набор одновременно на общем счёте и проверяет то, что стояло на глаз: число одновременных позиций, порог корреляции, дневной ограничитель убытка и паузу после убытка. Первый замер показал, что ограничитель по корреляции отнимает результат, не уменьшая просадку.
Найденные ошибки были правдоподобны на вид: код исполнялся, числа получались, в журналах тишина. Теперь каждый шаг сверяется с физически возможным диапазоном, нарушение записывается с примерами и контекстом, а стратегия без единого сигнала за всю историю помечается как мёртвая. Перед отправкой ордера работает единая батарея проверок: объём, стороны стопа и цели, минимум биржи и совпадение риска с планом по порядку величины.
Ошибки размножались копированием — одна строка фиксации прибыли жила в девяти ботах сразу. Каждый известный класс описан как проверка и гоняется по всем файлам. На первом же запуске сканер нашёл недоделку предыдущего дня: порог фиксации сделали относительным у одного бота и пропустили у другого.
Стоп жёстко привязывался к тому же интервалу, на котором сработал сигнал, и быстрые таймфреймы выглядели неторгуемыми. Момент входа и вес сделки — разные вещи: на одних и тех же данных прежнее правило дало ноль выживших вариантов из 47 682, а раздельное — десять.
Сигнал каждой стратегии пересчитывался заново сорок пять раз — по разу на каждую пару «цель/стоп» и каждый режим выхода. Устранение избыточности сократило прогон со 185 секунд до 33; результаты совпали по всем детерминированным полям.
Отбор упирается в счёт, а не в сеть: инструмент на одном интервале качается две секунды и считается двести. Сделана очередь заданий и рабочий модуль для внешнего компьютера. По сети идут только свечи туда и числа обратно; ключей брокера в задании нет, поэтому считающая машина не может открыть ни одной сделки.
Спред брался одной котировкой и применялся ко всей истории — в выходные это давало пятничное закрытие, завышавшее расходы вчетверо. Теперь берётся медиана фактического спреда по всей выборке. Отдельный замер по часам суток показал, что в 21:00 UTC спред раздувается в 2.6–5.8 раза; этот час исключён из входов везде.
Раньше лаба моделировала только стоп и цель, а живой бот поверх них применяет профит-лок, лимит удержания, торговое окно и платит спред — отсюда систематическое расхождение между бэктестом и реальностью. Построен sim-core: один модуль, через который обязана гонять сделку любая лаба. Моделирует весь стек выходов, включая правило «лок действует только с баров позже того, на котором встал». Шесть механизмов проверены по отдельности на синтетике.
Каждый живой бот прогоняется через симулятор со СВОИМ реальным сигналом и своими настройками, с перебором взвода лока и лимита удержания. Сразу дало нетривиальный результат: один и тот же профит-лок убивает трендовый сетап нефти (+0.165R без лока против +0.009R при взводе 0.8R) и спасает возвратный сетап Рашке (+0.049R против −0.016R без лока). Общего правила нет — только замер по каждому боту.
Модуль fx-home берёт коэффициенты «котируемая валюта → фунт» напрямую у брокера и кэширует их. Риск, маржа и косты считаются в реальных фунтах, а не в йенах или долларах, выданных за фунты. Сверено на живых сделках до пенса.
Боты подписывают ордера через tradeClientExtensions: тег бота и плановое время удержания, взятое из того же источника, что применяет лимит удержания. Панель позиций показывает рядом с иконкой бота часы «прошло/план» — красные, если сделка пережила свой лимит. Это же дало возможность определять владельца сделки на общем счёте и прекратить взаимное закрытие позиций.
Замер на 23 инструментах и трёх таймфреймах показал: достижимость цели совпадает со случайным блужданием, а дальние цели ДОСТОВЕРНО хуже него. Введён потолок R:R по таймфрейму — система перестала ставить цели, до которых рынок не доходит.
18 готовых фильтров прогнаны по 7 типам входа и 5 таймфреймам — 395 проверок с поправкой на множественность. Выдержала одна связка: исключение воскресенья и пятницы после 18:00. Внедрено во все живые боты и подтверждено на реальном счёте.
Дневного стопа мало: он не мешает терять по чуть-чуть много дней подряд. У GTE3 добавлен кап на всю серию — накопили минус сверх лимита, бот встаёт насовсем до ручного снятия, открытые сделки при этом доводятся до конца.
Триггер требует импульсный бар, удержание пробоя и реакцию на ретесте, допуск сужен до величины меньше стопа. Достоверный минус старой версии исчез, избирательность выросла в 2.6 раза.
Выход из сделки проверял ТОЛЬКО последний закрытый бар. При пропуске бара (перезапуск бота, сетевой таймаут, простой) тейк или стоп из пропущенного бара терялся — сделка ехала дальше до худшего выхода, создавая ложный перекос в убытки. Теперь сканируются ВСЕ бары с момента входа, первое касание побеждает. Исправлено во всех 9 ботах.
Разбор живых сделок вскрыл корень слабого winrate: дело не в выходах (payoff здоровый, 1.6), а во входах ПРОТИВ тренда — покупка у поддержки в даунтренде, продажа у сопротивления в аптренде, а тренд пробивал уровень и переезжал сделку. Добавлен фильтр по наклону EMA50: во флэте торгуем оба направления, против сильного тренда — не входим.
Сигнальный ансамбль работал только на ВХОДЕ (гейт согласия + размер позиции), а выход был к нему слеп. Теперь симметрия: если весь пул edge инструмента развернулся против открытой позиции (уверенность ≥0.45) — она закрывается сразу, не дожидаясь стопа. Комбо управляет и входом, и выходом.
В фабрику стратегий добавлены свечные и ценовые фигуры: поглощение, харами, пин-бар (молот/звезда), утренняя/вечерняя звезда, MACD-кросс, дивергенция цена/RSI, NR-пробой, трёхбарный разворот — плюс режимные фильтры (волатильность выше/ниже средней, сила тела свечи). 270 → 516 комбинаций, каждая проходит нулевой гейт и walk-forward, чтобы отсеять шум и подгонку.
Исполнитель robust взвешивает размер по ТИПУ стратегии: трендовые-раннеры (payoff>1) идут полным размером, чистые mean-reversion (исторически режут победителей) — риск урезан на 40%. Ансамбль научился правильно классифицировать Герчика и все новые фигуры по режиму рынка.
Единственный бот класса «рыночно-нейтральный парный арбитраж» перепроверен через лабораторию пар: walk-forward пережили только золото/серебро и EUR/CHF (PF>1.7). Исправлен ключевой изъян — спред считался наивно, без бета-хеджа, что давало ложные сигналы (проверено: где бета-хедж молчит, наивный z-score кричал «вход»). Теперь бета-хедж как в лабе, торгует валидированные пары в бумаге до подтверждения форвардом.
Одна панель по кнопке-роботу: счёт OANDA, все исполнители (крипта / Kraken / Trading 212 / Alpaca — баланс, сделки, winrate), семья GTE и легенды — winrate / payoff / net и тумблеры включения. Обновляется каждые 20 секунд. Вся статистика в одном месте.
Остановлен и заархивирован неиспользуемый код: снят прожорливый тренер-демон (освободил ядро CPU), в архив ушли устаревшие боты. Исполнитель Trading 212 стал устойчив к сбоям API — короткий блип курса больше не замораживает бота на целый тик.
GTE2 (ложный пробой) и GTE3 (отбой) переведены на общий движок уровней: вход у уровня, а СТОП — сразу за уровнем (тесный, структурный), а не по ATR или за хвостом бара вслепую. Именно кривой стоп убивал R:R и давал 13–27% winrate. Теперь тесный риск при цели 3:1 достижим. PAPER — набирают статистику под монитором, в бой пойдут только по доказательству.
Отдельный монитор (крон, каждые 15 мин) разбирает каждую сделку и считает winrate / payoff / матожидание ПО ИНСТРУМЕНТУ и ПО СЕТАПУ, ловит краши, протухший heartbeat, застревание и просадку. Первый же прогон вскрыл донора (GBP_JPY: winrate 17%, payoff 0.56). Это и есть петля «наблюдай → чини → калибруй».
Дневной стоп больше не вырубает бота на все сутки после пары мелких минусов. На каждую ступень убытка — короткая пауза с переоценкой, потом торговля продолжается. Полная остановка до завтра — только на катастрофическую просадку. Бот работает весь день, а не простаивает.
Добавлен heartbeat: видно живость, сколько баров оценено за тик, сколько сигналов, открытые позиции и ПОЧЕМУ бот не входит (занят / кулдаун / нет сигнала). Раньше низкочастотный бот молчал между редкими сделками и выглядел мёртвым — хотя держал позиции и работал. Плюс авто-рестарт по крону.
Нулевой гейт умел судить только по МАКСИМУМУ шума (family-wise) — это режет и реальные умеренные edge вместе с шумом. Добавлен режим 99-го перцентиля (FDR): мягче и с большей мощностью, оправдан вторым слоем защиты (форвард-гейт добьёт то, что просочится). Отдельно: у акций своих порогов шума НЕ было, они судились против форексного — теперь калибруются по собственному шуму.
Конструктор рецептов расширен (192→270: добавлены Bollinger %B, Stochastic, Williams %R, CCI) и включён в ежедневный свип. Результат: 41 крепкий edge на 13 инструментах вместо 9 на 4. Ядро — US30 / US2000 / EUR_USD (конструктор-рецепты PF 5.5–7.6 с запасом над шумом до 2.4).
Порог запаса над шумом поднят 0.15→0.5: в торговлю идут только edge с РЕАЛЬНЫМ отрывом от случайности. Сырой PF обманчив — HK33 PF 8.86 имеет запас всего 0.84, а US30-конструктор PF 7.61 — запас 2.43. Отсеян 21 шумо-пограничный из 41. Механизм шума перепроверен: перемешивание грамотное, данные чистые (спайков/битых баров нет), ошибается только в безопасную сторону.
Confirmed-победители форварда с менее чем 25 сделок раньше проваливались в дыру между гейтами (promote выпускал только на 25+, а confirmed ставился на 6+). Теперь торгуются на микро-размере с восстановленными tp/sl — доказанные edge вышли в бой, первый же (XAU) сразу дал тейк-профит.
Защита прибыли перенесена НА СТОРОНУ БРОКЕРА: пик прибыли ≥£1 → стоп двигается у OANDA, фиксируя не менее 50% пика мгновенно. И пока прибыль под серверным стопом — сделка НЕ режется сигналом, а идёт до тейк-профита (по факту весь профит шёл именно из тейк-профитов).
Замена провалившегося GTE: торгует ТОЛЬКО сетапы Герчика, прошедшие walk-forward лабу + форвард-гейт (уровень/пробой/ложный пробой/свип/паранормал-бар), с Герчик-выходом R:R 3:1. PAPER до подтверждения статистикой.
Полная методика из книг: движок строит уровни (паранормальный бар, свинг-пивоты, круглые числа), оценивает силу по касаниям/ложным пробоям (плавающий→фиксированный при ≥2), фильтрует «радиоактивные зоны». Вход только по КОНФЛЮЭНСУ: качественный уровень + триггер на нём. PAPER.
Кодифицированы и проверены лабой: паранормальный бар Герчика (размах ≥2× среднего → уровни на концах, фейд ложного пробоя) и 5-фазный разворот (климакс + слом структуры + ретест). 5-фаз+VWAP на Dow H1 — робастный edge (PF до 4.5).
~18 композируемых фильтров (мульти-ТФ уровень+тренд, VWAP, всплеск объёма, EMA-стек, сессия, ADX-режим, пробой экстремума…). Лаба грузит старший ТФ и тик-объём, сравнивает стратегию с фильтром и без через walk-forward. Результат: фильтры ОТКРЫВАЮТ edge, которого база не достигала (DE30, XAG, WTICO, FR40, Dow).
Форвард-победители, которых ночная лаба перестала выбирать («орфаны»), теперь грузятся напрямую по форвард-доказательству на микро-размере — раньше они не торговались никогда.
База знаний теперь читает видео (mp4/mkv → транскрипция Whisper) и текст-форматы fb2/docx/odt/rtf (было только pdf/djvu/epub). Транскрипция нанайсена — не мешает торговым ботам.
Убраны боты, которые «молотили в ноль» флэтами и мелкими минусами (размывали winrate), оставлены только доказанные edge. Список email-мониторинга приведён к текущим живым ботам — убран спам «не запущен» по отключённым.
Библиотека pure-функций: уровни как вероятностные объекты (P отскока/пробоя, качество, ложные пробои), распределения P/L с хвостами (VaR95/99, skew, kurtosis), рыночная память (Hurst), сигнальная энтропия, вероятность исполнения, временная структура. Считается по требованию — не в горячем цикле.
Демон стримит настоящий стакан Binance (глубина + агрессоры из ленты сделок): дисбаланс книги, кто бьёт в рынок, CVD, спред. Виджет на графике + защитный трим размера в боте. Честно: только крипта — у CFD/FX центрального стакана нет в природе (OTC-дилеры).
Размер сделки адаптивен по режиму и хвостам: отрицательное МО или жирный VaR в режиме → меньше размер. Плюс high-conviction тир (fit≥1.1 → +25%), подтверждённый калибровкой на 6140 сделках.
Profit Vault (30% пиковой прибыли вне торговли), drawdown-shield, vol-dampener и Anti-Correlation Guard (кластер совместных убытков → risk-off группы). Только снижает риск в стрессе — никогда не раздувает на удачной серии (разгон по equity-кривой = погоня за шумом, отвергнут честно).
Логрегрессия на структурных признаках → калиброванная P(успеха) входа (не частота — вероятность). Калибровка монотонна на out-of-sample, обучение еженедельно. Интерпретируемо, не чёрный ящик. Честно: edge модест, пока не влияет на живые сделки — ждёт форвард-доказательства.
Decision-log пишет каждый вход с факторами (режим/fit/размер) + исход → отчёт «high-confidence vs обычные», heatmap факторов, post-mortem. Калибровка MIN_FIT на истории предотвратила ошибочное изменение (сигнал одного датасета оказался шумом на трёх).
Два новых брокера: Kraken (крипта-спот, GBP) торгует доказанные edge live; Alpaca (акции/ETF) — обзор счёта + shadow-бот. Панели брокеров унифицированы.
Отдельный режим лабы гоняет walk-forward на живых данных акций (Alpaca): 60 робастных edge на 19 символах (AAPL, MSFT, AMZN, BAC, SMH…). Не ETF-прокси — настоящие акции.
Дневной −6% и недельный −12% стоп-лосс + жёсткий корреляционный лимит + режим-гейт входа — теперь на всех исполнителях (было только у OANDA).
Каждый edge отдельно прогоняется по высоковолатильным барам и разбивается по режимам рынка — видно, где держится, а где хрупкий.
Фабрика стратегий: из библиотеки примитивов (17 триггеров × 8 режимных фильтров) генерируется 136 рецептов-кандидатов, лаба гоняет их walk-forward по всей вселенной. Движок сам изобретает новые edge каждую ночь — 57 прошли отбор с первого прогона.
Между «лаба нашла» и «торгуем полным размером» — проверка на живом форварде (данные после находки подогнать нельзя). Пока edge не докажет себя вперёд — торгует микро-размером; провалил — не берётся. Защита от переоптимизации на тысячах тестов.
Размер сделки = фиксированный % риска от эквити ÷ ATR-стоп. Каждая сделка рискует одинаково, размер растёт вместе со счётом (сложный процент), инструменты сайзятся сами через живую конверсию валюты.
Лаба подбирает лучший храповик персонально: Chandelier, безубыток после +1R, Donchian/Turtle, EMA-трейл или фикс-цель. Прибыль часто от выхода, не от входа — половина топовых edge выбрала храповик.
Те же edge доказаны walk-forward на крипте (43 штуки, данные Binance, честные тейкер-косты) и торгуются напрямую статистикой — а не нейросетью-гаданием. Единый счёт компаундится, старт в PAPER до подтверждения.
Закодированы и проверены лабой: IBS, Fisher Transform, TRIX, Aroon, Relative Vigor Index, Schaff Trend Cycle, TD Sequential, Hull MA, NR7 Крабела, Connors Double-7. Что не пережило walk-forward (Coppock, Camarilla, Ultimate Osc) — честно отсеяно.
Нейросеть получает на вход сжатый консенсус всех доказанных edge (по семействам) и учится взвешивать их по режиму — 60 входов, головы Тренд/Флэт/Пробой. Остаётся в тени за AI-gate до доказанного форвардом edge.
+12 рынков CFD в лабе: мировые индексы (Russell, DAX, Nikkei, FTSE, Euro Stoxx), палладий, софт-сырьё (пшеница/кукуруза/сахар/соя) — больше рынков = больше независимых edge.
Новый бот: торговля по методике Герчика — вход от уровня (пин-бар БСУ-БПУ, отбой, пробой-ретест, ложный пробой) и прибыль бежит до цели (R:R 2.5:1).
Добавлены и подтверждены нашей лабой документированные преимущества: Time-Series Momentum (золото), RSI(2) Connors (индексы), Dual Thrust (нефть), Ichimoku/Parabolic SAR (серебро, платина), крипто-моментум на выходных. Нерабочее (CCI, Heikin-Ashi, Supertrend и др.) отсеяно фильтром.
Новый рыночно-нейтральный бот: z-score спреда коррелированных активов (золото/платина, USD_CAD/USD_CHF). Прибыль на возврате спреда к среднему, независимо от направления рынка.
Убрано досрочное закрытие плюсовых сделок — выигрыш ведётся до цели, как ручная торговля. Защита капитала вынесена на уровень дня.
Жёсткий лимит убытка за день: превышен — всё закрывается до завтра. Единый храповик защиты прибыли на всём флоте ботов.
Монитор здоровья каждые 5 минут + перехват тихих сбоев в каждом модуле. Письмо при любой поломке.
Ежедневные снапшоты для восстановления после сбоя, хранение логов 2 недели, веб-просмотр логов и дебага из кабинета.
Лендинг разбит на отдельные страницы (Возможности, Боты, Стратегии, Движок, Схема, Инструменты, Безопасность, FAQ, Доступ) с единым верхним меню.
В раздел «Движок» добавлена иллюстрация-робот с ровной сеткой карточек вокруг.
Во все разделы добавлена актуальная информация о движке: уровни капитала, храповик прибыли, защита на выходные, пробой-на-объёме.
Устранён повтор установки стопа каждые 5 минут на выходных (лишние API-вызовы).
Боты сами наращивают число сделок и стратегий при пополнении счёта (£100-уровни). Размер сделки фиксирован — растёт только количество.
Перед выходными: прибыльные позиции закрываются, убыточные не закрываются, но защищаются тонким стопом (доп. убыток ≤ £0.10).
Покупка только на реальном пробое локального максимума на повышенном объёме — вместо случайного сигнала.
Интерактивная схема всего движка: попапы на блоках, анимация потока данных.
OANDA-движок начал торговать золото, серебро, Dow, S&P 500 и Nasdaq лучшими walk-forward стратегиями (PF до 4.93).
Дневная прибыль фиксируется ступенями: отдал 10% от пика → уровень становится «полом», бот торгует дальше. Прибыль только вверх.
Сделки идут до реальной ATR-цели, а не режутся на спред-масштабе. Спред перестал съедать прибыль.
Крипто-бот: соотношение тейк/стоп выправлено с провального 1:14 на здоровое.
Добавлены S/R-отбой, пробой-ретест, слом структуры (BOS), мульти-ТФ вход, свип ликвидности перед пробоем.
Стратегии теперь проходят отбор только если прибыльны после спреда, слиппеджа И свопа за перенос.
Исправлена метрика точности нейросети; выход в live только при доказанной направленной точности.
Сбой чтения баланса больше не вырубает торговлю по ошибке.
Локальная нейросеть (обучена на 17 книгах) торгует в тени и зарабатывает право на реальные деньги по доказанному edge.
Подключён счёт Saxo с переключателем SIM ⇄ LIVE.
Анти-429 backoff для Trading 212, обкатка новых стратегий в paper-режиме перед реальными деньгами.
Подключён крипто-предиктор и спотовые боты на Binance (дип-байер, флоу-моментум).
Подключены OANDA и IG. Запущены корреляционные, дивергенция- и lead-lag-демоны, новостной сентимент-анализ.
Per-symbol веса индикаторов на 7 таймфреймах (M5–W), дообучение на закрытых сделках.
Расширение таймфреймов и инструментов, автоматическое построение уровней и фигур на графиках.
TA-движок: 18 индикаторов и 15 компонентов теханализа, библиотека стратегий, первые боты (OTC, мульти-символ).
Кастомная самообучающаяся нейросеть для анализа рынка.
Веб-интерфейс, серверная инфраструктура, система демонов и их автоперезапуск (watchdog).
Переписан движок сигналов и инфраструктура демонов под мульти-брокерную работу.
Параллельная торговля по многим инструментам на нескольких таймфреймах.
Авто-распознавание уровней, паттернов и дивергенций на графиках.
Первая версия самообучающейся нейросети; дообучение на исходах сделок.
Оптимизация параметров, фильтры входа, управление риском.
Запуск ботов на демо-счетах брокеров, круглосуточная работа.
Интеграция с торговыми API в демо-режиме.
Движок исторического тестирования и библиотека торговых стратегий.
Первые рабочие прототипы, исследование индикаторов и стратегий.
Подключение рыночных данных, первые эксперименты с сигналами.
Идея и концепция автономной мульти-брокерной торговой системы.
прозрачность: каждый пойманный баг — часть надёжности
Фид Alpaca по умолчанию стоял iex — одна биржа из полутора десятков. Замер по PLTR на пятнадцатиминутках за месяц: iex дал 591 бар и 28.7 млн объёма, полный тейп sip — 818 баров и 426.6 млн. Треть баров отсутствовала вовсе, остальные сложены из одной пятнадцатой сделок, поэтому их максимум, минимум и закрытие не отражали рынок. Вывод «по бумаге эджа нет» оказался выводом о фиде: на полных данных тот же прогон нашёл семь стратегий вместо одной.лаба
Порог взвода сравнивал пиковую прибыль в фунтах с ПЛАНОВЫМ риском в фунтах, а план расходится с фактом всегда: минимум лота, маржинальный кап, курс котируемой валюты. Все победители нефти выходили на +1.00R при цели 2.9R — победитель стал равен проигравшему, и при винрейте 27% минус был предрешён арифметикой, сколько ни улучшай вход. R теперь считается из цен.ратчет
Сигнал выхода считался по последнему закрытому бару — тому самому, где открылась сделка. Его максимум и минимум включают движение ДО входа, поэтому позицию выбивало тем, чего она не застала. Медиана жизни позиции была пять минут при часовых и дневных стратегиях, три четверти закрывались за четверть часа. Каждое закрытие ставило инструмент на паузу, и бот сам блокировал себе повторный вход.движок
Калибровка копилась через максимум со старым значением: один испорченный замер отравлял инструмент навсегда. По PLTR держалось 11.01, честный перезамер дал 1.77 — завышено вшестеро, и стратегии резались против числа, которого шум никогда не показывал. Раздутых ключей было 96 из 652.лаба
Время приходит строкой вида 2026-08-11T00:00:00Z, а разбиралось через parseFloat — тот читает до первого нецифрового символа и возвращает 2026 ОДИНАКОВО для каждой свечи. Любое сравнение по времени было пустым: «свежая ли свеча», «сменился ли бар», «сколько прошло» давали ноль разницы. Жило в трёх демонах месяцами.движок
Демоны намеренно держат последнюю дневную свечу как «сегодня», и для контекста это верно, но в расчёт волатильности она попадала тоже. Рано утром диапазон дня неполный, ATR занижен, дистанция стопа мала, а объём позиции завышен. Ошибка максимальна на открытии суток и тает к вечеру, поэтому в глаза не бросалась.риск
Минимальный объём брался из зашитой в код карты и делился на сто: у золота выходил шаг 0.001 при биржевом минимуме 0.1. Три из пятнадцати открытых бумажных позиций биржа бы не приняла. Статистика считалась на сделках, которых не существует, а по ней решается вывод бота на живые деньги: при подъёме до минимума риск вырос бы вчетверо.статистика
Объём считался делением риска в фунтах на дистанцию стопа в котируемой валюте — размерности разные, поэтому верно выходило только для пар с котировкой в фунтах. Бот думал, что рискует £2.40, а рисковал £0.013. Йеновые сделки составляли 11–16% выборки и входили в статистику почти невесомыми, на долларовых риск занижался на 27%.риск
Профит-выход шёл по ВСЕМ позициям счёта и гасил любую прибыльную старше десяти минут, независимо от того, кто её открыл. Счёт общий на несколько ботов. Заодно вскрылось, что этот выход рубит любого победителя на десятой минуте — та же болезнь, что убивала соотношение прибыли к убытку у нефти.боты
Крипто-исполнитель выдал 695 отказов за пять дней, из них 694 одного вида: «объём 0 меньше минимума». Бот считал размер, которого биржа не принимает, и долбил в неё каждые пять минут — лог забивался, лимиты сети жглись, причина не устранялась.боты
У шести симуляторов ошибка записи глоталась пустым обработчиком. При заполненном диске или слетевших правах бот теряет список открытых сделок и после перезапуска считает, что позиций нет.наблюдаемость
Зашитая карта знаков отличалась от биржевой на трёх инструментах из девяти. В симуляторе это грубее округляет вход, стоп и цель, а в живом боте такая карта уже отклоняла ордера индексов.боты
Метрика показывала 2.5 и 3.1 при потолке 1.0 — взять больше, чем рынок дал, невозможно. Значит неверно считается либо максимальный ход, либо выход. Число месяцами стояло в отчётах и не вызывало вопросов; поймано новым слоем инвариантов в первый же час его работы, сразу у четырёх ботов.статистика
Все четыре живых бота считали риск как «дистанция цены × юниты» и трактовали результат как ФУНТЫ. Но это сумма в КОТИРУЕМОЙ валюте: для USD_JPY 2 юнита × 0.371 = 0.74 ЙЕНЫ ≈ £0.004, а бот думал «риск £0.74». Йеновые сделки выходили экономически пустыми (риск в ~190 раз меньше плана): занимали слоты, платили спред и закрывались ровно по ±£0.00–0.01. По USD-парам риск был занижен в 1.33 раза, по CAD в 1.8. Совпадало только на EUR_GBP, где котировка и есть фунт. Введён модуль пересчёта по коэффициентам БРОКЕРА (homeConversions), сверен на реальных сделках до пенса.риск
Счёт OANDA общий: на нём работают robust, GTE3, нефть и Рашке. Исполнитель robust сопоставлял открытые сделки со стратегиями ТОЛЬКО ПО ИНСТРУМЕНТУ и при своей просадке ликвидировал ЧУЖИЕ позиции. Зафиксировано: «СТОП+ПЕРЕОСМЫСЛЕНИЕ £−5.09 → закрыл ВСЁ» снесло три сделки GTE3, открытые минутой раньше, и сделку нефти. Разбор показал: 7 из 24 сделок нефти (−£2.66 из −£3.81, то есть 70% её убытка) убиты чужим ботом. Он же двигал чужие стопы своим профит-локом и закрывал чужое по своему лимиту удержания. Владелец теперь определяется по метке сделки; чужое не трогается в пяти местах кода.боты
Взвод лока стоял в АБСОЛЮТНЫХ £0.8 при риске £1 — то есть на 0.8R, и фиксировал 0.48R при цели 3R. Лок перехватывал сделку раньше, чем она доходила до цели: достижение тейка падало с 26% до 4%, матожидание с +0.165R до +0.009R. Живьём это наблюдалось буквально — из 24 сделок тейк не сработал НИ РАЗУ, вся прибыль шла только от лока. Взвод переведён в R собственного риска. Важно: у Рашке замер дал ОБРАТНОЕ (лок 0.8R лучший, без лока −0.016R) — общего правила нет, только замер.ратчет
Бэктест знал только стоп и цель, а у живого бота поверх них работают профит-лок, лимит удержания, торговое окно и спред. Отсюда систематическое расхождение: лаба обещала нефти тейк в 25% случаев, живьём было 0 из 24. Построен единый симулятор sim-core, моделирующий весь стек выходов; шесть механизмов проверены по отдельности. Правило: новый механизм выхода добавляется в симулятор, а не только в бота.лаба
Из 395 статистических проверок (7 типов входа × 18 фильтров × 5 таймфреймов) поправку на множественность выдержала единственная связка: исключение воскресенья и пятницы после 18:00 UTC. Замер на живом счёте подтвердил — в этом окне сделка теряет £0.587 против £0.174 в остальное время, то есть втрое больше. 3.6% сделок дали 11% всего убытка. Блок торгового окна внедрён во все пять живых ботов.риск
Разбор 1135 живых сделок: тейк достигался в 6.9% случаев, медианный победитель забирал 24% плана. При плановом R:R больше 2.5 цель достигалась в 2% случаев (286 сделок, −£242 — больше половины всех стоп-аутов). Замер достижимости по 23 инструментам показал: близкие цели чуть лучше случайного блуждания, дальние ДОСТОВЕРНО хуже (H4 при цели 3R: −4.2 п.п., t=−16.2). Введён потолок R:R по таймфрейму.движок
В robust порог стоял абсолютным £1.0 при риске сделки £0.77…£2.10. Для крупной сделки это взвод на 0.48R и фиксация ≈0.3R против стопа −1R — payoff меньше единицы получался арифметически, независимо от качества входов. Замер живых сделок: победители по локу давали +£0.94, по тейку +£2.08, при этом лок забирал половину всех победителей. Порог переведён в доли собственного риска сделки.ратчет
Лок вставал по хаю бара и тут же пробивался лоу ТОГО ЖЕ бара — для растущей свечи порядок «хай раньше лоу» ложен. Каждый победитель рубился на 0.6× первого пика: 50 из 81 выходов приходились на лок со средним +0.71R, а тейк достигался 3 раза за всю историю. Из-за этого бумажный «эдж» бота Рашке (+£23, winrate 65%) оказался артефактом. Лок теперь действует только с баров СТРОГО ПОЗЖЕ того, на котором встал.лаба
43 отклонения IG с бесполезной причиной «UNKNOWN» — оказалось, ордер был меньше минимума. Минимумы у IG РАЗНЫЕ: SPX500 = 1.0 £/пункт, US30 = 0.2, NAS100 = 0.05, форекс и металлы 0.01, а бот хардкодил 0.01 для всех. На OANDA то же самое: JP225 отправлялся объёмом 0.004 при минимуме 0.01, золото 0.16 при шаге 0.1 — две из трёх открытых сделок биржа бы отклонила. Минимальный размер, шаг объёма и точность цены теперь запрашиваются у брокера; не влезающий в риск-бюджет инструмент честно пропускается.риск
Конструкция вида `x ? x.list : []` превращала отказ API в пустой список. В OANDA-robust это списывало атрибуцию живого P/L навсегда (запись стиралась ДО получения результата), в IG — снимало лимит одновременных позиций, который считается от их количества, и бот мог открыть сверх капа поверх уже стоящих. Отказ сети теперь отличается от пустоты: тик пропускается целиком.наблюдаемость
Триггер «пробой+ретест» принимал ЛЮБОЕ закрытие за уровнем, включая медленное сползание, не требовал, чтобы пробой удержался, и имел допуск 0.3·ATR — шире, чем стоп, который ставится вплотную к уровню. Замер: старый триггер давал достоверный минус (7502 сделки, МО −0.046R, z=−2.85). Строгая версия требует импульсный бар, удержание пробоя и реакцию на ретесте — значимый убыток исчез (2887 сделок, −0.037R, z=−1.40) при избирательности в 2.6 раза выше.GTE
Система Денниса дневная, а бот крутил её на H1, где «пробой 20 баров» = движение за 20 часов, то есть шум, а 10-барный выход обрубал сделку до того, как из неё мог вырасти тренд. Выход по каналу давал +£0.36 в среднем, стоп 2N отдавал −£1.93 — победитель забирал впятеро меньше. Переведены на дневки System 2 (вход 55 / выход 20 / стоп 1N) плюс лимит удержания, которого не было вообще.боты
В IG-исполнителе при заполненном лимите тик обрывался ДО записи хартбита. Бот на реальных деньгах шесть часов подряд молчал в логе — проверка «жив ли он» именно на это и наткнулась. Лимит позиций это штатное состояние, а не повод пропадать: хартбит теперь пишется и в нём.наблюдаемость
Регулярка требовала слова CLOSE сразу после эмодзи и число без знака фунта, поэтому не парсила ни один живой формат. По флагманскому LIVE-боту панель показывала 0 сделок. Заодно выяснилось, что нефтяной бот вообще отсутствовал в списке наблюдения — торговал реальными деньгами вне мониторинга.наблюдаемость
В strat-core функции возвращают разное: ema даёт массив, а sma и rsiL — ЧИСЛО по индексу. Бот Б.Уильямса звал sma как массивную, получал число, индексация давала undefined — и AO оказывался нулём на каждом баре. Условие «AO больше нуля» не выполнялось НИКОГДА: ноль сигналов за всё время жизни бота, проверено на 5556 барах. Та же ловушка позже сломала генератор RSI в лабе фильтров — треть замера молча не выполнялась.движок
Все 26 pgrep-паттернов в start_daemons.sh были без якоря начала строки, поэтому любая команда, содержащая имя скрипта, засчитывалась за живой демон. PID-файл занимался посторонним процессом, а настоящий демон вечно получал «уже запущен — выходим». Поймано вживую на исполнителе robust.наблюдаемость
Лаба считала каждый бар сигнала отдельной сделкой, но подряд идущие бары — одно и то же движение, и замеры почти не независимы: n завышен, а вместе с ним и статистическая значимость. Конфигурация Черепах показывала +0.123R при z=2.78, а при честном последовательном счёте — +0.001R при z=0.64, то есть ноль. Все лабы переведены на неперекрывающиеся сделки и поправку на число проверок.лаба
Пер-инструментный гард пропускал инструмент, если стратегия помечена confirmed («доказанный edge не трогаем»). USD_CHF (пожизненно −£46, winrate 19%) продолжал открываться вопреки хроническому убытку. Разбор счёта OANDA: три инструмента дали 71% всего убытка (BCO −£58, USD_CHF −£46, XAG −£36). Фикс: жёсткий чёрный список доноров без эджа, который НЕ обходится статусом confirmed. Честно: BCO и XAG разбанены — там winrate 52–53%, слил их старый 4-минутный скальп с инвертированным payoff (демон уже в shadow); в бане остались USD_CHF и mean-reversion-ножи SPX500/AU200 (payoff 0.4–0.5, проверены оба механизма — оба минусят).риск
Стоп ставился на 1×ATR или за хвостом бара, а не сразу за уровнем. Дистанция раздувалась, цель 3× уезжала недостижимо, а рыночный шум выносил раньше цели → 13–27% winrate. У Герчика тесный стоп работает ТОЛЬКО потому, что стоит впритык за уровнем. Фикс: стоп сразу за уровнем (структурный) — риск тесный, соотношение 3:1 достижимо.GTE
Дневной стоп −£1.5 халтил бота до полуночи после 3 мелких минусов — «плохой день» приравнивался к «выключить насмерть». Фикс: на каждую ступень убытка пауза с переоценкой, потом торговля продолжается; полная остановка до завтра — только на катастрофу −£8.GTE
Выход проверял TP/SL на той свече, на закрытии которой открылись (заглядывание в будущее): собственный хвост бара мог мгновенно выбить сделку. Фикс: позиция не закрывается на баре входа — только на последующих.GTE
У акций не было СВОИХ порогов шума, поэтому стоковые edge сравнивались с глобальным (форексным) порогом ≈5 — почти всё резалось как случайность. Выжил ровно 1 edge (XLE), да и тот не торгуется в ЕС на T212 → счёт простаивал не потому, что «нечего торговать», а потому что система сама себя ослепила. Фикс: отдельная калибровка порогов шума по акциям + перегон стоковой лабы по торгуемой вселенной.T212
Фолбэк-порог (для инструментов без своей калибровки) накапливался через максимум между прогонами и дорос до 9 при реальном максимуме ≈5 — из-за чего всё без своего порога судилось завышенно строго. Фикс: порог пересчитывается из фактических значений, а не копится бесконечно.движок
Низкочастотный бот (≈1 сделка в день на медленных дневных сетапах) не логировал ничего между сделками → казался остановленным, хотя держал 2 позиции и оценивал бары каждый тик. Плюс у него не было авто-рестарта — крутился вручную почти 8 суток, упади он — никто бы не поднял. Фикс: heartbeat с причиной простоя + крон-страж.движок
oanda-commodity-daemon исполнитель считал отключённым с 18.06, но start_daemons.sh держал его живым в режиме LIVE с кривой логикой (фикс-пип стоп, перезаход без кулдауна). 14.07 он ТРИЖДЫ за час шортил растущий WTICO реальными ордерами → 3 стопа −£2.84, мимо всех гардов executor (отдельный процесс). Фикс: переведён в shadow, WTICO торгует executor с правильным ATR-стопом.движок
paper-forward подтверждает edge на 6 форвард-сделках, а promote выпускал в торговлю только на 25 — между ними был лог «в probation (микро)», но НИКУДА не выпускалось. Итог: 14 из 15 confirmed edge (+£159 бумажного форварда) не торговались вообще, счёт стоял в нуле. Фикс: средний тир — confirmed с 6–24 сделок выпускаются на микро-размере с восстановленными tp/sl.движок
Защита прибыли закрывала по рынку раз в 5 минут — но быстрый разворот проскакивал между опросами: пик +£2.42 банковался на +£0.04 (отдал 98%), пик +£2.34 → +£0.49 (79%). Замер 57 закрытий: весь профит из тейк-профитов (+£14.76 / 100% winrate), а 29 бот-закрытий резали трейды рано в минус. Фикс: серверный стоп у брокера фиксирует прибыль мгновенно, победители идут до тейк-профита.движок
Округление цены TP/SL шло по захардкоженной карте из трёх индексов плюс эвристике. Остальные (AU200, FR40, JP225, HK33, DE30, EU50, UK100 — точность 1 знак) получали 3 знака → брокер отклонял ордер (precision exceeded). Индекс-edge молча не открывались (FR40 отклонялся ещё с 13.07). Фикс: точность цены берётся с биржи (displayPrecision), не из хардкода.движок
Ограничение объёма считало плечо ФИКС-15×, но у HK33 реальный margin-rate 0.10 (плечо 10×). Кап пропускал позицию £5 423, которой нужно £542 маржи при счёте £373 → INSUFFICIENT_MARGIN, и сильнейший edge (PF 8.86) не торговался. Диагноз «счёт мал» оказался неверным — счёт тянет HK33 объёмом до 1.3 юнита (маржа £307). Фикс: кап по РЕАЛЬНОМУ margin-rate инструмента (берётся с биржи) — дорогие edge торгуются меньшим размером, а не отклоняются.риск
Отклонённый ордер не ставил паузу → HK33 (не по карману по марже) долбил заявку каждые 5 минут впустую, спамя API брокера. Фикс: любой реджект ставит кулдаун, INSUFFICIENT_MARGIN — шесть часов (счёт физически не тянет инструмент до роста капитала).движок
Ордера на акции падали с quantity-precision-mismatch — бот слал количество с 6 знаками, а T212 у многих акций требует меньше (в metadata точность НЕ публикуется). AMZN / COST / HD молча не открывались, счёт стоял. Фикс: ретрай с убыванием точности (5→0 знаков) — отклонение по точности не исполняется, двойной позиции быть не может.T212
Бот gte2 (валидированный Герчик, PAPER) не поднимался — крон не удержал процесс, журнал замер на 3 дня. Синтаксис цел, стартует вручную. Перезапущен, работает. Сайзинг gtev3 перепроверен и оказался исправным (риск-ориентирован; старые 200-юнитовые сделки в состоянии — легаси до фикса 14.07, не текущий баг).GTE
ACTIVE-записи исполнителя хранили id, но не отдельное поле strat → журналы писали «US30/undefined» при закрытии по выходу. Косметика — на торговлю не влияло (поле использовалось только в тексте лога). Фикс: поле добавлено, журналы читаемы.движок
Индексы/сырьё имеют дневные перерывы. Бар после перерыва открывается с РАЗРЫВОМ, и для паттернов (sweep_wick/dthrust/phrev/bos) он выглядит как мощный пробой или тяга — которых не было: стратегии валидировались на НЕПРЕРЫВНЫХ данных, где такого бара не существует. Замер по 1500 барам: медианный гэп 0.16–0.25·ATR (стоп на 1.5·ATR даже не задевает), но хвост до 3.5–4.6·ATR. Гэп перепрыгивает стоп в 0.27% баров (≈раз в 94 дня на портфель), убыток тогда £13–15 вместо £3.79 — дневной предел £18.94 это выдерживает. Фикс: гэп-гард — сигнал по бару с разрывом >0.5·ATR не берём (отсекает 1% сигналов, реальных сделок почти не теряем).движок
«Множитель размера на edge» (1.0–3.0) писался в конфиг и читался ботом в SIZE_MULT — но применялся ТОЛЬКО в фолбэке фикс-размера, который был убран как источник риска ×47. Итог: пользователь выставлял 3×, получал 1×. Управление, которое врёт. Фикс: слайдер работает, но под АБСОЛЮТНЫМ потолком — риск на сделку не может превысить 2% эквити, сколько бы ни выкрутили (иначе riskPct 3% × sizeMult 3 = 9% на сделку).риск
Блок «ХРАПОВИК-БАНК» закрывал ВСЕ прибыльные позиции по флагу bot._bankNow. Флаг не выставлялся нигде — код был мёртв, но оставался миной: одна строка `_bankNow=true`, и победителей снова режут в разгар движения (именно это давало ср.выигрыш £0.49 против ср.проигрыша £0.70). Удалён: фиксацией прибыли заведуют ВЫХОДЫ ИЗ ЛАБЫ, проверенные на истории вместе со своей стратегией.движок
server/exits.js реализует 8 режимов выхода (безубыток, Chandelier, Donchian, EMA-разворот, RSI-разворот, Bollinger-цель, климакс, measured move), лаба подбирает ЛУЧШИЙ под каждый edge и пишет в поле `ex`. Но исполнитель применял только chand/atrtrail (нативный трейлинг брокера) — 7 стратегий из 35. Остальные 23 торговались ТУПЫМ фиксированным TP/SL, т.е. НЕ ТЕМ выходом, с которым edge валидировали. В коде даже стоял комментарий «be → клиент-безубыток (manageOpen)», а самой функции manageOpen НЕ СУЩЕСТВОВАЛО. Следствие: `be` не переводил стоп в безубыток после +1R (позиция могла из плюса уйти в минус), `matrl` не закрывал на развороте против EMA20, `rsix` не фиксировал на перекупленности. Фикс: manageOpen() на каждом тике — закрытие по сигналу разворота + подтяжка стопа ТОЛЬКО в сторону прибыли (ослабление стопа запрещено).движок
risk-guard.corrBlocked существует и работает у крипты/Kraken/T212, но OANDA НЕ ЗВАЛ ЕГО НИ РАЗУ. А список стратегий — почти одни индексы (US30/SPX500/US2000/UK100/DE30/EU50/JP225/HK33). Замер: US30↔SPX500 = 0.78, US30↔US2000 = 0.77, US30↔XAU = 0.71. При лимите 6 позиций бот мог открыть шесть индексных лонгов — это ОДНА ставка с шестикратным риском, а не диверсификация. На момент находки уже висели US30+SPX500. Фикс: корр-лимит в OANDA, порог строже штатного (хватает ОДНОГО коррелированного, а не двух). Сработал сразу: US2000 заблокирован.риск
setInterval запускал новый тик, НЕ ДОЖИДАЯСЬ предыдущего. Тик тяжёлый (свечи по всем стратегиям + гейт доступности + сторож стопов) и мог не уложиться в 5 минут. Два тика параллельно = двойной вход по одному сигналу, гонка за состояние (save() затирает сам себя), превышение лимита позиций. Фикс: флаг занятости, перекрывающий тик пропускается.движок
Риск-сайзинг считал объём под ATR-стоп, но если объём округлялся ниже точности инструмента — срабатывал фолбэк на ЗАХАРДКОЖЕННЫЙ размер. Факт: XAU риск-объём 0.0095 → округление → 0 → фолбэк на 1 → фактический риск £44.64 вместо £0.94 (в 47 раз!). Сделка потеряла £5.84 за 5 минут — две трети дневного убытка. Фикс: не влезает безопасный объём в минимальный лот → НЕ ТОРГУЕМ. Инструмент, который нельзя купить с правильным риском, не по карману.риск
Тот же баг с чёрного хода: защита от превышения риска стояла под условием `if(factor>0)`. Не прошёл запрос котировок (таймаут, 500) → factor=null → риск-сайзинг пропускался, объём оставался захардкоженным, И ПРОВЕРКА ТОЖЕ МОЛЧАЛА. Один сетевой сбой возвращал баг целиком. Фикс: нет курса конверсии — нет сделки.риск
Размер множился на силу edge (до 1.5×) и согласие ансамбля (до 1.6×) — вместе до 2.4× плана: £9.09 вместо £3.79, т.е. 2.4% счёта вместо 1%. Потолка не было. Фикс: потолок множителя 1.25 + абсолютный кап риска 1.5× базы.риск
stopLossOnFill может не примениться (цена ушла, стоп близко), при этом MARKET-ордер исполняется. Позиция без стопа = неограниченный убыток, и никто её не сторожил. Фикс: проверка сразу после заливки (нет стопа → ставим принудительно; не удалось → закрываем) + сторож на каждом тике по всем открытым позициям.риск
notional = Math.max(МИНИМУМ, риск-объём) в t212/crypto/kraken/alpaca: если безопасный объём меньше минимального лота, брали минимальный, молча превышая план риска. Фикс: пропуск сделки во всех четырёх.риск
riskGBP = эквити×2% ХАРДКОДОМ, тогда как OANDA берёт riskPct из общего конфига (0.5–1%). Один и тот же «мозг» рисковал на разных брокерах по-разному, и этого никто не видел. Фикс: IG переведён на общий конфиг.риск
Порог гарда — доля эквити. Пополнение +£100 подняло его £7.04 → £15, и EUR_GBP с накопленным убытком −£9.68 автоматически вернулся в торговлю: его убыток «уже не так велик». Но убыток — исторический факт, депозит его не отменяет. Фикс: храповик порога — только ужесточение, никогда смягчение.риск
HARD = £9 фиксировано. На счёте £378 при риске 1% (£3.79/сделка) торговля вставала бы после 2-3 обычных стопов — на рядовой статистической серии, а не на аварии. Та же болезнь, что у храповика: абсолютные пороги на растущем счёте становятся шумовыми. Фикс: 5R (пять стопов подряд).риск
GTEv3/GTE2 брали ЗАХАРДКОЖЕННЫЙ объём, а стоп у Герчика ставится за уровень — дистанция у каждого сетапа своя. Риск на сделку не контролировался вообще: дневной лимит £1.50 пробило до −£25.67 (в 17 раз). Фикс: объём считается ОТ стопа, не влезает в минимальный лот → пропуск.GTE
Захардкоженная июньская таблица Donchian с PF 1.18 по золоту — при пороге шума XAU|H1 = 2.87. Т.е. его «преимущество» ниже того, что даёт подбрасывание монеты. Никогда не проходил нулевой гейт. Именно он открыл ту XAU-сделку с риском ×47. Отключён до валидации.движок
Лаба перебирала 82 796 комбинаций и оставляла те, у кого PF_oos≥1.1 — порог назначен человеком, а не откалиброван. Проверка на перемешанных барах: на ЧИСТОМ ШУМЕ фильтр находил ВДВОЕ БОЛЬШЕ «робастных» edge (498 из 84 657 = 0.59%), чем на реальных данных (232 из 82 796 = 0.28%), и качественнее (max pfLow 3.16 против 2.09). Значит всё, чем торговали боты, статистически неотличимо от случайности. Фикс: НУЛЕВОЙ ГЕЙТ — порогом стал МАКСИМУМ pfLow, достижимый случайностью на этом инструменте и ТФ (reality check); стратегия обязана обогнать лучшую случайность.лаба
Храповик прибыли работал в АБСОЛЮТНЫХ фунтах: ladderStep £0.15, lossBuffer £0.10. На счёте £88 это 1–2 тика — прибыльные позиции закрывались на каждые 15 пенсов дневной прибыли, а убыточные шли до полного ATR-стопа. Факт по 500 сделкам OANDA: ср.выигрыш £0.49 против ср.проигрыша £0.70, победителей держали 86 мин против 157 мин у убыточных. Матожидание −£0.142/сделка — ни один edge такого не переживает. Фикс: пороги привязаны к риску на сделку (R = 1% эквити): банк не чаще 3R, стоп заработанного 1R.ратчет
Лаба валидирует edge с ВРЕМЕННЫМ выходом (maxHold баров), а в живых движках его не было вообще: позиция ждала TP или SL сколько угодно. Отсюда 157 минут удержания убыточных. У тезиса сделки есть срок годности. Фикс: лимит удержания в обоих robust-движках, значения те же, что в лабе (H4 — 24 бара, H1 — 48).движок
T212, крипта (Binance), Alpaca и Kraken брали последний, ещё формирующийся бар. Сигнал «мигал» внутри интервала, вход происходил по случайному тику, а лаба валидировала на закрытых барах — то есть боты исполняли не ту стратегию, которую проверяли. У T212 это дополнительно рождало ордер в 00:00 UTC при закрытой бирже США → 8 из 10 отмен. Фикс: общий модуль bars.js — только закрытые свечи.движок
Все крон-исполнители держали позицию ровно 60 баров ХАРДКОДОМ на любом ТФ, тогда как лаба валидирует с разными (H4 — 24, M5 — 96). На H4 бот держал позицию в 2.5 раза дольше, чем проверяли. Фикс: единая таблица holdMs() из bars.js.движок
ig-robust-executor — порт oanda-robust, но при портировании потерялись защитные слои: ни per-instrument гарда, ни новостного гейта. IG ежедневно торговал BCO/XAG/WTICO/NATGAS — те самые инструменты, что на OANDA давно заблокированы как хронические доноры (−£57/−£36). За 30 дней они отдали ~£22 из £27.81 всего убытка IG. Фикс: risk-guard + донор-блок; загрузка стратегий 12 → 8.IG
Гард блокировал донора при max(£15, 15% эквити) — минимумы писались под крупный депозит и на счёте £70 доминировали. Прогон на живой книге: гард не заблокировал бы НИЧЕГО, инструмент с накопленным −£12.67 (18% счёта!) проходил как здоровый. Фикс: ведущая величина — доля эквити: max(£2, 8%) / max(£1.5, 3%).риск
Стратегия получала полный размер на живых деньгах, набрав 8 форвард-сделок. Из 16 confirmed медиана была 10 сделок, ≥20 имела ОДНА, ≥30 — ни одна. PF 5.36 на девяти сделках — это не преимущество, а девять подбрасываний монеты. Отсюда «доказанные стратегии, которые сливают». Фикс: порог 25 сделок, обязателен и для уже выпущенных → полный размер: 12 стратегий → 1.форвард-гейт
HTTP 200 от брокера — это «заявка принята», а не «исполнена». Бот записывал позицию сразу, T212 потом отменял ордер, а бот «вёл» и «закрывал» несуществующую позицию с выдуманным P/L. Фикс: подтверждение реального филла перед записью.T212
strategy-lab.js писал результат в общий strategy_lab_results.json без вариантов. Запуск по одному инструменту оставил бы живые движки с одним инструментом вместо всей вселенной. Фикс: --inst требует --out, иначе прогон отклоняется.лаба
Трейлинг-стоп для mean-reversion входов ставился ВЫШЕ входа → «выходы в прибыль» на том же баре (заглядывание внутрь бара) → PF 854, pfLow 356. Фикс: проверка стопа прошлого бара + кап стопа не выше цены.лаба
Топовый edge вообще (XAG нед., PF 3.03) не парсился движком из-за несовпадения имени → боты не могли его торговать. Добавлен тип в strat-core.движок
Индексы/металлы сайзились FX-регуляркой (600 ед) → margin-reject. Явные консервативные размеры на инструмент.риск
US2000/пшеница/платина округлялись в целое → 0 → фолбэк. Фикс: FX→целые, CFD→2 знака.риск
Записи без метки времени → возраст 0 → никогда не confirmed. Фолбэк на возраст состояния.ИИ-гейт
EDGE_FAM не включал fisher/ibs/trix/rvi/… → сильные edge не брали слот. Регекс расширен.движок
Исполнитель искал форвард-победителей среди сегодняшнего набора лабы, а они — «орфаны», которых лаба уже выкинула → пересечение пустое → доказанные edge не торговались НИКОГДА. Фикс: грузим proven напрямую по форвард-доказательству.движок
parseStrat возвращал NULL на именах вида phrev15_vw/bo_retest40_htf → исполнители не могли загрузить фильтрованные edge из лабы. Фикс: парсинг суффиксов фильтров + fail-closed (нет контекста → не входим, защита live).движок
29 видео обработались до фикса Whisper-PATH и записались «сделано» с 0 уроков → пропускались навсегда. Фикс: сняты с «сделано», пере-обработка нанайсенным конвейером.ИИ-обучение
Монитор слал CRIT каждый час по ботам, которых намеренно отключили (binance, gte, ig-kr) — без .DISABLED-маркера. Фикс: список мониторинга приведён к текущим живым, порог «завис» 30→90 мин.наблюдаемость
Старый GTE палил сетапы Герчика без walk-forward валидации и форвард-гейта → 13% winrate, слил весь paper-баланс. Выведен на пенсию, заменён валидированными GTE2/GTEv3.боты
«hold» считался промахом при любом движении → точность тонула к 8%. Реальная направленная = 47%. Метрика исправлена (hold исключён), acc-gate по направленной точности.ИИ
Позиция закрыта серверным стопом, но локальный стейт считал живой → вечный ретрай закрытия каждые 10с. Фикс: реконсиляция через fetchOpenTrades.IG
executeIgTrade без await → все пары видели свободные слоты разом → 6 коррелированных шортов. Фикс: await + кэпы на сторону/валюту.IG
Логировал ЗАЩИТА каждые 7 мин (сессия £0.77 vs пол £1.05). Фикс: ре-базлайн пола при срабатывании.ратчет
Кулофф пере-срабатывал каждые 10 мин ниже −£1.5. Фикс: _coolFloor — только на каждом новом шаге вниз.риск
totalTrades включал flat-сделки → WR тонул. Фикс: wins/(wins+losses).статистика
Исполнитель грузил стратегию с PF6.84 на 8 сделках. Фикс: MIN_OOS_TRADES=20 + bootstrap pfLow.лаба
Вызов ER(i,N) вместо ER(cl,i,N) (массив первым) → tsmom всегда 0. Сигнатура исправлена.движок
Неверный аргумент + без await → amountUSD undefined, гард никогда не блокировал. Фикс аргумента + .ok + await.binance
Боты логируют только на сделках → лог устаревал → ложный алерт; cron без setsid не держал. Фикс: heartbeat 20 мин + setsid respawn.наблюдаемость
Размер 500/1 вместо IG-минимума → отказы и обвалы. Размеры выправлены под IG (0.01-0.02).IG
Whisper внутри звал ffmpeg из PATH (его там нет) → тихий провал. Фикс: инъекция PATH при spawn.ИИ-обучение
Фильтр релевантности был чисто английский → русский курс → 0 уроков. Добавлен RU-словарь ключевиков.ИИ-обучение