UNPKG

@devasher/kuru-sdk

Version:

Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)

35 lines 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateDynamicSlippage = void 0; /** * Calculates optimal slippage tolerance in basis points (BPS) * @param defaultSlippageBps - Default slippage tolerance in BPS (e.g., 50 = 0.5%) * @param tradeSize - Size of the trade * @param priceImpactBps - Price impact in BPS * @param ohlcvData - OHLCV data for the asset * @returns Optimal slippage tolerance in BPS */ function calculateDynamicSlippage(defaultSlippageBps, tradeSize, priceImpactBps, ohlcvData) { const MIN_SLIPPAGE_BPS = 5; const MAX_SLIPPAGE_BPS = 200; // Calculate volatility component const returns = ohlcvData.slice(1).map((data, i) => Math.log(data.close / ohlcvData[i].close)); const volatility = calculateStandardDeviation(returns); // Calculate volume component (trade size relative to average volume) const avgVolume = ohlcvData.reduce((sum, d) => sum + d.volume, 0) / ohlcvData.length; const volumeRatio = tradeSize / avgVolume; // Combine factors: base slippage + volatility adjustment + volume impact + price impact let dynamicSlippage = defaultSlippageBps * (1 + volatility * 2 + // Volatility factor Math.sqrt(volumeRatio) * 0.5 + // Volume impact priceImpactBps / 100); // Direct price impact return Math.min(Math.max(dynamicSlippage, MIN_SLIPPAGE_BPS), MAX_SLIPPAGE_BPS); } exports.calculateDynamicSlippage = calculateDynamicSlippage; function calculateStandardDeviation(values) { const mean = values.reduce((sum, val) => sum + val, 0) / values.length; const variance = values.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / values.length; return Math.sqrt(variance); } //# sourceMappingURL=slippage.js.map