Keystone Neutral Fund

Basis and funding carry — stable and sideways markets

Market-neutral relative value fund. Runs either the standard basis trade (long jitoSOL spot + short SOL-PERP) when funding is positive, or the reverse basis trade (long SOL-PERP + short jitoSOL spot) when funding is negative. USDC sits idle when funding is near-zero and below the deployment threshold. The fund always has an active position when spreads are wide enough to justify the risk.

Zero net SOL exposure in all three states. A 50% SOL move produces equal and opposite effects on the two legs regardless of which direction the trade is running.

Yield estimates are not guaranteed. Actual returns depend on funding rate conditions, staking reward rates, and (when reverse basis is live) Kamino KLend borrow rates and fees.

Protocol roles (Neutral only)

Protocol
What it does here

Jupiter Perps

SOL-PERP: short in standard basis, long in reverse basis (PERPHjGBqRHArX4DySjwM6UJHiR3sWAatqfdBS2qQJu).

Jupiter V6

Spot swaps (e.g. USDC ↔ jitoSOL) around deploys and unwinds.

Kamino KLend

Reverse basis only: borrow jitoSOL against USDC collateral in a Kamino obligation (enable_reverse_basis once, then deploy_reverse / close_reverse). Not used in standard basis or for Marginfi-style parking. Program: KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD.

Marginfi

Optional idle USDC lending / parking paths --- separate integration from Kamino borrow.

Pyth

Oracle inputs for sizing and risk checks.


The Two Trade Structures

Standard Basis — when funding is positive (perp at premium to spot):

Long:   500 jitoSOL @ $200 = $100,000  →  ~5.8% APY staking
Short:  500 SOL-PERP @ $200 = $100,000 →  ~5–15% APY funding received

Longs pay shorts every funding period. Fund collects.
Net SOL delta: zero.

Reverse Basis — when funding is negative (perp at discount to spot):

Both structures are delta-neutral. The fund earns funding regardless of which direction it flows.


Automated Position Management

Three states. All transitions are permissionless.

The fund cycles between states autonomously. No admin intervention required.


Protective Controls

Automatically closes the active position if share price falls more than a configurable number of basis points from its all-time high. Configured via nav_drawdown_guard_bps (e.g., 500 = 5% maximum drawdown). Default: disabled (0).

Consecutive Period Gate

Blocks deployment until at least min_positive_periods_to_deploy consecutive snapshots confirm the target direction. Prevents entering a trade into an ambiguous or reversing funding environment. Default: 2 periods required.

Funding Rate Floor

Blocks deploy_capital when the most recent snapshot is below min_funding_rate_to_deploy. Acts as an absolute minimum — spread must be wide enough to justify execution costs. Default: disabled (0).

jitoSOL Parking Mode

When the funding floor blocks deployment, idle capital earns nothing by default. jitoSOL parking mode fixes this: instead of sitting in USDC, the fund swaps idle capital to jitoSOL and earns staking yield (~5–8% APY) while waiting for carry conditions to recover.

How it works:

  • Admin sets swap_to_jitosol_when_parking = true via update_fund_params

  • When the gate blocks redeployment, the keeper calls park_in_jitosol (permissionless when the flag is set)

  • Fund swaps USDC → jitoSOL via Jupiter — capital earns staking yield

  • When the funding gate eventually passes, deploy_capital is called with jupiter_account_count = 0 — jitoSOL is already in the fund, skipping the intermediate swap; USDC portion opens the Jupiter Perps short

This eliminates the zero-yield months that historically dragged Sharpe ratio the most. The fund is always earning something.


Risk Management

Volatility-Adjusted Position Sizing

Position size scales with realized volatility at deployment:

Realized Volatility
Position Size (% of Base)

< 2%

150%

2–6%

100%

6–12%

75%

> 12%

50%

Health Factor Monitoring

The fund monitors the Jupiter Perps position health continuously:

Health Factor
Action

> 1.5

Normal operation

1.2–1.5

Reduce position size

< 1.2

Auto-deleverage

Key Risks

Risk
Mitigation

Sustained negative funding (standard basis)

Automated close → reverse basis

Borrow cost exceeds funding (reverse basis)

Reverse basis only deployed when spread covers Kamino borrow rate

NAV drawdown

NAV drawdown guard (configurable)

Liquidation

1x effective leverage + continuous health monitoring

jitoSOL depeg

Circuit breaker on deviation > 2% from fair value

Jupiter Perps smart contract risk

Audited protocol; validate via program ID PERPHjGBqRHArX4DySjwM6UJHiR3sWAatqfdBS2qQJu


Permissionless Operations

All fund operations are callable by any wallet. The keeper bot executes them automatically.

Instruction
Trigger Condition
Action

deploy_capital

Idle USDC ≥ 1,000 + funding above gate

Split USDC: collateral portion → Jupiter Perps short; remainder → jitoSOL for staking yield

park_in_jitosol

Funding gate blocking + swap_to_jitosol_when_parking = true

Swap idle USDC → jitoSOL for staking yield while waiting

deploy_reverse

Idle USDC ≥ 1,000 + N consecutive negative periods

Borrow jitoSOL from Kamino + sell for USDC collateral → open SOL-PERP long on Jupiter Perps

settle_funding

Every 4 hours

Read Jupiter Perps position account, compute carry delta, update NAV and high-water mark

adjust_position

Hedge ratio drifts from target

Rebalance short size on Jupiter Perps

emergency_close_position

Negative funding threshold met, or NAV drawdown guard triggered

Close short on Jupiter Perps; USDC returned to fund; swap jitoSOL to USDC

close_reverse

Funding recovers or near-zero

Close long + repay Kamino borrow

unwind_position

Pending withdrawals > 0

Close active position + swap to USDC

claim_withdrawal

After unwind

Transfer USDC to user, close pending withdrawal PDA


Deposits

Deposits into the Neutral fund arrive as USDC via Keystone Core. On deployment the fund splits USDC: a portion (controlled by collateral_bps) goes to Jupiter Perps as short collateral, and the remainder is swapped to jitoSOL via Jupiter for staking yield.

Asset
What happens

USDC

Deployed to jitoSOL (standard basis) or held idle (reverse basis / idle mode)

Direct deposits to this fund are not supported. All deposits route through Keystone Core, which handles any LST or SOL conversion to USDC before routing here.


Parameters

Parameter
Default
Description

Settle interval

4 hours

Minimum time between settle_funding calls

Min deploy amount

1,000 USDC

Idle USDC threshold for deployment

Max slippage

1%

Maximum swap slippage

Min health factor

1.2x

Auto-deleverage trigger

Target health factor

1.5x

Target Jupiter Perps position health

Max position

90% of NAV

Maximum deployed allocation

Negative funding threshold

-50

Per-period trigger for position close

Max negative periods

2

Consecutive negative periods before close

Auto-close on negative funding

true

Enable automated emergency close

Max funding loss per period

30 bps

Single-period loss trigger for immediate close

NAV drawdown guard

0 (disabled)

Basis points from peak share price to trigger close

Min funding rate to deploy

0 (disabled)

Minimum rate required for deployment

Min positive periods to deploy

2

Consecutive positive periods required before deploying

Swap to jitoSOL when parking

false

Enable permissionless jitoSOL parking mode (earns staking yield when gate is blocking)

Volatility Sizing Parameters

Parameter
Default

Low vol threshold

2%

High vol threshold

6%

Size multiplier: low vol

150%

Size multiplier: normal

100%

Size multiplier: high vol

75%

Size multiplier: extreme

50%


Fees: 0.5% management + 20% performance (above high-water mark). Details →

Last updated