This is a c# wrapper for popular trading library ccxt. Methods and documentation are pretty simmilar to ccxt.
Package manager
Install-Package CCXTSharp
- Install python 3.5+ (python 3.7 isn't currently supported by pyinstaller). And add python to system PATH if not already added by instalation.
- Open cmd.
- pip install ccxt // if libraries are already installed then type pip install ccxt --upgrade
- pip install cfscrape
- Update ccxt library
- Navigate to\your\project\ccxt\scripts in file explorer
- shift + right click, Open command window here
- pyinstaller -w -F ccxtAPI.py // program will be created in dist folder
- replace old file
Package contains compiled python code that has original ccxt api. C# part creates new proccess and runs compiled python code. Inter process communication is done with named pipes.
List supported exchanges.
// initialize and start process CcxtAPI ccxtAPI = new CcxtAPI(@"..\..\ccxt\ccxtAPI.exe"); // get list of avaliable exchanges List<string> exchangeIds = await ccxtAPI.GetExchangIds(); // print all exchange ids exchangeIds.ForEach(id => Console.WriteLine(id)); // it's preferred to exit other process if your program will close await ccxtAPI.Close();
List all markets.
// initialize and run script in python interpreter CcxtAPI ccxtAPI = new CcxtAPI(@"..\..\ccxt\scripts\ccxtAPI.py", @"D:\Program Files (x86)\Python36-32\python.exe"); // gets list of markets on Binance exchange and prints their symbols List<Market> markets = await ccxtAPI.FetchMarkets("binance"); markets.ForEach(m => Console.WriteLine(m.symbol)); await ccxtAPI.Close();
Checking for implementation.
CcxtAPI ccxtAPI = new CcxtAPI(@"..\..\ccxt\ccxtAPI.exe"); // if cryptopia has support for fetch tickers then fetch them if((await ccxtAPI.GetExchangeHas("cryptopia")).fetchTickers == Has.Capability.True) { Dictionary<string, Ticker> tickers = await ccxtAPI.FetchTickers("cryptopia"); // foreach ticker print their symbol and change foreach (var ticker in tickers.Values) { Console.WriteLine(ticker.symbol + ": " + ticker.change); } } await ccxtAPI.Close();
Private API.
CcxtAPI ccxtAPI = new CcxtAPI(@"..\..\ccxt\ccxtAPI.exe"); // Authenticate await ccxtAPI.ExchangeApiKey("binance", "my_api_key"); await ccxtAPI.ExchangeSecret("binance", "my_api_secret"); // Place order Order order = await ccxtAPI.CreateOrder("binance", "ETH/USDT", OrderType.limit, OrderSide.buy, 1, 210); // Cancel placed order await ccxtAPI.CancelOrder("binance", order.id, "ETH/USDT"); await ccxtAPI.Close();
Exception handling
CcxtAPI ccxtAPI = new CcxtAPI(@"..\..\ccxt\ccxtAPI.exe"); try { Dictionary<string, Market> markets = await ccxtAPI.LoadMarkets("_1broker"); } catch (CCXTException ex) { // exception is handled by ccxt python library if (ex.HandledByCCXT) Console.WriteLine(ex.exceptionType.Value.ToString() + ex.Message); else { // there is a bug either in python ccxt or in CCXTSharp Console.WriteLine(ex.Message); // restart process ccxtAPI.Kill(); // message will popup "Failed to execute script ccxtAPI.py" // reinitialize and continue execution ccxtAPI = new CcxtAPI(@"..\..\ccxt\ccxtAPI.exe"); } } // ... await ccxtAPI.Close();