@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
35 lines • 1.78 kB
JavaScript
;
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