Slippage estimation, optimization, and protection for trade execution
29
22%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Medium
Suggest reviewing before use
Fix and improve this skill with Tessl
tessl review fix ./src/skills/bundled/slippage/SKILL.mdEstimate, minimize, and protect against slippage across all trading platforms.
/slippage estimate "Trump" YES 5000 Estimate for $5000 order
/slippage BTCUSDT 1.5 BTC Estimate for futures
/slippage ETH 50 --dex uniswap Estimate DEX slippage/slippage depth "Trump" Show orderbook depth
/slippage impact 10000 Price impact for size
/slippage levels "Trump" Show slippage at sizes/slippage optimize "Trump" YES 10000 Find best execution
/slippage split 50000 Optimal order splitting
/slippage timing "Trump" Best times for low slippage/slippage max 1% Set max slippage tolerance
/slippage protect on Enable slippage protection
/slippage revert-threshold 2% Cancel if slippage exceedsimport { createSlippageManager } from 'clodds/slippage';
const slippage = createSlippageManager({
// Default tolerance
defaultMaxSlippage: 0.01, // 1%
// Protection
enableProtection: true,
revertThreshold: 0.02, // Cancel if > 2%
// Data sources
orderbookDepth: 20, // Levels to analyze
refreshInterval: 1000, // ms
});const estimate = await slippage.estimate({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
size: 5000,
});
console.log(`Expected slippage: ${estimate.slippage}%`);
console.log(`Price impact: ${estimate.priceImpact}%`);
console.log(`Effective price: ${estimate.effectivePrice}`);
console.log(`Best price: ${estimate.bestPrice}`);
console.log(`Worst price: ${estimate.worstPrice}`);
console.log(`Confidence: ${estimate.confidence}%`);const depth = await slippage.analyzeDepth({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
});
console.log('Orderbook Depth:');
console.log(` Liquidity at 0.5%: $${depth.liquidityAt05Pct}`);
console.log(` Liquidity at 1%: $${depth.liquidityAt1Pct}`);
console.log(` Liquidity at 2%: $${depth.liquidityAt2Pct}`);
console.log(` Total depth: $${depth.totalDepth}`);
console.log('\nSlippage by Size:');
for (const level of depth.slippageLevels) {
console.log(` $${level.size}: ${level.slippage}% slippage`);
}const impact = await slippage.priceImpact({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
sizes: [1000, 5000, 10000, 25000, 50000],
});
console.log('Price Impact Analysis:');
for (const level of impact.levels) {
console.log(` $${level.size}:`);
console.log(` Slippage: ${level.slippage}%`);
console.log(` Impact: ${level.impact}%`);
console.log(` Effective: ${level.effectivePrice}`);
}const optimized = await slippage.optimize({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
size: 25000,
maxSlippage: 0.01,
});
console.log('Optimized Execution:');
console.log(` Strategy: ${optimized.strategy}`); // 'single' | 'split' | 'twap'
console.log(` Expected slippage: ${optimized.expectedSlippage}%`);
console.log(` vs naive: ${optimized.naiveSlippage}%`);
console.log(` Savings: $${optimized.savings}`);
if (optimized.strategy === 'split') {
console.log('\nOrder Split:');
for (const order of optimized.orders) {
console.log(` ${order.size} @ ${order.limitPrice} (${order.delay}s delay)`);
}
}const split = await slippage.splitOrder({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
totalSize: 50000,
maxSlippagePerOrder: 0.005, // 0.5% max per order
minOrderSize: 1000,
});
console.log(`Split into ${split.orders.length} orders:`);
for (const order of split.orders) {
console.log(` $${order.size} - expected ${order.expectedSlippage}%`);
}
console.log(`Total expected slippage: ${split.totalSlippage}%`);
console.log(`Execution time: ${split.estimatedTime}s`);const twap = await slippage.twapSchedule({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
totalSize: 100000,
duration: 3600, // 1 hour
intervals: 12, // 12 orders
});
console.log('TWAP Schedule:');
for (const order of twap.orders) {
console.log(` ${order.time}: $${order.size}`);
}
console.log(`Expected avg slippage: ${twap.expectedSlippage}%`);const timing = await slippage.analyzeTiming({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
size: 10000,
});
console.log('Best Times for Low Slippage:');
for (const window of timing.bestWindows) {
console.log(` ${window.time}: avg ${window.avgSlippage}% slippage`);
console.log(` Liquidity: $${window.avgLiquidity}`);
}
console.log('\nWorst Times:');
for (const window of timing.worstWindows) {
console.log(` ${window.time}: avg ${window.avgSlippage}% slippage`);
}// Set protection parameters
slippage.setProtection({
maxSlippage: 0.01, // 1% max
revertThreshold: 0.02, // Cancel if > 2%
notifyThreshold: 0.005, // Alert at 0.5%
retryOnRevert: true, // Retry with lower size
retryReductionPct: 50, // Reduce size by 50%
});
// Execute with protection
const result = await slippage.executeProtected({
platform: 'polymarket',
market: 'trump-win-2028',
side: 'YES',
size: 10000,
});
console.log(`Executed: ${result.executed}`);
console.log(`Actual slippage: ${result.actualSlippage}%`);
console.log(`Protected: ${result.protected}`);
if (result.reverted) {
console.log(`Reverted: ${result.revertReason}`);
}const dexSlippage = await slippage.estimateDex({
chain: 'ethereum',
dex: 'uniswap',
tokenIn: 'USDC',
tokenOut: 'ETH',
amountIn: 50000,
});
console.log('DEX Slippage Estimate:');
console.log(` Expected out: ${dexSlippage.expectedOut}`);
console.log(` Min out (1% slip): ${dexSlippage.minOut1Pct}`);
console.log(` Price impact: ${dexSlippage.priceImpact}%`);
console.log(` Route: ${dexSlippage.route.join(' → ')}`);const history = await slippage.getHistory({
platform: 'polymarket',
period: '30d',
});
console.log('Historical Slippage:');
console.log(` Avg slippage: ${history.avgSlippage}%`);
console.log(` Max slippage: ${history.maxSlippage}%`);
console.log(` Trades with > 1%: ${history.tradesOver1Pct}`);
console.log(` Total slippage cost: $${history.totalCost}`);| Factor | Impact | Mitigation |
|---|---|---|
| Order size | Larger = more slip | Split orders |
| Liquidity | Thin = more slip | Check depth first |
| Volatility | High = more slip | Use limit orders |
| Time of day | Off-hours = more slip | Trade peak hours |
| Market type | New = more slip | Avoid illiquid markets |
| Mode | Behavior |
|---|---|
warn | Alert but execute |
confirm | Require confirmation |
block | Cancel if exceeds |
retry | Retry with smaller size |
e71a5f6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.