Spot Trading

Risk limits for BTC and ETH
spot trading.

Dynamic position sizing and exposure governance for spot positions in Bitcoin and Ethereum. One API call before every trade.

Free during beta

The problem

Why spot trading needs risk governance.

Static position sizing ignores market context

A fixed 5% position size is too aggressive in PANIC and too conservative in confirmed TREND. Spot traders need sizing that adapts to the current regime, volatility, and macro environment.

No governance between signal and execution

You get a signal to buy BTC. But should you deploy 10% or 40%? Spot trading without pre-trade risk limits means every entry is a guess on sizing.

DeFi borrowing risk leaks into spot exposure

If you borrow stablecoins against BTC collateral to buy more BTC spot, your effective leverage is hidden. A 20% drawdown can cascade through your lending position.

How it works

One API call. Full risk governance.

DYNAMIC

Regime-aware position sizing

max_size_fraction adjusts to market regime, composite score, volatility, and DeFi health. PANIC regimes cap exposure at 15%. Confirmed TREND allows up to 80%.

CONTEXT

Composite score from 30+ signals

On-chain (MVRV, NUPL, supply in profit), derivatives (funding, OI, basis), macro (yields, DXY, Fed liquidity), and sentiment — scored, normalized, and combined into one number.

CONTROL

5-level policy enforcement

BLOCK (reduce only) through EXPANSION (full operations). Each level defines allowed actions, blocked actions, and maximum exposure. Deterministic — same inputs, same output, every time.

UNIFIED

DeFi-aware risk integration

Pass a wallet address and RiskState factors your Aave V3 or Spark Protocol health factor into the position limit. Collateral stress and spot exposure governed together.

API response

Key fields for spot trading.

max_size_fraction

Maximum spot position size as fraction of portfolio (0 to 1)

allowed_actions

Permitted actions: DCA, LONG, SHORT, WAIT, HEDGE

tactical_state

Current directional bias: LEAN BULL, NEUTRAL, LEAN BEAR

binding_constraint

Which cap is limiting you: RULES, MACRO, DEFI, or CYCLE

Request

curl -X POST https://riskstate.netlify.app/v1/risk-state \
  -H "Authorization: Bearer $RISKSTATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"asset": "BTC"}'

Response

{
  "exposure_policy": {
    "max_size_fraction": 0.42,          // ◀
    "leverage_allowed": true,            // ◀
    "allowed_actions": ["DCA", "LONG_SHORT_CONFIRMED"],
    "blocked_actions": ["ALL_IN", "LEVERAGE_GT_2X"]
  },
  "tactical_state": "LEAN BULL",        // ◀
  "market_regime": "TREND",
  "policy_level": 4,
  "binding_constraint": {
    "source": "MACRO",                   // ◀
    "reason_codes": ["MACRO_NEUTRAL", "COUPLING_NORMAL"]
  },
  "risk_flags": {
    "structural_blockers": [],
    "context_risks": ["HIGH_COUPLING", "TREND_NOT_CONFIRMED"]
  }
}

Add risk governance to your spot trading workflow.

One POST request. Deterministic policy. No ML to train, no rules to write.

Frequently asked questions.

RiskState computes a max_size_fraction (0 to 1) from 4 independent risk caps: rules (30+ signal composite), DeFi health (LTV and health factor), macro regime (yields, DXY, Fed liquidity), and cycle phase (MVRV, halving distance, drawdown). The lowest cap wins. Multiply max_size_fraction by your portfolio to get the maximum dollar amount for a spot entry.

No. RiskState tells you how much you’re allowed to risk, not what to trade. You bring your own signal — technical analysis, on-chain alerts, AI agent, or manual conviction. RiskState adds the missing governance: if you decide to buy, it tells you the maximum position size, whether leverage is permitted, and which actions are blocked.

Yes. BTC and ETH have independent scoring pipelines. BTC uses MVRV, NUPL, halving cycle, and BTC/SPX correlation. ETH uses a structural score (staking ratio, supply dynamics, ETH/BTC strength, network fundamentals), ETH/NASDAQ correlation, and altseason detection. Pass asset: ‘BTC’ or asset: ‘ETH’ to get asset-specific risk permissions.

For active spot trading, poll every 5 minutes. The API caches responses for 60 seconds, so more frequent calls return the same data. For swing or position trading, checking once per hour or before each new entry is sufficient. Risk permissions update automatically as market conditions change.

The policy level drops automatically. In PANIC regime, max_size_fraction drops below 15% and most actions are blocked — only reduce and hedge are allowed. As conditions improve (composite rises, volatility normalizes, macro stabilizes), permissions widen gradually through DEFENSIVE, CAUTIOUS, SELECTIVE, and EXPANSION levels.

Request early access.

Free during beta. API key delivered instantly.

v1.1 live · deterministic · verifiable outputs

Back to Home