CCXT cryptocurrency exchange library for C# and .NET developers. Covers both REST API (standard) and WebSocket API (real-time). Helps install CCXT, connect to exchanges, fetch market data, place orders, stream live tickers/orderbooks, handle authentication, and manage errors in .NET projects. Use when working with crypto exchanges in C# applications, trading systems, or financial software. Supports .NET Standard 2.0+.
>_
Quick Install
npxskills add ccxt/ccxt--skill ccxt-csharp
Instructions
Loading…
Tags & Topics
altcoinapiarbitragebitcoinbotcryptocurrency
CCXT for C#
A comprehensive guide to using CCXT in C# and .NET projects for cryptocurrency exchange integration.
Installation
Via NuGet Package Manager
dotnet add package CCXT.NET
Or via Visual Studio:
Right-click project → Manage NuGet Packages
Search for "CCXT.NET"
Click Install
Requirements
.NET Standard 2.0 or higher
.NET Core 2.0+ / .NET 5+ / .NET Framework 4.6.1+
Quick Start
REST API
using ccxt;
var exchange = new Binance();
await exchange.LoadMarkets();
var ticker = await exchange.FetchTicker("BTC/USDT");
Console.WriteLine(ticker);
WebSocket API - Real-time Updates
using ccxt.pro;
var exchange = new Binance();
while (true)
{
var ticker = await exchange.WatchTicker("BTC/USDT");
Console.WriteLine(ticker.Last); // Live updates!
}
await exchange.Close();
REST vs WebSocket
Feature
REST API
WebSocket API
Use for
One-time queries, placing orders
Real-time monitoring, live price feeds
Import
using ccxt;
using ccxt.pro;
Methods
Fetch* (FetchTicker, FetchOrderBook)
Watch* (WatchTicker, WatchOrderBook)
Speed
Slower (HTTP request/response)
Faster (persistent connection)
Rate limits
Strict (1-2 req/sec)
More lenient (continuous stream)
Best for
Trading, account management
Price monitoring, arbitrage detection
Method naming: C# uses PascalCase - FetchTicker not fetchTicker, WatchTicker not watchTicker
Creating Exchange Instance
REST API
using ccxt;
// Public API (no authentication)
var exchange = new Binance
{
EnableRateLimit = true // Recommended!
};
// Private API (with authentication)
var exchange = new Binance
{
ApiKey = "YOUR_API_KEY",
Secret = "YOUR_SECRET",
EnableRateLimit = true
};
WebSocket API
using ccxt.pro;
// Public WebSocket
var exchange = new Binance();
// Private WebSocket (with authentication)
var exchange = new Binance
{
ApiKey = "YOUR_API_KEY",
Secret = "YOUR_SECRET"
};
// Always close when done
await exchange.Close();
Common REST Operations
Loading Markets
// Load all available trading pairs
await exchange.LoadMarkets();
// Access market information
var btcMarket = exchange.Market("BTC/USDT");
Console.WriteLine(btcMarket.Limits.Amount.Min); // Minimum order amount
Fetching Ticker
// Single ticker
var ticker = await exchange.FetchTicker("BTC/USDT");
Console.WriteLine(ticker.Last); // Last price
Console.WriteLine(ticker.Bid); // Best bid
Console.WriteLine(ticker.Ask); // Best ask
Console.WriteLine(ticker.Volume); // 24h volume
// Multiple tickers (if supported)
var tickers = await exchange.FetchTickers(new[] { "BTC/USDT", "ETH/USDT" });
Fetching Order Book
// Full orderbook
var orderbook = await exchange.FetchOrderBook("BTC/USDT");
Console.WriteLine(orderbook.Bids[0]); // [price, amount]
Console.WriteLine(orderbook.Asks[0]); // [price, amount]
// Limited depth
var orderbook = await exchange.FetchOrderBook("BTC/USDT", 5); // Top 5 levels
Creating Orders
Limit Order
// Buy limit order
var order = await exchange.CreateLimitBuyOrder("BTC/USDT", 0.01, 50000);
Console.WriteLine(order.Id);
// Sell limit order
var order = await exchange.CreateLimitSellOrder("BTC/USDT", 0.01, 60000);
// Generic limit order
var order = await exchange.CreateOrder("BTC/USDT", "limit", "buy", 0.01, 50000);
Market Order
// Buy market order
var order = await exchange.CreateMarketBuyOrder("BTC/USDT", 0.01);
// Sell market order
var order = await exchange.CreateMarketSellOrder("BTC/USDT", 0.01);
// Generic market order
var order = await exchange.CreateOrder("BTC/USDT", "market", "sell", 0.01);
Fetching Balance
var balance = await exchange.FetchBalance();
Console.WriteLine(balance["BTC"].Free); // Available balance
Console.WriteLine(balance["BTC"].Used); // Balance in orders
Console.WriteLine(balance["BTC"].Total); // Total balance
Fetching Orders
// Open orders
var openOrders = await exchange.FetchOpenOrders("BTC/USDT");
// Closed orders
var closedOrders = await exchange.FetchClosedOrders("BTC/USDT");
// All orders (open + closed)
var allOrders = await exchange.FetchOrders("BTC/USDT");
// Single order by ID
var order = await exchange.FetchOrder(orderId, "BTC/USDT");
Fetching Trades
// Recent public trades
var trades = await exchange.FetchTrades("BTC/USDT", limit: 10);
// Your trades (requires authentication)
var myTrades = await exchange.FetchMyTrades("BTC/USDT");
Canceling Orders
// Cancel single order
await exchange.CancelOrder(orderId, "BTC/USDT");
// Cancel all orders for a symbol
await exchange.CancelAllOrders("BTC/USDT");
WebSocket Operations (Real-time)
Watching Ticker (Live Price Updates)
using ccxt.pro;
var exchange = new Binance();
while (true)
{
var ticker = await exchange.WatchTicker("BTC/USDT");
Console.WriteLine($"Last: {ticker.Last}");
}
await exchange.Close();
Watching Order Book (Live Depth Updates)
var exchange = new Binance();
while (true)
{
var orderbook = await exchange.WatchOrderBook("BTC/USDT");
Console.WriteLine($"Best bid: {orderbook.Bids[0][0]}");
Console.WriteLine($"Best ask: {orderbook.Asks[0][0]}");
}
await exchange.Close();
Watching Trades (Live Trade Stream)
var exchange = new Binance();
while (true)
{
var trades = await exchange.WatchTrades("BTC/USDT");
foreach (var trade in trades)
{
Console.WriteLine($"{trade.Price} {trade.Amount} {trade.Side}");
}
}
await exchange.Close();
Watching Your Orders (Live Order Updates)
var exchange = new Binance
{
ApiKey = "YOUR_API_KEY",
Secret = "YOUR_SECRET"
};
while (true)
{
var orders = await exchange.WatchOrders("BTC/USDT");
foreach (var order in orders)
{
Console.WriteLine($"{order.Id} {order.Status} {order.Filled}");
}
}
await exchange.Close();
Watching Balance (Live Balance Updates)
var exchange = new Binance
{
ApiKey = "YOUR_API_KEY",
Secret = "YOUR_SECRET"
};
while (true)
{
var balance = await exchange.WatchBalance();
Console.WriteLine($"BTC: {balance["BTC"].Total}");
}
await exchange.Close();
Watching Multiple Symbols
var exchange = new Binance();
var symbols = new[] { "BTC/USDT", "ETH/USDT", "SOL/USDT" };
while (true)
{
var tickers = await exchange.WatchTickers(symbols);
foreach (var kvp in tickers)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value.Last}");
}
}
await exchange.Close();
Complete Method Reference
Market Data Methods
Tickers & Prices
fetchTicker(symbol) - Fetch ticker for one symbol
fetchTickers([symbols]) - Fetch multiple tickers at once
fetchBidsAsks([symbols]) - Fetch best bid/ask for multiple symbols
fetchLastPrices([symbols]) - Fetch last prices
fetchMarkPrices([symbols]) - Fetch mark prices (derivatives)
Order Books
fetchOrderBook(symbol, limit) - Fetch order book
fetchOrderBooks([symbols]) - Fetch multiple order books
fetchL2OrderBook(symbol) - Fetch level 2 order book
fetchL3OrderBook(symbol) - Fetch level 3 order book (if supported)
Trades
fetchTrades(symbol, since, limit) - Fetch public trades
fetchMyTrades(symbol, since, limit) - Fetch your trades (auth required)
fetchOrderTrades(orderId, symbol) - Fetch trades for specific order
OHLCV (Candlesticks)
fetchOHLCV(symbol, timeframe, since, limit) - Fetch candlestick data
fetchIndexOHLCV(symbol, timeframe) - Fetch index price OHLCV
fetchMarkOHLCV(symbol, timeframe) - Fetch mark price OHLCV
fetchPremiumIndexOHLCV(symbol, timeframe) - Fetch premium index OHLCV