From b77c6aafa08a60321433176876718050eec8fc14 Mon Sep 17 00:00:00 2001 From: Nick Caradonna Date: Wed, 15 Oct 2025 17:33:22 -0400 Subject: [PATCH] add includeOpenOrders option for perp position health --- sdk/src/user.ts | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/sdk/src/user.ts b/sdk/src/user.ts index a36820306d..92512243fd 100644 --- a/sdk/src/user.ts +++ b/sdk/src/user.ts @@ -3590,11 +3590,13 @@ export class User { perpPosition, oraclePriceData, quoteOraclePriceData, + includeOpenOrders = true, }: { marginCategory: MarginCategory; perpPosition: PerpPosition; oraclePriceData?: OraclePriceData; quoteOraclePriceData?: OraclePriceData; + includeOpenOrders?: boolean; }): HealthComponent { const perpMarket = this.driftClient.getPerpMarketAccount( perpPosition.marketIndex @@ -3603,14 +3605,25 @@ export class User { oraclePriceData || this.driftClient.getOracleDataForPerpMarket(perpMarket.marketIndex); const oraclePrice = _oraclePriceData.price; - const { - worstCaseBaseAssetAmount: worstCaseBaseAmount, - worstCaseLiabilityValue, - } = calculateWorstCasePerpLiabilityValue( - perpPosition, - perpMarket, - oraclePrice - ); + + let worstCaseBaseAmount; + let worstCaseLiabilityValue; + if (includeOpenOrders) { + const worstCaseIncludeOrders = calculateWorstCasePerpLiabilityValue( + perpPosition, + perpMarket, + oraclePrice + ); + worstCaseBaseAmount = worstCaseIncludeOrders.worstCaseBaseAssetAmount; + worstCaseLiabilityValue = worstCaseIncludeOrders.worstCaseLiabilityValue; + } else { + worstCaseBaseAmount = perpPosition.baseAssetAmount; + worstCaseLiabilityValue = calculatePerpLiabilityValue( + perpPosition.baseAssetAmount, + oraclePrice, + isVariant(perpMarket.contractType, 'prediction') + ); + } const userCustomMargin = Math.max( perpPosition.maxMarginRatio,