Position Management

Position management in DPerp handles the creation, modification, and closure of leveraged trading positions. The system tracks position state, calculates P&L, and manages collateral requirements.

Position Structure

Core Position Data

struct Position {
    uint256 size;              // Position size in USD
    uint256 collateral;        // Collateral deposited
    uint256 entryPrice;        // Average entry price
    uint256 entryFundingRate;  // Funding rate at entry
    uint256 reserveAmount;     // Reserved liquidity tokens
    int256 realisedPnl;        // Cumulative realized P&L
    uint256 lastIncreasedTime; // Last position increase
    bool isLong;               // Long or short position
}

Position Identification

Positions are uniquely identified by:

function getPositionKey(address account, bytes32 assetId, bool isLong) 
    returns (bytes32) {
    return keccak256(abi.encodePacked(account, assetId, isLong));
}

Opening Positions

Increase Position

Position Creation Logic

Modifying Positions

Adding Collateral

Increasing Size

Entry Price Calculation

When increasing positions, entry price is recalculated:

Closing Positions

Partial Close

Full Close

Close Logic

P&L Calculations

Unrealized P&L

Realized P&L Tracking

Position Monitoring

Position Health

Liquidation Price Calculation

Position Limits

Size Validation

Global Limits

Integration Examples

Position Management Hook

Position Display Component

Risk Management

Position Validation

  • Minimum collateral requirements

  • Maximum leverage enforcement

  • Position size limits

  • Global exposure caps

Monitoring Systems

  • Real-time P&L tracking

  • Liquidation risk alerts

  • Funding fee calculations

  • Position health scoring

Last updated