This document defines what Hermes needs from Trader-managed strategies in order to make selection decisions.
A strategy is an account-market specific operating mode. It is not a generic idea detached from venue, balance, or market context.
Each configured strategy must be tied to:
strategy_idaccount_idmarketbase_currencyquote_currencyenabled_stateHermes should be able to ask, for a given account and market, which strategies exist and whether they are currently enabled.
When Hermes queries a strategy, it must receive the information below.
strategy_idstrategy_nameaccount_idmarketbase_currencyquote_currencyenabled_statemodeaccount_balanceavailable_balancebase_positionquote_positionopen_ordersreserved_balanceexposurefree_margin where relevantexpected_market_regimeavoided_market_regimerisk_profileliquidity_expectationevent_risk_expectationvolatility_expectationstatusrecent_changesdecision_historycurrent_intentlast_transitionlast_updateuncertaintyconfidencefillsslippagelatencyrejectionsexecution_qualitystressvenue_healthcurrent_reasonkey_driverswarningsconstraintsHermes should decide using the returned strategy snapshot plus external market information. The minimum decision inputs are:
A strategy query should return a compact structured snapshot with nested sections. Only information that changes Hermes decisions should be included.
Example:
{
"identity": {
"strategy_id": "btc-vienna-trend-1",
"strategy_name": "trend_following",
"account_id": "acc-01",
"market": "BTC/USD",
"base_currency": "BTC",
"quote_currency": "USD"
},
"control": {
"enabled_state": "on",
"mode": "active"
},
"fit": {
"expected_market_regime": "trend",
"avoided_market_regime": "range",
"risk_profile": "medium",
"liquidity_expectation": "normal",
"event_risk_expectation": "low",
"volatility_expectation": "moderate"
},
"position": {
"account_balance": {
"base": 0.42,
"quote": 18500.0
},
"available_balance": {
"base": 0.12,
"quote": 9400.0
},
"base_position": 0.30,
"quote_position": 0.0,
"reserved_balance": 1200.0,
"open_orders": 2,
"exposure": "long",
"free_margin": 8200.0
},
"state": {
"status": "running",
"recent_changes": ["scaled in", "trimmed exposure"],
"decision_history": ["held", "added", "held"],
"current_intent": "follow upward structure",
"last_transition": "2026-04-15T18:10:00Z",
"last_update": "2026-04-15T18:25:00Z"
},
"assessment": {
"confidence": 0.78,
"uncertainty": "low",
"current_reason": "trend intact, balance sufficient, execution stable",
"key_drivers": ["trend", "balance", "liquidity"],
"warnings": ["minimum_hold_minutes=15"]
},
"execution": {
"fills": 12,
"slippage": 0.0012,
"latency": "normal",
"rejections": 0,
"execution_quality": "good",
"stress": "low",
"venue_health": "good"
}
}
A strategy may expose modes, but modes are not separate strategies. Examples:
Hermes must be able to see whether a strategy is:
onoffpausederrorobserveactiveTrader may manage those states internally, but Hermes needs a clear readback of them.
Hermes may instruct Trader to:
Trader should not invent a strategy decision that conflicts with Hermes without an explicit safety reason.
Hermes selects strategies per account-market combination using:
Keep the strategy set small and orthogonal:
idledefensivetrend_followingmean_reversiongridbreakoutevent_drivenidle and defensive first.trend_following and mean_reversion next.grid, breakout, and event_driven after the core set is stable.This is v0.1. Future changes should stay focused on the information Hermes needs to make better decisions, not on exposing implementation detail.