An open API service indexing awesome lists of open source software.

https://github.com/ccxt-net/ccxt.collector

CCXT.COLLECT – CryptoCurrency eXchange Trading Collector
https://github.com/ccxt-net/ccxt.collector

api bitcoin ccxt exchange trading

Last synced: 10 months ago
JSON representation

CCXT.COLLECT – CryptoCurrency eXchange Trading Collector

Awesome Lists containing this project

README

          

# CCXT.Collector

[![NuGet](https://img.shields.io/nuget/v/CCXT.Collector.svg)](https://www.nuget.org/packages/CCXT.Collector)
[![.NET](https://img.shields.io/badge/.NET-8.0%20%7C%209.0%20%7C%2010.0-blue.svg)](https://dotnet.microsoft.com/)
[![License](https://img.shields.io/github/license/ccxt-net/ccxt.collector)](https://github.com/ccxt-net/ccxt.collector/blob/master/LICENSE.txt)

A powerful .NET library for real-time cryptocurrency exchange data collection with unified WebSocket streaming and technical indicator analysis.

---

## πŸ“Š Overview

CCXT.Collector is a comprehensive library that connects to cryptocurrency exchanges worldwide via WebSocket to receive real-time market data and calculate technical indicators. It provides a unified interface for handling data from multiple exchanges, making it easy to build trading bots, market analysis tools, and data collection systems.

### ✨ Key Features

- πŸš€ **Real-time WebSocket Streaming** - Low-latency market data streaming with exponential backoff reconnection
- πŸ”„ **Unified Data Classes** - Consistent data format across all exchanges (STicker, SOrderBook, STrade, SCandle)
- πŸ“ˆ **25+ Technical Indicators** - Real-time calculation per exchange/market with optimized algorithms
- πŸ”Œ **Callback Architecture** - Asynchronous event-driven data handling with typed callbacks
- πŸ” **Automatic Reconnection** - Resilient WebSocket connection management with subscription restoration
- ⚑ **High Performance** - System.Text.Json for 20-30% faster parsing, 15-25% less memory usage
- πŸ“Š **Channel Management** - Advanced subscription tracking with batch mode and statistics
- πŸ›‘οΈ **Security Ready** - Authentication framework for private channels (implementation in progress)

### 🏒 Supported Exchanges (130 Active)

#### Exchange Status Management
The library now includes automatic exchange status tracking to prevent connections to closed or unavailable exchanges. When attempting to connect to a closed exchange, you'll receive a clear error message with suggested alternatives.

#### Major Exchanges by Region

| Region | Exchanges | Count |
|--------|-----------|-------|
| πŸ‡ΊπŸ‡Έ United States | Coinbase, Kraken, Gemini, ~~Bittrex~~*, Poloniex, Phemex, Crypto.com, and 18 more | 25 |
| πŸ‡¨πŸ‡³ China | Binance*, OKX, Huobi, Bybit, KuCoin, Gate.io, MEXC, Bitget, and 16 more | 24 |
| πŸ‡°πŸ‡· South Korea | Upbit, Bithumb, Coinone, Korbit, Gopax, Probit, OKCoinKR | 7 |
| πŸ‡―πŸ‡΅ Japan | bitFlyer, Coincheck, Bitbank, Zaif, and 4 more | 8 |
| πŸ‡ͺπŸ‡Ί Europe | Bitstamp, Bitfinex, Bitvavo, EXMO, WhiteBIT, and 8 more | 13 |
| πŸ‡¬πŸ‡§ United Kingdom | Bitfinex, Bitstamp, CEX.IO, Luno, and 3 more | 7 |
| πŸ‡ΈπŸ‡¬ Singapore | BitMEX*, Bitrue, Coins.ph, and 5 more | 8 |
| 🌍 Other Regions | Deribit (UAE), BTC Markets (AU), Bitso (MX), NDAX (CA), and more | 39 |

*Note: Exchange locations indicate registration/headquarters, not service availability

#### Implementation Status (v2.1.7 - 2025-08-13)

| Feature | Implemented | In Progress | Planned |
|---------|------------|-------------|----------|
| WebSocket Clients | 132 | - | - |
| Korean Exchange WebSockets | 6 (Upbit, Bithumb, Coinone, Korbit, Gopax, OKCoinKR) | 1 (Probit) | - |
| Major Exchange Implementations | **15 (100% Complete)** | - | - |
| Full WebSocket Implementation | **15** | - | 117 |
| Batch Subscription System | **11** | 4 | - |
| Auto-Resubscription on Reconnect | **15** | - | 117 |
| Authentication/Private Channels | - | 15 | - |
| Technical Indicators | 25+ | - | 25+ more |
| Test Coverage | 15 exchanges (100% major) | - | 117 exchanges |

#### βœ… All 15 Major Exchanges (100% Complete)
Binance, Bitget, Bithumb, Bittrex, Bybit, Coinbase, Coinone, Crypto.com, Gate.io, Huobi, Korbit, Kucoin, OKX, Upbit - **All functional with standardized WebSocket streaming and batch subscription support**

#### πŸ”’ Security & Testing Status
- **Critical**: Authentication implementation needed for private channels
- **Testing**: All 15 major exchanges have unified WebSocket test suite
- **Channel Management**: Advanced ChannelManager with batch subscription support
- **Security**: API key management system under development

## πŸ“¦ Installation

### NuGet Package Manager
```bash
Install-Package CCXT.Collector -Version 2.1.7
```

### .NET CLI
```bash
dotnet add package CCXT.Collector --version 2.1.7
```

### Package Reference
```xml

```

### ⚠️ Breaking Changes in v2.1.7
- **Bitget WebSocket**: Fixed subscription format with correct instType ("sp" instead of "SPOT") and ping/pong protocol
- **Crypto.com WebSocket**: Corrected message parsing and subscription handling
- **Coinone WebSocket**: Fixed response_type handling and channel processing
- **Coinbase WebSocket**: Changed to level2_batch channel for public access
- **Sample Project**: Enhanced with comprehensive testing utilities and multi-exchange support
- See [CHANGELOG](docs/CHANGELOG.md#217---2025-08-13) for full details

### ⚠️ Breaking Changes in v2.1.6
- **KuCoin WebSocket**: Complete rewrite with dynamic endpoint resolution and proper protocol handling
- **Korbit WebSocket**: Migration to v2 API with array-based message format
- See [CHANGELOG](docs/CHANGELOG.md#216---2025-08-13) for full details

### ⚠️ Breaking Changes in v2.1.5
- **IMPORTANT**: Complete migration from Newtonsoft.Json to System.Text.Json
- All JSON processing now uses System.Text.Json for better performance and reduced dependencies
- Added JsonExtensions utility class with safe property access methods
- Unified subscription handling with `MarkSubscriptionActive` across all exchanges
- See [CHANGELOG](docs/CHANGELOG.md#215---2025-08-12) for migration details

### ⚠️ Breaking Changes in v2.1.2
- `SCandlestick.result` changed from single item to `List`
- `OnOrderUpdate` event now uses `SOrders` container instead of single `SOrder`
- `OnPositionUpdate` event now uses `SPositions` container instead of single `SPosition`
- See [Migration Guide](docs/GUIDE.md#breaking-changes-v212) for details

## πŸš€ Quick Start

### Basic WebSocket Connection

```csharp
using CCXT.Collector.Binance;
using CCXT.Collector.Service;
using System;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args)
{
// Create WebSocket client
var client = new BinanceWebSocketClient();

// Register callbacks for real-time data
client.OnOrderbookReceived += (orderbook) =>
{
Console.WriteLine($"Orderbook update: {orderbook.symbol}");
Console.WriteLine($"Best bid: {orderbook.result.bids[0].price} @ {orderbook.result.bids[0].quantity}");
Console.WriteLine($"Best ask: {orderbook.result.asks[0].price} @ {orderbook.result.asks[0].quantity}");
};

client.OnConnected += () => Console.WriteLine("βœ… Connected to Binance");
client.OnError += (error) => Console.WriteLine($"❌ Error: {error}");

// Connect and subscribe to markets
await client.ConnectAsync();

// Using the new Market-based subscription (more efficient)
var market = new Market("BTC", "USDT");
await client.SubscribeOrderbookAsync(market);
await client.SubscribeTradesAsync(market);

// Or using traditional string format (backward compatible)
await client.SubscribeTickerAsync("BTC/USDT");

// Keep the connection alive
Console.WriteLine("Press any key to stop...");
Console.ReadKey();

// Cleanup
await client.DisconnectAsync();
}
}
```

### Multi-Exchange Data Collection

```csharp
using CCXT.Collector.Binance;
using CCXT.Collector.Upbit;
using CCXT.Collector.Service;

// Initialize multiple exchanges
var binanceClient = new BinanceWebSocketClient();
var upbitClient = new UpbitWebSocketClient();

// Set up unified callbacks - all exchanges use same data format
Action processTicker = (ticker) =>
{
Console.WriteLine($"[{ticker.exchange}] {ticker.symbol}: " +
$"Price={ticker.result.closePrice:F2}, " +
$"Volume={ticker.result.volume:F2}");
};

binanceClient.OnTickerReceived += processTicker;
upbitClient.OnTickerReceived += processTicker;

// Connect and subscribe
await Task.WhenAll(
binanceClient.ConnectAsync(),
upbitClient.ConnectAsync()
);

// Use Market struct for cleaner code
var btcUsdt = new Market("BTC", "USDT");
var btcKrw = new Market("BTC", "KRW");

await binanceClient.SubscribeTickerAsync(btcUsdt);
await upbitClient.SubscribeTickerAsync(btcKrw);
```

## πŸ“Š Technical Indicators

The library includes 25+ technical indicators. See the [Developer Guide](docs/GUIDE.md#technical-indicators) for the complete list and usage examples.

## βš™οΈ Configuration

```json
{
"appsettings": {
"websocket.retry.waiting.milliseconds": "600",
"use.auto.start": "true",
"auto.start.exchange.name": "binance",
"auto.start.symbol.names": "BTC/USDT,ETH/USDT"
}
}
```

## πŸ—οΈ Architecture

For detailed architecture and system design, see the [Developer Guide](docs/GUIDE.md#system-overview).

### Project Structure

```
CCXT.Collector/
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ Core/ # Core framework components
β”‚ β”œβ”€β”€ Models/ # Data models and structures
β”‚ β”œβ”€β”€ Indicators/ # Technical indicators (25+ indicators)
β”‚ β”œβ”€β”€ Utilities/ # Utility classes
β”‚ └── exchanges/ # Exchange implementations (132 exchanges)
β”‚ β”œβ”€β”€ kr/ # South Korea (7 exchanges)
β”‚ β”œβ”€β”€ us/ # United States (26 exchanges)
β”‚ β”œβ”€β”€ cn/ # China (24 exchanges)
β”‚ └── ... # 18 more country/region folders
β”œβ”€β”€ tests/ # Test suites
β”œβ”€β”€ samples/ # Example implementations
└── docs/ # Documentation
```

## πŸ“š Documentation

- [Developer Guide](docs/GUIDE.md) - Complete architecture, API reference, and contributing guide
- [Deployment Guide](docs/DEPLOYMENT.md) - Production deployment instructions
- [Roadmap & Tasks](docs/ROADMAP.md) - Development roadmap and current tasks
- [Changelog](docs/CHANGELOG.md) - Version history and release notes

## 🀝 Contributing

We welcome contributions! Please see our [Contributing Guide](docs/GUIDE.md#contributing) for details.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## πŸ“„ License

This project is licensed under the MIT License - see the [LICENSE.txt](LICENSE.txt) file for details.

## πŸ”— Links

- [NuGet Package](https://www.nuget.org/packages/CCXT.Collector)
- [GitHub Repository](https://github.com/ccxt-net/ccxt.collector)
- [Documentation Wiki](https://github.com/ccxt-net/ccxt.collector/wiki)
- [Bug Reports](https://github.com/ccxt-net/ccxt.collector/issues)

## πŸ‘₯ Related Projects

- [CCXT.NET](https://github.com/ccxt-net/ccxt.net) - The base CCXT library for .NET
- [CCXT.Simple](https://github.com/ccxt-net/ccxt.simple) - Simplified exchange interface

## πŸ’¬ Support

- **Issues**: [GitHub Issues](https://github.com/ccxt-net/ccxt.collector/issues)
- **Email**: support@ccxt.net
- **Discord**: [Join our Discord](https://discord.gg/ccxt)

## πŸ‘₯ Team

### **Core Development Team**
- **SEONGAHN** - Lead Developer & Project Architect ([lisa@odinsoft.co.kr](mailto:lisa@odinsoft.co.kr))
- **YUJIN** - Senior Developer & Exchange Integration Specialist ([yoojin@odinsoft.co.kr](mailto:yoojin@odinsoft.co.kr))
- **SEJIN** - Software Developer & API Implementation ([saejin@odinsoft.co.kr](mailto:saejin@odinsoft.co.kr))

---

**Built with ❀️ by the ODINSOFT Team**