Implement: futures rollover — auto-switch between near-expiry contracts #15

Open
opened 2026-06-01 11:05:01 +00:00 by derfenix · 0 comments
Owner

Задача

Реализовать механизм автоматического ролловера фьючерсных контрактов согласно спецификации docs/specs/futures-rollover.md

Phase 1 — FuturesResolver + мониторинг

  • core/application/futuresresolver — refresh через GetFutures + фильтр basic_asset
  • Кэширование (process-wide, 1h)
  • YAML futures_groups[] + валидация
  • GET /status — состояние групп
  • Логи при приближении экспирации
  • Тесты: resolution, кэш, граничные даты

Phase 2 — RolloverController

  • core/application/futuresrollover — RolloverDecision, Execute
  • Интеграция через CandleProcessor в TradingPipelineWrapper
  • Close near + Open next через Tinkoff (two-phase: close за candle, open следующей)
  • Переключение candle stream (Trader.SwitchInstrument — channel-based)
  • Стоп-ордера: передаются через engine.ExecuteDecision (Tinkoff adapter handleCrossFigiOrder)
  • Тесты: rollover flow без позиции, с позицией, no-next, unknown group

Phase 3 — Backtest склейка (см. отдельную задачу)

Phase 4 — UI / мониторинг

  • Dashboard статуса групп (GET /status — Phase 1)
  • Ручной триггер rollover через API (POST /rollover/{tickerRoot})
  • Оповещения об экспирации (логи в Phase 1)
## Задача Реализовать механизм автоматического ролловера фьючерсных контрактов согласно спецификации [docs/specs/futures-rollover.md](https://git.derfenix.pro/trading/tradebot-ng/src/branch/master/docs/specs/futures-rollover.md) ## Phase 1 — FuturesResolver + мониторинг ✅ - [x] core/application/futuresresolver — refresh через GetFutures + фильтр basic_asset - [x] Кэширование (process-wide, 1h) - [x] YAML futures_groups[] + валидация - [x] GET /status — состояние групп - [x] Логи при приближении экспирации - [x] Тесты: resolution, кэш, граничные даты ## Phase 2 — RolloverController ✅ - [x] core/application/futuresrollover — RolloverDecision, Execute - [x] Интеграция через CandleProcessor в TradingPipelineWrapper - [x] Close near + Open next через Tinkoff (two-phase: close за candle, open следующей) - [x] Переключение candle stream (Trader.SwitchInstrument — channel-based) - [x] Стоп-ордера: передаются через engine.ExecuteDecision (Tinkoff adapter handleCrossFigiOrder) - [x] Тесты: rollover flow без позиции, с позицией, no-next, unknown group ## Phase 3 — Backtest склейка (см. отдельную задачу) ## Phase 4 — UI / мониторинг ✅ - [x] Dashboard статуса групп (GET /status — Phase 1) - [x] Ручной триггер rollover через API (POST /rollover/{tickerRoot}) - [x] Оповещения об экспирации (логи в Phase 1)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
trading/tradebot-ng#15
No description provided.