Исследовательская торговая система на Python: состояние, сбои и проверяемые результаты

AI Trading Ranked

Обновлено: 2026-10-26

Обновлено 26 октября 2026 года. Учебный проект архитектуры, а не история прибыльной системы с реальным капиталом.

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

Шесть обязанностей, не обязательно шесть серверов

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

Прокрутите таблицу по горизонтали, чтобы увидеть все столбцы. С клавиатуры: перейдите к области таблицы и используйте стрелки.

МодульЕго записьЧто запрещает новую инструкцию
Рыночные данныеПлощадка, инструмент, время события и приёма, последовательность и пропускиПропуск или устаревшее наблюдение
ПризнакиДиапазон входов, время доступности, схема и версия преобразованияНеполное окно или несовместимая схема
СигналыВерсия модели, идентификаторы входов, цель и срок действияИстёкший вход или неутверждённая версия
РискСнимок счёта, экспозиция, лимиты и причина решенияНеизвестные позиции, заявки или устаревший баланс
ИсполнениеID намерения, запрос, подтверждение площадки и исполненияНевыясненный предыдущий запрос или неверные ограничения инструмента
МониторингВозраст данных, пропуски, отказы и восстановлениеФактическое состояние установить невозможно

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

Разбор одного отказа

Синтетическая последовательность: признаки доступны в 12:00:00; намерение действительно до 12:00:05; исполнение получает его в 12:00:07. Просроченное намерение отклоняется. Остановка расчёта признаков не разрешает продолжать торговать по «последнему хорошему сигналу». Пять секунд — параметр учебной проверки, не подходящий всем стратегиям лимит.

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

Запрет новых заявок не отменяет выставленные заявки и не закрывает позиции. Это отдельные действия с отдельной сверкой результата. Тайм-аут отмены также означает неизвестность. Перезапуск или локальный лимит убытка не гарантирует максимальную потерю при ценовом разрыве, ликвидации или проблемах хранения средств.

Доставка сообщения не равна исполнению заявки

Redis описывает Pub/Sub как доставку не более одного раза: отключённый подписчик может потерять сообщение. Канал уведомлений не должен быть единственным журналом заявок. Сохраняйте намерение и состояние обработки; определите подтверждение, повторное чтение, дедупликацию и срок хранения. Подтверждение очереди само по себе не доказывает приём или исполнение на площадке.

Для небольшого офлайн-прототипа журнал событий и один записывающий процесс упрощают проверку переходов. Надёжность хранения, параллельная запись, восстановление после сбоя и особенности идентификаторов площадки требуют отдельной реализации. Эта статья её не предоставляет. Офлайн-пример контроля показывает сохранённую остановку и повторный вход без отправки заявок.

Какие данные нужны исследованию

Сохраняйте исторический состав инструментов, включая удалённые, версии исходных данных, значения временных меток, пропуски, версию стратегии, все испытанные варианты и нетронутый оценочный период. Цена закрытия недоступна до закрытия; следующая цена открытия не обязательно достижима при исполнении. Отдельно задавайте спред, глубину, комиссии, частичные исполнения, задержки и отказы.

Преобразования обучаются только на тренировочных данных и применяются к последующим без повторной подгонки. Документация scikit-learn об утечке данных объясняет проблему подгонки на тестовой выборке. Хронологическое разделение должно учитывать пересекающиеся окна целевого результата. Теневой режим помогает увидеть операционные расхождения, но имитация исполнений не доказывает качество реальной торговли или доходность.

Всегда указывайте знаменатель доходности. Синтетический шорт номиналом $10 000 получает 0,04% в каждый из трёх моментов финансирования: $12 до расходов. Если весь хедж связывает $20 000, это 0,06% этого капитала за день, а не 0,12%. Продление фиксированной ставки на год — сценарий, не прогноз. Финансирование может поменять знак, цены двух сторон — разойтись, а обеспечение — попасть под ликвидацию.

Доказательства работы системы

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

Сравнение собственной разработки с готовым продуктом включает лицензии на данные, наблюдение, восстановление и обслуживание, а не только аренду сервера. Разработка полезна, когда требуется проверяемое поведение и есть возможность его поддерживать. Она не даёт автоматически большего преимущества, минимального прибыльного капитала или срока до прибыльности. Если доказательств недостаточно, остановитесь на исследовании.

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