Вы рассказали, что процесс бумажной торговли ночью завершился с ошибкой. Вы перезапустили его до следующего решения, не увидели ошибок и решили, что он продолжил работу с того же места. А затем он отправил ордер на покупку актива, который уже был у вас. Вы хотите понять, есть ли в стратегии ошибка.
Возможно. Но сперва проверьте, знает ли перезапущенный процесс то же, что и бумажный счёт. Перезапуск — это задача восстановления состояния: позиции, денежные средства, открытые ордера и любые данные стратегии, влияющие на следующее решение, должны совпадать. Снова запустить код — самая простая часть.
Что стратегия считала верным до сбоя?
Запишите последнее решение, принятое процессом перед остановкой. Для каждого торгуемого инструмента зафиксируйте целевую позицию, фактическую позицию на счёте, активные ордера и состояние сигнала, которое повлияет на следующее действие. Если таких записей нет, вы не сможете понять, восстановил ли перезапуск состояние или просто запустил стратегию заново с начальными настройками.
Допустим, ваша часовая стратегия покупает 1 единицу, когда сигнал тренда становится положительным, а затем держит её, пока сигнал не станет отрицательным. В 14:00 процесс отправляет ордер на покупку, но аварийно завершается до того, как успевает записать, что ордер принят. Бумажная торговая площадка исполняет ордер. После перезапуска стратегия не видит записанной позиции, а сигнал всё ещё положительный, поэтому отправляет ещё один ордер на покупку. Сигнал работает последовательно. У стратегии устарели данные о том, чем владеет счёт.
Поэтому перед отправкой новых ордеров нужно сверить текущую позицию на счёте с сохранённым состоянием стратегии. Локальный снимок может быть полезен, но достоверные сведения о фактических исполнениях есть у счёта или торговой площадки.
Какое состояние нужно сохранять при перезапуске?
Начните с состояния, способного изменить следующий ордер. Храните надёжную запись с временной меткой и версией для каждого обновления; перед изменением логики восстановления сделайте копию, чтобы позже воспроизвести сбой.
| Состояние | Почему это важно | Проверка при восстановлении |
|---|---|---|
| Позиции и денежные средства | Они определяют экспозицию и доступную покупательную способность | Сравните сохранённые значения с данными бумажного счёта |
| Открытые ордера | Ордер мог исполниться, пока процесс не работал | Проверьте статус ордера и сверьте частичные исполнения |
| Память о сигналах | Пересечения, периоды ожидания и сроки удержания позиции могут охватывать несколько решений | Восстановите последние зафиксированные входные данные для решения |
| Последнее обработанное событие | Оно определяет, с какого места стратегия продолжит получать данные | Повторно обработайте события после этой точки, не применяя их дважды |
О памяти о сигналах легко забыть. Стратегия, торгующая на пересечении, может хранить вчерашнее значение индикатора, чтобы заметить новое пересечение. Если она запускается с пустым значением, то может принять уже существующее условие за новое событие. С таймером периода ожидания та же проблема: перезапуск не должен незаметно сбрасывать правило, которое должно было сохраняться.
Как сделать восстановление воспроизводимым?
Присваивайте каждому ордеру постоянный client ID, сформированный на основе запуска стратегии и решения, которое привело к его созданию. Если процесс повторяет запрос после тайм-аута, он сможет проверить, создал ли этот шаг уже ордер, вместо того чтобы размещать дубликат. Записывайте изменения состояния только после подтверждения соответствующего события на счёте и сохраняйте ID ордеров и исполнений, объясняющие эти изменения.
Затем проверьте сценарий, который привёл к инциденту. Проведите стратегию через принятие решения, сохраните состояние, остановите её и восстановите, используя позиции и историю ордеров бумажного счёта. Сравните следующее решение и созданные ордера с непрерывным запуском. Повторите проверку для частично исполненного ордера и сбоя между отправкой и подтверждением. После возобновления стратегия не должна придумывать новую позицию или повторять уже выполненное действие.
Ведите журнал восстановления: последнее обработанное событие, время снимка счёта, статусы открытых ордеров, восстановленная версия стратегии и первое решение после перезапуска. Так фраза «процесс снова запустился» превратится в событие, которое можно проверить.
Чему можно доверять после перезапуска?
Доверяйте процессу только после того, как состояние счёта и стратегии сверено, статусы ожидающих ордеров известны, а следующее решение совпадает с тем, которое вы ожидали бы при непрерывной работе. Если вы не можете объяснить расхождение, приостановите отправку бумажных ордеров и изучите последовательность событий. Работающий процесс ещё не доказывает, что стратегия восстановлена.
Сбой уже помог вам обнаружить важное: он выявил допущение, с которым обычному запуску не приходилось сталкиваться. Сделайте перезапуск воспроизводимым сценарием — и вы будете знать, что помнит ваша стратегия, прежде чем снова поручить ей торговлю.
← Все статьи


