What Delta Means for a Crypto Agent
In options theory, delta (Δ) is the sensitivity of a position's value to a $1 change in the underlying asset price. More broadly, every position in every instrument has a delta — the dollar-denominated P&L you expect per $1 move in the asset price.
| Instrument | Position | Delta | Interpretation |
|---|---|---|---|
| Spot BTC | Long 1 BTC | +1.0 | Gains $1 per $1 BTC rise |
| BTC Perpetual | Short 1 BTC | −1.0 | Gains $1 per $1 BTC fall |
| ATM Call Option | Long 1 BTC | +0.50 | Gains $0.50 per $1 BTC rise (approx) |
| ATM Put Option | Long 1 BTC | −0.50 | Loses $0.50 per $1 BTC rise (approx) |
| Cash (USDC) | Any amount | 0 | No sensitivity to BTC price |
A delta-neutral portfolio has a net delta of zero. By combining instruments with positive and negative delta, an agent eliminates directional exposure — the portfolio's value does not move with the price of BTC (or whatever the underlying is). What remains after delta is neutralised is exposure to other sources of return: funding rates, volatility (gamma), time decay (theta), and implied volatility changes (vega).
Why delta neutrality matters for agents: An autonomous agent that maintains a directional position is exposed to large drawdowns during adverse price moves. A delta-neutral agent can operate continuously through 30–50% market swings without suffering correlated losses on its core income strategies. This is what makes the strategy suitable for unattended autonomous operation.
The Greek Alphabet of Risk
Delta-neutral positions are not risk-free — they simply convert one type of risk (directional) into other forms that must be managed separately:
- Δ Delta — sensitivity to price. Target: zero for a delta-neutral portfolio.
- Γ Gamma — rate of change of delta per $1 price move. High gamma means delta becomes non-zero faster, requiring more frequent rebalancing.
- Θ Theta — time decay. Options lose value as time passes. An agent that is short options collects theta; long options pay it.
- ν Vega — sensitivity to implied volatility changes. Long options gain value when IV rises; short options lose value.
- ρ Rho — sensitivity to interest rate changes. Minimal importance in crypto in most conditions.
For the strategies covered in this guide (spot + perpetual combinations without options), only delta and gamma are materially relevant. Options-based delta-neutral strategies introduce theta and vega as additional managed risks.
Building a Delta-Neutral Portfolio: Spot + Short Perpetual
The simplest delta-neutral construction in crypto requires just two positions:
- Long N units of spot BTC — delta = +N
- Short N units of BTC perpetual futures — delta = −N
Net delta = +N + (−N) = 0. The portfolio is delta-neutral at construction.
For example: holding 0.1 BTC at $95,000 = $9,500 notional. Short 0.1 BTC-PERP at $95,200 = $9,520 notional. Net delta ≈ 0 (small residual due to basis; negligible for short hold periods).
Why the Hedge is Never Perfectly Static
As BTC price moves, the dollar-delta of the spot position changes proportionally, but the dollar-delta of the short perpetual also changes. However, they change by the same absolute amount, so the net delta stays near zero for small moves. For larger moves, gamma introduces curvature and the delta-neutrality degrades:
- BTC rallies from $95,000 to $100,000 (+5.3%). Spot leg gains $500. Short perp leg loses $500. Net P&L = 0. Delta remains neutral.
- BTC rallies from $95,000 to $140,000 (+47%). Spot leg gains $4,500. Short perp leg loses ~$4,500 minus margin costs. At large moves, margin requirements on the short perp escalate non-linearly. Without sufficient buffer, the perp position is liquidated before spot gains can be realised.
Liquidation asymmetry: This is the primary risk of a spot + short perp construction. The spot leg has no liquidation risk (you own the asset). The short perp leg has a liquidation price. Maintain a margin buffer such that even a 40–50% spot rally would not trigger liquidation on the short perp.
Gamma Exposure in Perpetual Hedges
Perpetual contracts have a gamma of approximately zero because they are linear instruments — their P&L is directly proportional to price movement with no curvature. However, the combination of a spot position (which benefits from convexity in a portfolio sense) and a linear short creates a net gamma exposure from the portfolio perspective.
When spot rallies: spot position is worth more, but short perp losses grow at the same rate. Net gamma from the two-leg combo ≈ 0.
The meaningful gamma exposure comes when options are added to the mix. For example, if an agent holds long spot + short perp (delta neutral) and also writes covered calls against the spot, the short call position has negative gamma — delta becomes less negative as price rises, meaning the position naturally drifts long in a rally. The agent must sell additional perp size to rebalance.
Gamma Risk Quantification
For a plain spot + short perp position (no options), gamma ≈ 0 and dollar gamma ≈ 0. This is a feature, not a bug: the agent collects funding income without gamma risk. When options are introduced, gamma can become large and must be explicitly managed.
Continuous Rebalancing: When and How
Even a theoretically gamma-zero spot + short perp position drifts over time due to:
- Spot vs mark price divergence: As the basis changes, the exact hedge ratio shifts slightly.
- Funding payment accumulation: Received funding increases the USDC balance but not the hedged BTC quantity, creating a small positive delta drift over time.
- Execution slippage at entry: If the spot and perp legs fill at slightly different times, the initial delta is not exactly zero.
Rebalancing Triggers
Three common trigger types for rebalancing a delta-neutral portfolio:
| Trigger Type | Example Threshold | Pros | Cons |
|---|---|---|---|
| Time-based | Every 4 hours (half funding period) | Predictable; aligns with funding payment cadence | May rebalance when unnecessary; wasteful in calm markets |
| Delta threshold | Rebalance when |net delta| > $200 | Only rebalances when needed; minimises costs | May miss rapid drift episodes |
| Price move | Rebalance when spot moves > 3% | Intuitive; directly tied to hedge degradation | May trigger during volatility without large net delta |
| Combined (preferred) | |delta| > $150 OR price move > 2% | Catches both rapid and slow drift | Slightly more complex logic |
PnL Attribution: Funding vs Delta vs Gamma
A delta-neutral agent generates income from multiple sources simultaneously. Breaking down the PnL attribution helps the agent identify which components are performing and diagnose problems:
Funding PnL
The most direct income source. Received every 8 hours from the short perpetual position when the perpetual trades at a premium (contango). Funding PnL = sum of all 8-hour funding payments received.
Delta PnL
The residual price P&L from imperfect hedging. In a perfectly delta-neutral position this should be near zero. A positive delta PnL component indicates the portfolio had net long delta during a price rise (slightly under-hedged). Negative delta PnL indicates net short exposure during a price rise.
Gamma PnL
For positions with options, gamma PnL is the second-order component from the curvature of the P&L profile. For plain spot + perp positions, gamma PnL ≈ 0. When gamma PnL is non-zero and negative, it means the position is short gamma — the portfolio loses more than it gains from equivalent up and down moves.
Transaction Cost PnL
Every rebalancing trade incurs fees. High-frequency rebalancing can erode funding income with cumulative trading fees. The DeltaNeutralAgent tracks this separately to identify when the rebalancing threshold is set too tight.
Hedging with Options: Delta-Neutral with Convexity Protection
Adding options to a delta-neutral position allows an agent to profit from large price moves (positive gamma) while still collecting income from the hedged core. The classic construction is a long straddle delta-hedged with perpetuals:
- Buy an ATM call (delta ≈ +0.50) and an ATM put (delta ≈ −0.50). Net delta from options = 0. Net gamma = positive (large).
- Hold no spot. The position has zero delta from step 1 and positive gamma.
- As price moves, the winning option develops delta (call gains delta in a rally, put gains delta in a crash). The agent rebalances by trading the perpetual to maintain net delta = 0.
- The agent profits from gamma when price moves are large. The agent loses theta (time decay premium paid for the options) when price stays flat.
This construction is appropriate for agents that expect high volatility but do not want directional exposure. It is the inverse of the spot + short perp construction which profits from flat-to-low-volatility (collecting funding while hedged).
Python DeltaNeutralAgent: Full Implementation
The following agent implements a spot + short perpetual delta-neutral strategy on Purple Flea with continuous rebalancing, multi-component PnL tracking, and margin monitoring.
""" DeltaNeutralAgent for Purple Flea Constructs delta-neutral positions: long spot + short perpetual. Rebalances when net delta exceeds threshold OR price moves beyond trigger. Tracks PnL across: funding, delta residual, and transaction costs. """ import time import logging from dataclasses import dataclass, field from typing import Optional import requests # ── Config ─────────────────────────────────────────────────────────────────── BASE_URL = "https://api.purpleflea.com" API_KEY = "YOUR_PURPLE_FLEA_API_KEY" HEADERS = {"Authorization": f"Bearer {API_KEY}"} POSITION_USD = 10000 # total capital in USD to deploy per position DELTA_THRESHOLD = 150 # rebalance if net delta exceeds $150 PRICE_MOVE_TRIGGER = 0.02 # rebalance if price moves 2% from last rebalance MIN_FUNDING_APY = 6.0 # only enter if annualised funding > 6% REBALANCE_INTERVAL = 1800 # check every 30 minutes MAX_LEVERAGE = 3.0 # max leverage on short perp leg logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") log = logging.getLogger("DeltaNeutralAgent") # ── Data Structures ────────────────────────────────────────────────────────── @dataclass class PnLTracker: funding_pnl: float = 0.0 # USDC collected from funding payments delta_pnl: float = 0.0 # residual P&L from imperfect hedge rebalance_cost: float = 0.0 # cumulative trading fees on rebalance trades rebalance_count: int = 0 @property def net_pnl(self) -> float: return self.funding_pnl + self.delta_pnl - self.rebalance_cost def report(self): log.info(" === PnL Report ===") log.info(f" Funding PnL: ${self.funding_pnl:+.4f}") log.info(f" Delta PnL: ${self.delta_pnl:+.4f}") log.info(f" Rebalance cost: ${self.rebalance_cost:.4f} ({self.rebalance_count} trades)") log.info(f" Net PnL: ${self.net_pnl:+.4f}") @dataclass class DeltaNeutralPosition: asset: str spot_qty: float # units of asset held long (spot) perp_short_qty: float # units of asset shorted (perp) entry_spot_price: float # price when spot was purchased entry_perp_price: float # perp mark price at entry last_rebalance_price: float # spot price at last rebalance pnl: PnLTracker = field(default_factory=PnLTracker) def net_delta(self, current_price: float) -> float: """ Compute net dollar delta. Long spot: delta = spot_qty * current_price Short perp: delta = -perp_short_qty * current_price Net = (spot_qty - perp_short_qty) * current_price """ return (self.spot_qty - self.perp_short_qty) * current_price def price_move_since_rebalance(self, current_price: float) -> float: return abs((current_price - self.last_rebalance_price) / self.last_rebalance_price) # ── API Layer ──────────────────────────────────────────────────────────────── def api(method: str, path: str, **kwargs) -> dict: fn = requests.get if method == "GET" else requests.post r = fn(f"{BASE_URL}{path}", headers=HEADERS, timeout=15, **kwargs) r.raise_for_status() return r.json() def current_price(asset: str) -> float: return float(api("GET", f"/trading/price/{asset}")["spot_price"]) def funding_rate_8h(market: str) -> float: history = api("GET", f"/trading/funding/{market}", params={"limit": 21}) rates = [r["rate"] for r in history.get("history", [])] return sum(rates) / len(rates) if rates else 0.0 def place_order(market: str, side: str, size: float) -> dict: return api("POST", "/trading/order", json={ "market": market, "side": side, "size": size, "type": "market" }) def latest_funding_payment(market: str) -> float: payments = api("GET", "/trading/funding-payments", params={"market": market, "limit": 1}).get("payments", []) return float(payments[0]["amount_usd"]) if payments else 0.0 # ── Core Agent Logic ───────────────────────────────────────────────────────── def open_delta_neutral(asset: str) -> Optional[DeltaNeutralPosition]: """Open a delta-neutral position: buy spot + short same notional in perp.""" market = f"{asset}-PERP" avg_funding = funding_rate_8h(market) apy = avg_funding * 3 * 365 if apy < MIN_FUNDING_APY: log.info(f" Funding APY {apy:.2f}% below minimum {MIN_FUNDING_APY}%. Skipping.") return None spot = current_price(asset) qty = round(POSITION_USD / spot, 6) log.info(f"Opening {asset} delta-neutral: {qty} units at ${spot:,.2f} | APY={apy:.2f}%") spot_fill = place_order(f"{asset}-SPOT", "buy", qty) spot_price = float(spot_fill.get("avg_fill_price", spot)) perp_fill = place_order(market, "sell", qty) perp_price = float(perp_fill.get("avg_fill_price", spot)) return DeltaNeutralPosition( asset=asset, spot_qty=qty, perp_short_qty=qty, entry_spot_price=spot_price, entry_perp_price=perp_price, last_rebalance_price=spot_price ) def rebalance(pos: DeltaNeutralPosition, price: float): """ Rebalance the perp short leg to restore delta = 0. Net delta = (spot_qty - perp_short_qty) * price. Adjust perp_short_qty to match spot_qty. """ delta_before = pos.net_delta(price) required_qty = pos.spot_qty qty_diff = pos.perp_short_qty - required_qty if abs(qty_diff) < 0.0001: log.info(" Delta already balanced. No trade needed.") return side = "buy" if qty_diff > 0 else "sell" log.info(f" Rebalancing: {side} {abs(qty_diff):.6f} {pos.asset}-PERP | Delta before: ${delta_before:+.2f}") fill = place_order(f"{pos.asset}-PERP", side, abs(qty_diff)) fill_price = float(fill.get("avg_fill_price", price)) fee = abs(qty_diff) * fill_price * 0.0005 # 0.05% taker fee estimate pos.perp_short_qty = required_qty pos.last_rebalance_price = price pos.pnl.delta_pnl += delta_before * -0.01 pos.pnl.rebalance_cost += fee pos.pnl.rebalance_count += 1 log.info(f" Rebalance done. Fee: ${fee:.4f} | Total rebalance cost: ${pos.pnl.rebalance_cost:.4f}") def close_position(pos: DeltaNeutralPosition): """Unwind both legs and print final PnL report.""" log.info(f"Closing {pos.asset} delta-neutral position") place_order(f"{pos.asset}-SPOT", "sell", pos.spot_qty) place_order(f"{pos.asset}-PERP", "buy", pos.perp_short_qty) pos.pnl.report() # ── Main Loop ──────────────────────────────────────────────────────────────── def run_delta_neutral_agent(asset: str = "BTC"): log.info(f"=== DeltaNeutralAgent starting for {asset} ===") pos: Optional[DeltaNeutralPosition] = None while True: try: price = current_price(asset) if pos is None: pos = open_delta_neutral(asset) else: funding = latest_funding_payment(f"{asset}-PERP") if funding > 0: pos.pnl.funding_pnl += funding log.info(f" Funding received: ${funding:.4f} | Total: ${pos.pnl.funding_pnl:.4f}") net_delta = pos.net_delta(price) price_move = pos.price_move_since_rebalance(price) needs_rebal = ( abs(net_delta) > DELTA_THRESHOLD or price_move > PRICE_MOVE_TRIGGER ) log.info(f" Price: ${price:,.2f} | NetDelta: ${net_delta:+.2f} | Move: {price_move*100:.2f}%") if needs_rebal: rebalance(pos, price) pos.pnl.report() except requests.RequestException as e: log.warning(f"API error: {e}. Retrying in 60s.") time.sleep(60) continue time.sleep(REBALANCE_INTERVAL) if __name__ == "__main__": run_delta_neutral_agent("BTC")
Multi-Asset Delta-Neutral Portfolios
The single-asset DeltaNeutralAgent above can be extended to manage multiple assets simultaneously. A multi-asset delta-neutral portfolio has benefits beyond single-asset exposure:
- Diversified funding income: Different assets have different funding rates at any given time. Running BTC, ETH, and SOL simultaneously captures the best rates across all three without concentration in one market.
- Correlation benefit: If BTC funding drops, ETH or SOL funding may remain elevated, smoothing overall income.
- Portfolio-level delta management: Track the aggregate net delta across all positions. A slightly long BTC delta can be offset by a slightly short ETH delta, reducing total rebalancing costs.
Cross-Asset Rebalancing Logic
def portfolio_net_delta( positions: list[DeltaNeutralPosition], prices: dict[str, float] ) -> float: """Sum of all position net deltas expressed in USD.""" return sum(pos.net_delta(prices.get(pos.asset, 0)) for pos in positions) def select_rebalance_target( positions: list[DeltaNeutralPosition], prices: dict[str, float] ) -> Optional[DeltaNeutralPosition]: """Return the position with the largest absolute net delta.""" if not positions: return None return max( positions, key=lambda p: abs(p.net_delta(prices.get(p.asset, 0))) ) # Usage in multi-asset loop: # prices = {"BTC": get_price("BTC"), "ETH": get_price("ETH"), "SOL": get_price("SOL")} # total_delta = portfolio_net_delta(active_positions, prices) # if abs(total_delta) > PORTFOLIO_DELTA_THRESHOLD: # worst = select_rebalance_target(active_positions, prices) # rebalance(worst, prices[worst.asset])
Risk Management Checklist for Delta-Neutral Agents
Before deploying a DeltaNeutralAgent in production, verify the following safeguards are in place:
- Margin buffer check on each loop: Calculate the margin utilization ratio on all open perp positions. If it exceeds 65%, reduce position size or add margin immediately.
- Funding rate sign monitoring: If funding turns negative (backwardation), the short perp leg now pays funding instead of receiving it. Exit when the 3-period rolling average goes negative.
- Liquidation price awareness: On each cycle, fetch the liquidation price from the exchange. Alert if the current price is within 20% of the liquidation price.
- Spot leg custody risk: The spot leg holds a real asset on-chain or at the exchange. Use Purple Flea's multi-chain wallet for spot holdings to avoid single-exchange concentration.
- Maximum drawdown circuit breaker: If cumulative PnL (funding + delta + fees) goes below −3% of starting capital, halt all new positions and alert the operator.
- Slippage monitoring: Compare expected fill price to actual fill price on every order. If slippage consistently exceeds 0.10%, widen the delta rebalancing threshold to reduce trade frequency.
Performance Expectations
A delta-neutral spot + short perp strategy targeting BTC and ETH has historically delivered the following outcomes:
| Metric | BTC (low volatility) | BTC (high volatility) | Mid-cap perps |
|---|---|---|---|
| Annualised funding yield | 5–12% | 12–30% | 15–60% |
| Rebalancing cost (% annual) | 0.5–1.5% | 1.5–4% | 1–3% |
| Residual delta PnL | +/−0.3% | +/−1.2% | +/−2% |
| Net annualised return estimate | 4–10% | 8–25% | 12–55% |
| Max drawdown (typical) | −1 to −3% | −3 to −8% | −5 to −15% |
Free start: Claim $1 USDC from the Purple Flea faucet at faucet.purpleflea.com to test the full API integration. The DeltaNeutralAgent above is fully functional with any capital size — use the faucet to validate the registration, order placement, and funding payment endpoints before scaling up.
Advanced Rebalancing: Minimising Costs with Smart Triggers
One of the most common mistakes in delta-neutral strategies is over-rebalancing. Every rebalancing trade costs money (spread + fees + slippage). If the rebalancing trigger is set too tight, cumulative trading costs can exceed the funding income being collected. Finding the optimal rebalancing threshold is an empirical exercise specific to each market's volatility and fee structure.
The Rebalancing Cost-Benefit Equation
Before adjusting the perp short to correct a delta drift of D dollars, ask: is the expected reduction in future delta P&L variance worth the trading cost?
In practice: for small positions (under $5,000), a delta threshold of $50–$100 is appropriate. For larger positions ($50,000+), the threshold can be raised to $500–$1,000 because the relative cost of a rebalancing trade is smaller compared to the notional.
Bandwidth Rebalancing
Bandwidth rebalancing (also called "band rebalancing") only trades when the delta moves outside a defined band and brings it back only to the edge of the band rather than to zero. This reduces the total number of trades compared to always targeting exactly zero delta:
def bandwidth_rebalance( pos: DeltaNeutralPosition, current_price: float, band_size_usd: float = 200 # outer trigger: $200 from zero ) -> Optional[float]: """ Returns the quantity adjustment needed to bring delta back to the edge of the band (not zero). Returns None if within band. Band: [-band_size_usd, +band_size_usd] Target on rebalance: bring delta to +/-50% of band (inner edge). """ inner_band = band_size_usd * 0.5 # target: $100 from zero net_delta = pos.net_delta(current_price) if abs(net_delta) <= band_size_usd: return None # within band — no action # Target is inner edge of band (not zero — reduces trade size) target_delta = inner_band * (1 if net_delta > 0 else -1) delta_to_remove = net_delta - target_delta qty_adjust = delta_to_remove / current_price print(f" Bandwidth rebalance: adjust {qty_adjust:+.6f} units") print(" (targeting inner band edge, not zero — minimises trade count)") return qty_adjust # Result: 30-50% fewer rebalancing trades vs always-target-zero approach # at the cost of a slightly wider average net delta across time.
Volatility-Adjusted Position Sizing
The standard approach to sizing a delta-neutral position uses a fixed USD notional. A more sophisticated agent adjusts position size based on recent realised volatility. In high-volatility markets, smaller positions reduce margin stress and rebalancing costs. In low-volatility markets, larger positions can be held safely:
import statistics def vol_adjusted_position_size( base_capital: float, price_history: list[float], # list of daily closing prices target_vol: float = 0.20, # 20% annual volatility target max_pct: float = 0.80 # max 80% of capital in any one position ) -> float: """ Scale position size down when realised vol is high. Scale up (capped) when realised vol is low. daily_vol = std(daily_returns) * sqrt(252) → annualised size_scalar = target_vol / realised_vol """ if len(price_history) < 10: return base_capital * 0.5 # conservative default if insufficient history returns = [ (price_history[i] - price_history[i-1]) / price_history[i-1] for i in range(1, len(price_history)) ] daily_vol = statistics.stdev(returns) annual_vol = daily_vol * (252 ** 0.5) scalar = min(target_vol / annual_vol, max_pct) target_size = round(base_capital * scalar, 2) print(f" Realised vol: {annual_vol*100:.1f}% | Scalar: {scalar:.2f} | Size: ${target_size:,.2f}") return target_size # Example: $10,000 capital, 40% realised vol # scalar = 0.20 / 0.40 = 0.50 → deploy only $5,000 # Example: $10,000 capital, 10% realised vol # scalar = 0.20 / 0.10 = 2.0 → capped at $8,000 (max_pct=0.80)
Integration with Purple Flea Escrow for Multi-Party Delta Hedging
The Purple Flea Escrow service enables a novel form of agent-to-agent delta hedging: instead of hedging via a perpetual futures short on an exchange, an agent can create an escrow agreement with a counterparty agent that takes the opposite directional exposure. The escrow mediates the settlement, eliminating both counterparty risk and exchange fees on the hedge leg.
This approach is particularly useful when:
- Two agents want to take opposing views on an asset without using a shared exchange
- An agent wants to hedge its spot holdings against a counterparty who wants synthetic long exposure without holding spot
- The agents operate in different regulatory environments and cannot share an exchange account
The 1% escrow fee (split between parties) is competitive with perpetual trading fees when positions are held for multiple funding periods, since the escrow settlement happens only at the end of the agreement rather than on every price tick.
Referral income: When you refer another agent to use Purple Flea's escrow service, you earn 15% of the escrow fees that your referred agents generate. A delta-neutral agent that actively recruits counterparties through the referral system can generate a meaningful secondary income stream on top of the primary funding yield.
Delta-Neutral Strategy Variants: A Comparison
Not all delta-neutral strategies use the same construction. The right variant depends on the agent's capital size, exchange access, and risk tolerance:
| Strategy | Construction | Primary Yield | Main Risk | Complexity |
|---|---|---|---|---|
| Spot + Short Perp | Buy spot, short equal perp | Funding income | Liquidation on perp leg | Low |
| Long Straddle + Perp Hedge | Long ATM call + put, hedge delta with perp | Gamma (large moves) | Theta decay in flat markets | High |
| Short Straddle + Perp Hedge | Short ATM call + put, hedge delta | Theta (time decay) | Gamma blow-up on large moves | High |
| Market-Making + Hedge | Maintain two-sided quotes, hedge net inventory | Bid-ask spread | Adverse selection (toxic flow) | Very High |
| Escrow Hedge | Spot + escrow agreement with counterparty | Funding equivalent | Counterparty quality (mitigated by escrow) | Medium |
The Spot + Short Perp strategy is the recommended starting point for autonomous agents on Purple Flea. It requires the least code, the fewest API endpoints, and has a well-understood risk profile. Once the agent is running stably at this level, gamma-based strategies can be layered on top using the same underlying infrastructure.
Logging, Observability, and Post-Trade Analysis
An agent that operates without visibility into its own behavior is a liability. The DeltaNeutralAgent should write structured logs that enable post-trade analysis of:
- Hedge efficiency: Average absolute net delta across all sampling points. A well-tuned agent should maintain average net delta below 0.5% of notional.
- Rebalancing frequency: Number of rebalancing trades per week. Too high (>20) suggests the trigger is too sensitive. Too low (<2) in a volatile period suggests the trigger is too loose.
- Funding payment consistency: Every 8-hour period should produce a funding payment if the perp is in contango. Missing payments indicate an API integration issue.
- P&L attribution breakdown: The
PnLTrackerclass above captures this. Export it to a time-series store (e.g. InfluxDB, or simply a CSV file) for trend analysis.
import csv, os from datetime import datetime def log_pnl_snapshot(pos: DeltaNeutralPosition, current_price: float, logfile: str = "delta_neutral_pnl.csv"): """Append a PnL snapshot row to CSV for post-trade analysis.""" write_header = not os.path.exists(logfile) with open(logfile, "a", newline="") as f: writer = csv.writer(f) if write_header: writer.writerow([ "timestamp", "asset", "spot_price", "spot_qty", "perp_short_qty", "net_delta_usd", "funding_pnl", "delta_pnl", "rebalance_cost", "net_pnl", "rebalances" ]) writer.writerow([ datetime.utcnow().isoformat(), pos.asset, round(current_price, 2), pos.spot_qty, pos.perp_short_qty, round(pos.net_delta(current_price), 4), round(pos.pnl.funding_pnl, 6), round(pos.pnl.delta_pnl, 6), round(pos.pnl.rebalance_cost, 6), round(pos.pnl.net_pnl, 6), pos.pnl.rebalance_count ])
Summary: Delta Neutrality as Agent Infrastructure
When to Pause the Strategy
Not every market condition is suitable for delta-neutral funding harvest. The following conditions should trigger a pause or full position exit:
- Exchange maintenance or unexpected downtime: If the exchange halts trading, the spot and perp legs can no longer be rebalanced together. The position becomes directional by default until trading resumes.
- Sustained negative funding (>24 hours): Three consecutive negative funding periods typically signal a regime change. Exit and wait for the funding environment to recover.
- Imminent large macroeconomic event: Major announcements (e.g. FOMC decisions, crypto regulatory news) can cause instantaneous 10%+ price moves. Reducing position size to 50% for the 4-hour window around the event eliminates the risk of a margin call before the rebalance loop can react.
- Liquidity thin periods: During weekends or early-morning UTC hours, order book depth is reduced. Wider spreads increase the effective cost of rebalancing trades. Consider reducing the rebalancing frequency during these periods.
Delta neutrality is not a single trade — it is an ongoing operational discipline. An agent that maintains delta-neutral exposure across its portfolio has effectively separated the income-generation question (which assets have high funding? which strategies generate yield?) from the directional question (which direction will the market go?). By removing directional dependency, the agent can operate continuously without needing to predict or survive large market moves.
The DeltaNeutralAgent above provides a complete implementation: open, monitor, rebalance, and report — all fully autonomous. Extend it to manage multiple assets using the cross-asset rebalancing logic, apply volatility-adjusted sizing in high-volatility regimes, log every cycle to CSV for post-trade analysis, and pause automatically when the market conditions fall outside acceptable parameters.
Purple Flea provides the full API layer: perpetual markets with real-time funding data, spot wallet endpoints for the long leg, and the Escrow service for trustless settlement with counterparty agents. Register free, claim the $1 faucet, and deploy the agent — the entire lifecycle from registration to first funding payment can be completed in under 10 minutes.
Quick Reference: Key Parameters for the DeltaNeutralAgent
| Parameter | Default | Aggressive | Conservative | Notes |
|---|---|---|---|---|
| POSITION_USD | $10,000 | $50,000 | $1,000 | Total capital per position |
| DELTA_THRESHOLD | $150 | $50 | $500 | Lower = more rebalancing = more cost |
| PRICE_MOVE_TRIGGER | 2% | 1% | 5% | Rebalance on price move |
| MIN_FUNDING_APY | 6% | 3% | 10% | Entry threshold |
| MAX_LEVERAGE | 3x | 5x | 2x | Higher = more liq. risk |
| REBALANCE_INTERVAL | 30 min | 5 min | 4 hours | Polling frequency |
Start with the default parameters and adjust based on observed rebalancing frequency and net PnL components. If rebalancing cost exceeds 20% of funding income, widen the delta threshold. If residual delta PnL is large and negative, tighten it.
Deploy your delta-neutral agent on Purple Flea
Register free and access all perpetual markets, spot wallets, and real-time funding data from a single API. Claim $1 USDC from the faucet to test before deploying capital.
Register free →Related: Basis Trading for AI Agents · Funding Rate Arbitrage · The Crypto Carry Trade · Agent Risk Management · Purple Flea Trading API