Skip to main content

Overview

This page documents 8 operators (role: BALANCE).

Quick Reference


CashBalance

Query cash balance from STATE. Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

EquityCalculator

Calculate equity based on market type (auto-detected from Input source). Market type is automatically detected from the cash Input source:
  • “STATE:gateio:spot:cash” → market_type=“spot”
  • “STATE:gateio:futures:cash” → market_type=“futures”
SPOT: equity = cash + sum(current_price * qty)
  • Cash is reduced when positions are opened
  • Position value is added to remaining cash
FUTURES: equity = margin + sum((current_price - entry_price) * qty)
  • Margin doesn’t change when positions are opened
  • Unrealized PnL is added to margin
Inputs (4 required):
  1. cash: Cash/margin balance from STATE:venue:cash
  2. positions: Position quantities from STATE:venue:pos_quantity
  3. prices: Current prices from FIELD:close
  4. entry_prices: Entry prices from STATE:venue:pos_entry_price
Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

TotalEquityCalculator

Calculate total equity across multiple venues. Aggregates equity from multiple EquityCalculator inputs to provide a unified portfolio-level equity value. Useful for:
  • Multi-venue strategies (spot + futures)
  • Cross-exchange arbitrage
  • Portfolio-level risk management
Inputs: Multiple EquityCalculator outputs, one per venue. Example:

Calculate equity for each venue separately

spot_equity = EquityCalculator( cash=Input(“STATE:binance:spot:cash”, …), positions=Input(“STATE:binance:spot:pos_quantity”, …), prices=Input(“FIELD:binance:spot:close”, …), entry_prices=Input(“STATE:binance:spot:pos_entry_price”, …), symbols=spot_symbols, ) futures_equity = EquityCalculator( cash=Input(“STATE:binance:futures:cash”, …), positions=Input(“STATE:binance:futures:pos_quantity”, …), prices=Input(“FIELD:binance:futures:close”, …), entry_prices=Input(“STATE:binance:futures:pos_entry_price”, …), symbols=futures_symbols, )

Aggregate into total equity

total_equity = TotalEquityCalculator( equity_inputs=[ Input(“spot_equity”, timeframe=“1m”, lookback=1), Input(“futures_equity”, timeframe=“1m”, lookback=1), ] ) Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

AvailableMargin

Query available margin from STATE. Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

PositionQuantity

Query position quantities from STATE. Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

PositionValue

Query position notional values from STATE. Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

BookSize

Compute book size from balance inputs. Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/balance/query.py

MarginCalculator

Calculate margin status for futures positions. Uses exchange-specific margin configuration from venues.py for accurate margin ratio calculation and liquidation detection. Supports two MMR modes:
  1. Dynamic (default): Per-symbol MMR from CCXT fetch_leverage_tiers()
  2. Static (use_dynamic_tiers=False): Flat MMR from venues.py MarginConfig
Dynamic mode (default) uses LeverageTierResolver which:
  • Fetches real-time tier data for supported exchanges (Gateio, Bybit, Kraken, Binance, Hyperliquid)
  • Falls back to static MarginConfig for unsupported exchanges (Coinbase, Gemini)
  • Caches tier data for 1 hour to minimize API calls
Exchange-specific formulas:
  • Binance/OKX (inverted): margin_ratio = MMR / equity * 100 (liquidation >= 100%)
  • Bybit/Gateio/Kraken (normal): margin_ratio = equity / MMR (liquidation < threshold)
The calculator also accounts for:
  • Exchange-specific default MMR (maintenance margin rate)
  • Liquidation fees (deducted from equity before ratio calculation)
  • Exchange-specific liquidation thresholds (1.0 or 1.5)
Inputs (4 required):
  1. cash: Cash balance from STATE:venue:cash
  2. positions: Position quantities from STATE:venue:pos_quantity
  3. prices: Current prices from FIELD:close
  4. entry_prices: Entry prices from STATE:venue:pos_entry_price
Output TaggedArray value contains margin_ratio:
  • For inverted exchanges: 0-100+ (100 = liquidation threshold)
  • For normal exchanges: 0-inf (threshold varies by exchange)
Role: BALANCE | Ephemeral: No

Parameters

Usage

Source Code

Full compute() implementation — no hidden logic.
Source: apps/trading/operators/futures.py

Operator Protocol

How operators implement the compute() interface

StatefulGraph

How operators compose into a DAG