exposure_protector.md 3.5 KB

Exposure Protector

Defensive rebalancer that trims skew and protects exposure.

Best Used When

  • one side of the book dominates the account
  • Hermes wants to reduce imbalance
  • the market is still tradable, but caution is needed
  • controlled rebalancing is more important than new alpha

Avoid When

  • the market is thin or chaotic
  • the venue is unstable
  • Hermes wants a pure entry strategy
  • frequent churn would be too expensive

How It Works

  • The strategy watches wallet drift and chooses the side needed to move the wallet back toward the target ratio.
  • rebalance_target_ratio is a value-share target for base, not a price target.
  • rebalance_step_ratio controls how far the strategy moves per action, but the actual side choice also depends on the current drift and hysteresis.
  • min_rebalance_seconds blocks repeat actions for a minimum wall-clock period.
  • min_price_move_pct blocks a new order if price has not moved enough since the last one.
  • trail_distance_pct sets the limit order distance from the current price once a side has been chosen.
  • report() and render() show the live drift, anchor, and cooldown state.

Parameters

  • trail_distance_pct: Distance from the current price for the rebalance limit order.
  • rebalance_target_ratio: Target base value share between 0.0 and 1.0. 0.5 means balanced by value.
  • rebalance_step_ratio: Fractional move size per action. Larger values rebalance faster but can churn more.
  • min_order_notional_quote: Minimum quote notional for one action.
  • max_order_notional_quote: Optional hard cap on quote notional for one action.
  • order_spacing_ticks: Declared in the schema, but currently not referenced by the execution path.
  • cooldown_ticks: Tick-based pause after a successful order.
  • min_rebalance_seconds: Wall-clock cooldown between rebalance actions.
  • min_price_move_pct: Minimum price movement required before the strategy will place another order.
  • balance_tolerance: Allowed deviation from the target before the strategy considers the wallet meaningfully out of balance.
  • debug_orders: Enables order-placement debug logging.

Hermes Policy Mapping

  • risk_posture controls caution vs aggression.
  • priority controls urgency and cadence.
  • In current code, apply_policy() rewrites trail_distance_pct, rebalance_step_ratio, min_rebalance_seconds, and min_price_move_pct.

Notes

  • This strategy is passive until Hermes enables it.
  • It should protect and rebalance, not decide regime.
  • Trader derives concrete execution values from policy.
  • report().supervision should be interpreted as a defensive attachment signal, not as a preferred replacement for a healthy grid during persistent trend continuation unless imbalance is genuinely severe.
  • live fee rates are used directly, and quote notional is the canonical sizing unit.
  • rebalance sizing now uses the shared strategy sizing helper so fee-aware quote bounds behave consistently with the other strategies.

Useful Example

{
  "trail_distance_pct": 0.025,
  "rebalance_target_ratio": 0.55,
  "rebalance_step_ratio": 0.2,
  "min_order_notional_quote": 15,
  "max_order_notional_quote": 60,
  "order_spacing_ticks": 1,
  "cooldown_ticks": 2,
  "min_rebalance_seconds": 120,
  "min_price_move_pct": 0.004,
  "balance_tolerance": 0.04,
  "debug_orders": false
}

This is a conservative rebalancer that moves in smaller chunks, waits between actions, and only reacts when price has moved enough to justify another trim.