{"id":30282947,"url":"https://github.com/ccxt-net/ccxt.collector","last_synced_at":"2025-08-16T17:08:28.019Z","repository":{"id":82285878,"uuid":"202154103","full_name":"ccxt-net/ccxt.collector","owner":"ccxt-net","description":"CCXT.COLLECT – CryptoCurrency eXchange Trading Collector","archived":false,"fork":false,"pushed_at":"2025-08-08T19:46:57.000Z","size":835,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-08T20:29:41.538Z","etag":null,"topics":["api","bitcoin","ccxt","exchange","trading"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ccxt-net.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-08-13T13:47:09.000Z","updated_at":"2025-08-08T19:47:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"dc17f473-3ea1-4bf3-a183-07a2fdd364e6","html_url":"https://github.com/ccxt-net/ccxt.collector","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ccxt-net/ccxt.collector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccxt-net%2Fccxt.collector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccxt-net%2Fccxt.collector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccxt-net%2Fccxt.collector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccxt-net%2Fccxt.collector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ccxt-net","download_url":"https://codeload.github.com/ccxt-net/ccxt.collector/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccxt-net%2Fccxt.collector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270742043,"owners_count":24637504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bitcoin","ccxt","exchange","trading"],"created_at":"2025-08-16T17:08:27.398Z","updated_at":"2025-08-16T17:08:28.000Z","avatar_url":"https://github.com/ccxt-net.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CCXT.Collector\n\n[![NuGet](https://img.shields.io/nuget/v/CCXT.Collector.svg)](https://www.nuget.org/packages/CCXT.Collector)\n[![.NET](https://img.shields.io/badge/.NET-8.0%20%7C%209.0%20%7C%2010.0-blue.svg)](https://dotnet.microsoft.com/)\n[![License](https://img.shields.io/github/license/ccxt-net/ccxt.collector)](https://github.com/ccxt-net/ccxt.collector/blob/master/LICENSE.txt)\n\nA powerful .NET library for real-time cryptocurrency exchange data collection with unified WebSocket streaming and technical indicator analysis.\n\n---\n\n## 📊 Overview\n\nCCXT.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.\n\n### ✨ Key Features\n\n- 🚀 **Real-time WebSocket Streaming** - Low-latency market data streaming with exponential backoff reconnection\n- 🔄 **Unified Data Classes** - Consistent data format across all exchanges (STicker, SOrderBook, STrade, SCandle)\n- 📈 **25+ Technical Indicators** - Real-time calculation per exchange/market with optimized algorithms\n- 🔌 **Callback Architecture** - Asynchronous event-driven data handling with typed callbacks\n- 🔐 **Automatic Reconnection** - Resilient WebSocket connection management with subscription restoration\n- ⚡ **High Performance** - System.Text.Json for 20-30% faster parsing, 15-25% less memory usage\n- 📊 **Channel Management** - Advanced subscription tracking with batch mode and statistics\n- 🛡️ **Security Ready** - Authentication framework for private channels (implementation in progress)\n\n### 🏢 Supported Exchanges (130 Active)\n\n#### Exchange Status Management\nThe 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.\n\n#### Major Exchanges by Region\n\n| Region | Exchanges | Count |\n|--------|-----------|-------|\n| 🇺🇸 United States | Coinbase, Kraken, Gemini, ~~Bittrex~~*, Poloniex, Phemex, Crypto.com, and 18 more | 25 |\n| 🇨🇳 China | Binance*, OKX, Huobi, Bybit, KuCoin, Gate.io, MEXC, Bitget, and 16 more | 24 |\n| 🇰🇷 South Korea | Upbit, Bithumb, Coinone, Korbit, Gopax, Probit, OKCoinKR | 7 |\n| 🇯🇵 Japan | bitFlyer, Coincheck, Bitbank, Zaif, and 4 more | 8 |\n| 🇪🇺 Europe | Bitstamp, Bitfinex, Bitvavo, EXMO, WhiteBIT, and 8 more | 13 |\n| 🇬🇧 United Kingdom | Bitfinex, Bitstamp, CEX.IO, Luno, and 3 more | 7 |\n| 🇸🇬 Singapore | BitMEX*, Bitrue, Coins.ph, and 5 more | 8 |\n| 🌍 Other Regions | Deribit (UAE), BTC Markets (AU), Bitso (MX), NDAX (CA), and more | 39 |\n\n*Note: Exchange locations indicate registration/headquarters, not service availability\n\n#### Implementation Status (v2.1.7 - 2025-08-13)\n\n| Feature | Implemented | In Progress | Planned |\n|---------|------------|-------------|----------|\n| WebSocket Clients | 132 | - | - |\n| Korean Exchange WebSockets | 6 (Upbit, Bithumb, Coinone, Korbit, Gopax, OKCoinKR) | 1 (Probit) | - |\n| Major Exchange Implementations | **15 (100% Complete)** | - | - |\n| Full WebSocket Implementation | **15** | - | 117 |\n| Batch Subscription System | **11** | 4 | - |\n| Auto-Resubscription on Reconnect | **15** | - | 117 |\n| Authentication/Private Channels | - | 15 | - |\n| Technical Indicators | 25+ | - | 25+ more |\n| Test Coverage | 15 exchanges (100% major) | - | 117 exchanges |\n\n#### ✅ All 15 Major Exchanges (100% Complete)\nBinance, 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**\n\n#### 🔒 Security \u0026 Testing Status\n- **Critical**: Authentication implementation needed for private channels\n- **Testing**: All 15 major exchanges have unified WebSocket test suite\n- **Channel Management**: Advanced ChannelManager with batch subscription support\n- **Security**: API key management system under development\n\n## 📦 Installation\n\n### NuGet Package Manager\n```bash\nInstall-Package CCXT.Collector -Version 2.1.7\n```\n\n### .NET CLI\n```bash\ndotnet add package CCXT.Collector --version 2.1.7\n```\n\n### Package Reference\n```xml\n\u003cPackageReference Include=\"CCXT.Collector\" Version=\"2.1.7\" /\u003e\n```\n\n### ⚠️ Breaking Changes in v2.1.7\n- **Bitget WebSocket**: Fixed subscription format with correct instType (\"sp\" instead of \"SPOT\") and ping/pong protocol\n- **Crypto.com WebSocket**: Corrected message parsing and subscription handling\n- **Coinone WebSocket**: Fixed response_type handling and channel processing\n- **Coinbase WebSocket**: Changed to level2_batch channel for public access\n- **Sample Project**: Enhanced with comprehensive testing utilities and multi-exchange support\n- See [CHANGELOG](docs/CHANGELOG.md#217---2025-08-13) for full details\n\n### ⚠️ Breaking Changes in v2.1.6\n- **KuCoin WebSocket**: Complete rewrite with dynamic endpoint resolution and proper protocol handling\n- **Korbit WebSocket**: Migration to v2 API with array-based message format\n- See [CHANGELOG](docs/CHANGELOG.md#216---2025-08-13) for full details\n\n### ⚠️ Breaking Changes in v2.1.5\n- **IMPORTANT**: Complete migration from Newtonsoft.Json to System.Text.Json\n- All JSON processing now uses System.Text.Json for better performance and reduced dependencies\n- Added JsonExtensions utility class with safe property access methods\n- Unified subscription handling with `MarkSubscriptionActive` across all exchanges\n- See [CHANGELOG](docs/CHANGELOG.md#215---2025-08-12) for migration details\n\n### ⚠️ Breaking Changes in v2.1.2\n- `SCandlestick.result` changed from single item to `List\u003cSCandleItem\u003e`\n- `OnOrderUpdate` event now uses `SOrders` container instead of single `SOrder`\n- `OnPositionUpdate` event now uses `SPositions` container instead of single `SPosition`\n- See [Migration Guide](docs/GUIDE.md#breaking-changes-v212) for details\n\n## 🚀 Quick Start\n\n### Basic WebSocket Connection\n\n```csharp\nusing CCXT.Collector.Binance;\nusing CCXT.Collector.Service;\nusing System;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        // Create WebSocket client\n        var client = new BinanceWebSocketClient();\n        \n        // Register callbacks for real-time data\n        client.OnOrderbookReceived += (orderbook) =\u003e\n        {\n            Console.WriteLine($\"Orderbook update: {orderbook.symbol}\");\n            Console.WriteLine($\"Best bid: {orderbook.result.bids[0].price} @ {orderbook.result.bids[0].quantity}\");\n            Console.WriteLine($\"Best ask: {orderbook.result.asks[0].price} @ {orderbook.result.asks[0].quantity}\");\n        };\n        \n        client.OnConnected += () =\u003e Console.WriteLine(\"✅ Connected to Binance\");\n        client.OnError += (error) =\u003e Console.WriteLine($\"❌ Error: {error}\");\n        \n        // Connect and subscribe to markets\n        await client.ConnectAsync();\n        \n        // Using the new Market-based subscription (more efficient)\n        var market = new Market(\"BTC\", \"USDT\");\n        await client.SubscribeOrderbookAsync(market);\n        await client.SubscribeTradesAsync(market);\n        \n        // Or using traditional string format (backward compatible)\n        await client.SubscribeTickerAsync(\"BTC/USDT\");\n        \n        // Keep the connection alive\n        Console.WriteLine(\"Press any key to stop...\");\n        Console.ReadKey();\n        \n        // Cleanup\n        await client.DisconnectAsync();\n    }\n}\n```\n\n### Multi-Exchange Data Collection\n\n```csharp\nusing CCXT.Collector.Binance;\nusing CCXT.Collector.Upbit;\nusing CCXT.Collector.Service;\n\n// Initialize multiple exchanges\nvar binanceClient = new BinanceWebSocketClient();\nvar upbitClient = new UpbitWebSocketClient();\n\n// Set up unified callbacks - all exchanges use same data format\nAction\u003cSTicker\u003e processTicker = (ticker) =\u003e\n{\n    Console.WriteLine($\"[{ticker.exchange}] {ticker.symbol}: \" +\n                     $\"Price={ticker.result.closePrice:F2}, \" +\n                     $\"Volume={ticker.result.volume:F2}\");\n};\n\nbinanceClient.OnTickerReceived += processTicker;\nupbitClient.OnTickerReceived += processTicker;\n\n// Connect and subscribe\nawait Task.WhenAll(\n    binanceClient.ConnectAsync(),\n    upbitClient.ConnectAsync()\n);\n\n// Use Market struct for cleaner code\nvar btcUsdt = new Market(\"BTC\", \"USDT\");\nvar btcKrw = new Market(\"BTC\", \"KRW\");\n\nawait binanceClient.SubscribeTickerAsync(btcUsdt);\nawait upbitClient.SubscribeTickerAsync(btcKrw);\n```\n\n## 📊 Technical Indicators\n\nThe library includes 25+ technical indicators. See the [Developer Guide](docs/GUIDE.md#technical-indicators) for the complete list and usage examples.\n\n## ⚙️ Configuration\n\n```json\n{\n  \"appsettings\": {\n    \"websocket.retry.waiting.milliseconds\": \"600\",\n    \"use.auto.start\": \"true\",\n    \"auto.start.exchange.name\": \"binance\",\n    \"auto.start.symbol.names\": \"BTC/USDT,ETH/USDT\"\n  }\n}\n```\n\n## 🏗️ Architecture\n\nFor detailed architecture and system design, see the [Developer Guide](docs/GUIDE.md#system-overview).\n\n### Project Structure\n\n```\nCCXT.Collector/\n├── src/\n│   ├── Core/             # Core framework components\n│   ├── Models/           # Data models and structures\n│   ├── Indicators/       # Technical indicators (25+ indicators)\n│   ├── Utilities/        # Utility classes\n│   └── exchanges/        # Exchange implementations (132 exchanges)\n│       ├── kr/           # South Korea (7 exchanges)\n│       ├── us/           # United States (26 exchanges)\n│       ├── cn/           # China (24 exchanges)\n│       └── ...           # 18 more country/region folders\n├── tests/                # Test suites\n├── samples/              # Example implementations\n└── docs/                 # Documentation\n```\n\n## 📚 Documentation\n\n- [Developer Guide](docs/GUIDE.md) - Complete architecture, API reference, and contributing guide\n- [Deployment Guide](docs/DEPLOYMENT.md) - Production deployment instructions\n- [Roadmap \u0026 Tasks](docs/ROADMAP.md) - Development roadmap and current tasks\n- [Changelog](docs/CHANGELOG.md) - Version history and release notes\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](docs/GUIDE.md#contributing) for details.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE.txt](LICENSE.txt) file for details.\n\n## 🔗 Links\n\n- [NuGet Package](https://www.nuget.org/packages/CCXT.Collector)\n- [GitHub Repository](https://github.com/ccxt-net/ccxt.collector)\n- [Documentation Wiki](https://github.com/ccxt-net/ccxt.collector/wiki)\n- [Bug Reports](https://github.com/ccxt-net/ccxt.collector/issues)\n\n## 👥 Related Projects\n\n- [CCXT.NET](https://github.com/ccxt-net/ccxt.net) - The base CCXT library for .NET\n- [CCXT.Simple](https://github.com/ccxt-net/ccxt.simple) - Simplified exchange interface\n\n## 💬 Support\n\n- **Issues**: [GitHub Issues](https://github.com/ccxt-net/ccxt.collector/issues)\n- **Email**: support@ccxt.net\n- **Discord**: [Join our Discord](https://discord.gg/ccxt)\n\n## 👥 Team\n\n### **Core Development Team**\n- **SEONGAHN** - Lead Developer \u0026 Project Architect ([lisa@odinsoft.co.kr](mailto:lisa@odinsoft.co.kr))\n- **YUJIN** - Senior Developer \u0026 Exchange Integration Specialist ([yoojin@odinsoft.co.kr](mailto:yoojin@odinsoft.co.kr))\n- **SEJIN** - Software Developer \u0026 API Implementation ([saejin@odinsoft.co.kr](mailto:saejin@odinsoft.co.kr))\n\n---\n\n**Built with ❤️ by the ODINSOFT Team**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccxt-net%2Fccxt.collector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fccxt-net%2Fccxt.collector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccxt-net%2Fccxt.collector/lists"}