Skip to content

Справочник параметров directional/Harvester ​

Актуализировано 2026-08-06 после удаления legacy pm-bot. Этот документ больше не дублирует сотни полей вручную: прежняя генерация 2026-05-19 содержала env-ключи, классы и точки исполнения удалённого движка.

Канонические источники ​

Что проверятьЕдинственный источник
Тип, обязательность, единицы, запрет неизвестных ключейDirectionalConfig (crates/pm-engine/src/strategies/directional/config.rs)
Runtime-преобразование цен milli → pipRuntimeDirectionalConfig (crates/pm-engine/src/strategies/directional/runtime_config.rs)
Машиночитаемый контрактcrates/pm-engine/schema/directional-config.schema.json
Форма оператораfrontend/pm-engine-dashboard-web/src/components/strategyFormSchemas.ts
Бизнес-логика Harvesterdirectional-harvester.md
Три канонических лимита рискаrisk-and-emergency.md

Параметры стратегии хранятся только в config.db, в JSON strategies.definition. Env-переопределения стратегии запрещены ADR-015. Отсутствующий обязательный ключ, неизвестный ключ или неправильный тип должны ронять сохранение/запуск; скрытых runtime-default нет.

Денежные ограничения ​

Ровно три RISK-LIMIT:

  1. shares_per_market_max — позиция плюс незаполненные BUY-резервации и новая заявка.
  2. budget_per_market_micro_usd — стоимость позиции с фактическими комиссиями плюс незаполненные BUY-резервации с fee reserve.
  3. total_budget_micro_usd — общий envelope стратегии; reinvest_realized_pnl является его companion.

Для BUY fee authorization находится в своей роли: taker-capable политика требует явный max_taker_fee_bps, maker post-only запрещает этот мёртвый ключ. Лимита по доле баланса кошелька в системе нет.

Политики исполнения ордеров ​

execution содержит пять обязательных и независимых ролей: initial_entry, dca, target_exit, stop_exit, rank_exit.

typeCLOB-формаДополнительные поля
limit_gtcLimit + GTCобязательный post_only
limit_gtdLimit + GTDобязательные post_only, ttl_seconds >= 180
fakFAK + IOCнет
fokFOK + IOCнет

initial_entry и dca оборачивают policy вместе с условным max_taker_fee_bps; SELL-роли содержат policy напрямую. Глобальных post_only, buy_order_ttl_seconds, max_taker_fee_bps, наследования между ролями и env-overrides нет.

Актуальные safety-контракты входа ​

  • discovery.orderbook_max_age_ms и discovery.universe_max_age_secs — обязательные границы свежести для новых BUY; SELL ими не блокируется.
  • discovery.rediscovery_interval_secs — cadence обновления Gamma; None означает one-shot universe, который после явного freshness-порога перестанет авторизовать новые BUY.
  • entry_flow — Direct либо WatchArm; WatchArm переводит Watching→Armed в SQLite до in-memory перехода и до выпуска BUY, а форму заявки всегда берёт из execution.initial_entry.
  • entry_inside_spread_improvement_enabled — обязательный boolean. В false действует legacy base + offset; в true разрешены только Direct, нулевой offset и maker-only initial BUY, а bounded улучшение работает на спреде 2..=5 ticks. Собственные BUY/SELL исключаются с обеих сторон; рассинхрон блокирует вход. Поле не меняет DCA, SELL или выходную защиту.
  • entry_quality_confirmation, selection, min_bid_depth_micro_usd и bid_depth_band_milli — независимые entry-policy гейты; точная условная обязательность задаётся Rust-типом и JSON Schema.

Что не является текущей ручкой ​

  • risk_kill_switch из pm-bot не является полем DirectionalConfig. Текущий EmergencyGuard — runtime-механизм процесса; его состояние не читается из strategy JSON.
  • entry_debounce_window_ms и entry_debounce_max_band_drift из ADR-030 не портированы в pm-engine и не должны появляться в config.db или форме.
  • DIRECTIONAL_*, BOT_* env-параметры стратегии запрещены.

Контракт формы защищён одновременно Rust golden-тестом config_form_contract.rs и frontend config-contract.test.ts; добавление или удаление поля требует синхронного изменения всех четырёх источников выше.