Тема
Справочник параметров directional/Harvester
Актуализировано 2026-08-06 после удаления legacy
pm-bot. Этот документ больше не дублирует сотни полей вручную: прежняя генерация 2026-05-19 содержала env-ключи, классы и точки исполнения удалённого движка.
Канонические источники
| Что проверять | Единственный источник |
|---|---|
| Тип, обязательность, единицы, запрет неизвестных ключей | DirectionalConfig (crates/pm-engine/src/strategies/directional/config.rs) |
| Runtime-преобразование цен milli → pip | RuntimeDirectionalConfig (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 |
| Бизнес-логика Harvester | directional-harvester.md |
| Три канонических лимита риска | risk-and-emergency.md |
Параметры стратегии хранятся только в config.db, в JSON strategies.definition. Env-переопределения стратегии запрещены ADR-015. Отсутствующий обязательный ключ, неизвестный ключ или неправильный тип должны ронять сохранение/запуск; скрытых runtime-default нет.
Денежные ограничения
Ровно три RISK-LIMIT:
shares_per_market_max— позиция плюс незаполненные BUY-резервации и новая заявка.budget_per_market_micro_usd— стоимость позиции с фактическими комиссиями плюс незаполненные BUY-резервации с fee reserve.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.
type | CLOB-форма | Дополнительные поля |
|---|---|---|
limit_gtc | Limit + GTC | обязательный post_only |
limit_gtd | Limit + GTD | обязательные post_only, ttl_seconds >= 180 |
fak | FAK + IOC | нет |
fok | FOK + 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действует legacybase + offset; вtrueразрешены толькоDirect, нулевой offset и maker-only initial BUY, а bounded улучшение работает на спреде2..=5ticks. Собственные 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; добавление или удаление поля требует синхронного изменения всех четырёх источников выше.