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();