Automated cross-platform arbitrage detection and monitoring
50
63%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./src/skills/bundled/arbitrage/SKILL.mdAutomated detection and monitoring of arbitrage opportunities across prediction market platforms.
/arb start # Start arbitrage monitoring
/arb stop # Stop monitoring
/arb status # Check monitoring status
/arb config --interval 60 # Set check interval (seconds)/arb check # Run one-time scan
/arb check "election" # Scan with keyword
/arb check --platforms poly,kalshi # Specific platforms/arb compare <market-a> <market-b> # Compare two specific markets
/arb compare poly:12345 kalshi:TRUMP # By platform:id/arb opportunities # List current opportunities
/arb opportunities --min-spread 2 # Min 2% spread
/arb opportunities --format table # Table format
/arb opportunities --format detailed # Detailed view/arb link <market-a> <market-b> # Manually link markets
/arb unlink <market-a> <market-b> # Remove link
/arb links # View all links
/arb auto-match # Auto-detect matches/arb stats # Arbitrage statistics
/arb stats --period 7d # Last 7 days
/arb history # Historical opportunitiesimport { createArbitrageService } from 'clodds/arbitrage';
const arbService = createArbitrageService({
platforms: ['polymarket', 'kalshi', 'manifold', 'betfair'],
checkIntervalMs: 30000, // Check every 30 seconds
minSpread: 0.5, // 0.5% minimum spread
minLiquidity: 100, // $100 minimum
// Platform credentials
polymarket: { apiKey, apiSecret, passphrase },
kalshi: { apiKey },
});// Start continuous monitoring
await arbService.start();
// Event handlers
arbService.on('arbitrage', (opp) => {
console.log(`⚖️ Arbitrage found!`);
console.log(` ${opp.marketA.platform}: ${opp.marketA.price}`);
console.log(` ${opp.marketB.platform}: ${opp.marketB.price}`);
console.log(` Spread: ${opp.spread.toFixed(2)}%`);
});
arbService.on('arbitrageExpired', (opp) => {
console.log(`Arbitrage expired: ${opp.id}`);
});
// Check status
const isRunning = arbService.isRunning();
// Stop monitoring
await arbService.stop();// Run a single scan
const opportunities = await arbService.checkArbitrage({
query: 'trump',
platforms: ['polymarket', 'kalshi'],
minSpread: 1,
});
for (const opp of opportunities) {
console.log(`${opp.question}`);
console.log(` Buy on ${opp.buyPlatform} @ ${opp.buyPrice}`);
console.log(` Sell on ${opp.sellPlatform} @ ${opp.sellPrice}`);
console.log(` Spread: ${opp.spread.toFixed(2)}%`);
}// Compare two specific markets
const comparison = await arbService.compareMarkets(
{ platform: 'polymarket', id: 'market-123' },
{ platform: 'kalshi', id: 'TRUMP-WIN' }
);
if (comparison.hasArbitrage) {
console.log(`Arbitrage exists!`);
console.log(` Buy ${comparison.buySide} on ${comparison.buyPlatform}`);
console.log(` Sell ${comparison.sellSide} on ${comparison.sellPlatform}`);
console.log(` Spread: ${comparison.spread.toFixed(2)}%`);
} else {
console.log(`No arbitrage. Price difference: ${comparison.priceDiff.toFixed(2)}%`);
}// Add a manual match
await arbService.addMatch(
{ platform: 'polymarket', id: 'market-123', question: 'Will Trump win?' },
{ platform: 'kalshi', id: 'TRUMP-WIN', question: 'Trump wins 2024' }
);
// Remove a match
await arbService.removeMatch('polymarket:market-123', 'kalshi:TRUMP-WIN');
// Auto-detect matches using question similarity
const autoMatches = await arbService.autoMatchMarkets({
minSimilarity: 0.85,
});
console.log(`Found ${autoMatches.length} auto-matches`);// Get current opportunities
const opportunities = await arbService.getOpportunities({
minSpread: 1,
sortBy: 'spread', // 'spread' | 'liquidity' | 'confidence'
});
// Format for display
const formatted = await arbService.formatOpportunities(opportunities);
console.log(formatted);// Get arbitrage statistics
const stats = await arbService.getStats({
period: '30d',
});
console.log(`Total opportunities: ${stats.totalOpportunities}`);
console.log(`Avg spread: ${stats.avgSpread.toFixed(2)}%`);
console.log(`Max spread seen: ${stats.maxSpread.toFixed(2)}%`);
console.log(`By platform pair:`);
for (const [pair, count] of Object.entries(stats.byPlatformPair)) {
console.log(` ${pair}: ${count}`);
}Market: "Trump wins 2024"
Polymarket YES: 52¢
Kalshi YES: 55¢
Strategy: Buy Polymarket YES, Sell Kalshi YES
Spread: 3¢ (5.8%)Market: "Will X happen?"
YES: 45¢
NO: 52¢
Total: 97¢
Strategy: Buy both YES and NO
Guaranteed profit: 3¢ per $1Market A: "Trump wins" = 55¢
Market B: "Trump loses" = 48¢
Total: 103¢ (should be 100¢)
Strategy: Sell both, pocket 3¢arbService.configure({
// Scanning
checkIntervalMs: 30000,
batchSize: 50,
// Filtering
minSpread: 0.5,
minLiquidity: 100,
minConfidence: 0.7,
// Matching
autoMatchEnabled: true,
minMatchSimilarity: 0.85,
// Alerts
alertOnNewArb: true,
alertThreshold: 2, // Alert on 2%+ spreads
});alsk1992/CloddsBot
c930628
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.