High-performance TypeScript graph algorithms library optimized for trading bots and arbitrage detection
npm install @crstrskp/graphA high-performance, production-ready graph algorithms library optimized for financial trading bots and arbitrage detection. Built with TypeScript for type safety and designed for real-time market data processing.
``bash`
npm install @crstrskp/graph
`typescript
import { GraphImpl, Vertex, Edge } from '@crstrskp/graph';
// Create a new graph
const graph = new GraphImpl();
// Add vertices (cities, exchanges, assets)
const copenhagen = graph.insertVertex("Copenhagen");
const stockholm = graph.insertVertex("Stockholm");
const oslo = graph.insertVertex("Oslo");
// Add weighted edges (costs, exchange rates, fees)
graph.insertEdge(copenhagen, stockholm, 165.5);
graph.insertEdge(stockholm, oslo, 123.2);
graph.insertEdge(oslo, copenhagen, 201.1);
// Find shortest path
const path = graph.dijkstra_shortestPath(copenhagen, oslo);
console.log(Total cost: ${path.getTotalCost()});`
`typescript
import { GraphImpl } from '@crstrskp/graph';
const graph = new GraphImpl();
// Add currency exchange rates
const usd = graph.insertVertex("USD");
const eur = graph.insertVertex("EUR");
const btc = graph.insertVertex("BTC");
// Exchange rates (log prices for arbitrage detection)
graph.insertEdge(usd, eur, -0.1053); // USD -> EUR
graph.insertEdge(eur, btc, -4.2341); // EUR -> BTC
graph.insertEdge(btc, usd, 4.3500); // BTC -> USD (opportunity!)
// Detect arbitrage cycles
const cycles = graph.bmf_negativeCycles();
if (cycles.length > 0) {
console.log(Found ${cycles.length} arbitrage opportunities);Arbitrage path: ${cycle.toString()}
cycles.forEach(cycle => {
console.log();Profit: ${-cycle.getTotalCost()}
console.log();`
});
}
`typescript
import { RealTimeGraphImpl } from '@crstrskp/graph';
// Create real-time graph with 100ms batch updates
const rtGraph = new RealTimeGraphImpl(100, 5000); // 100ms batches, 5s staleness
// Add market data streams
await rtGraph.updateEdgeData("BTC-USD", "ETH-USD", {
rate: 0.0641,
timestamp: Date.now(),
maxTradeSize: 10.5,
source: "binance"
});
// Continuous arbitrage monitoring
setInterval(async () => {
const opportunities = await rtGraph.findArbitrageOpportunities();
opportunities.forEach(opp => {
console.log(Arbitrage: ${opp.path} | Profit: ${opp.profit}%);`
});
}, 1000);
`typescript
import { ThreadSafeGraphImpl } from '@crstrskp/graph';
const safeGraph = new ThreadSafeGraphImpl();
// Multiple trading strategies can safely access the graph
const strategy1 = async () => {
const path = await safeGraph.dijkstra_shortestPath(srcVertex, destVertex);
// Execute trades based on path
};
const strategy2 = async () => {
const cycles = await safeGraph.bmf_negativeCycles();
// Execute arbitrage based on cycles
};
// Run strategies concurrently
Promise.all([strategy1(), strategy2(), strategy1()]);
`
| Operation | Time Complexity | Space Complexity |
|-----------|----------------|-----------------|
| Dijkstra's Algorithm | O(V log V + E) | O(V) |
| Bellman-Ford | O(VE) | O(V) |
| Vertex Lookup | O(1) | O(V) |
| Negative Cycle Detection | O(VE) | O(V) |
``
src/
βββ GraphImpl.ts # Core graph implementation
βββ ThreadSafeGraphImpl.ts # Thread-safe wrapper
βββ RealTimeGraphImpl.ts # Real-time market data
βββ PriorityQueue.ts # Heap-based priority queue
βββ Vertex.ts # Graph vertex implementation
βββ Edge.ts # Graph edge implementation
βββ Path.ts # Path representation
βββ interfaces/ # TypeScript interfaces
`bashRun all tests
npm test
π Trading Bot Use Cases
$3
- Multi-exchange rate monitoring
- Cross-currency arbitrage detection
- Real-time profit calculation$3
- Currency triangle arbitrage
- Interest rate parity violations
- Cross-broker rate differences$3
- Optimal pricing paths
- Liquidity routing optimization
- Fee minimization strategiesπ§ Configuration
$3
`typescript
const config = {
batchIntervalMs: 100, // Update frequency
maxDataAgeMs: 5000, // Staleness threshold
enableProfiling: true, // Performance monitoring
maxBatchSize: 1000 // Memory management
};const rtGraph = new RealTimeGraphImpl(
config.batchIntervalMs,
config.maxDataAgeMs
);
`$3
`typescript
const safeGraph = new ThreadSafeGraphImpl({
readTimeoutMs: 1000, // Read lock timeout
writeTimeoutMs: 5000, // Write lock timeout
enableDeadlockDetection: true // Safety monitoring
});
`π€ Contributing
1. Fork the repository
2. Create a feature branch:
git checkout -b feature/my-feature
3. Commit changes: git commit -m 'Add my feature'
4. Push to branch: git push origin feature/my-feature
5. Submit a pull request$3
`bash
git clone https://github.com/your-username/graphDemo.git
cd graphDemo
npm install
npm test
``MIT License - see LICENSE file for details.
- Repository: github.com/your-username/graphDemo
- NPM Package: @crstrskp/graph
- Documentation: API Documentation
- Trading Bot: graph.tjorne.dk
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: support@tjorne.dk
---
Built for production trading applications | Type-safe | High-performance | Real-time capable