Bezysoftware.ExchangeSharp
0.9.6
dotnet add package Bezysoftware.ExchangeSharp --version 0.9.6
NuGet\Install-Package Bezysoftware.ExchangeSharp -Version 0.9.6
<PackageReference Include="Bezysoftware.ExchangeSharp" Version="0.9.6" />
paket add Bezysoftware.ExchangeSharp --version 0.9.6
#r "nuget: Bezysoftware.ExchangeSharp, 0.9.6"
// Install Bezysoftware.ExchangeSharp as a Cake Addin #addin nuget:?package=Bezysoftware.ExchangeSharp&version=0.9.6 // Install Bezysoftware.ExchangeSharp as a Cake Tool #tool nuget:?package=Bezysoftware.ExchangeSharp&version=0.9.6
<img src='logo.png' width='600' alt="Project's logo" />
Overview
ExchangeSharp is a C# framework/lib and console app for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!
Feel free to visit the discord channel at https://discord.gg/sHCUHH3 and chat with other developers.
Features
- Many exchanges supported with public, private and web socket API
- Easy to use code and API
- Optional global market symbol normalization, since each exchange has their own way of doing market symbols
- Runs anywhere .NET runs. (Windows, Mac, Linux, Containers, Serverless, iOS, Android, etc.)
- Can be used from many different C# platforms
- Has a great CLI that enables you to use all features from all exchanges right from your command line.
Exchanges
The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders, U = user data)
Exchange Name | Public REST | Private REST | Web Socket | Notes |
---|---|---|---|---|
Aquanow | wip | x | ||
Binance | x | x | T R B U | |
Binance Jersey | x | x | T R B U | |
Binance.US | x | x | T R B U | |
Binance DEX | R | |||
Bitbank | x | x | ||
Bitfinex | x | x | T R O | |
Bithumb | x | |||
BitMEX | x | x | R O | |
Bitstamp | x | x | R | |
Bittrex | x | x | T R | |
BL3P | x | x | R B | Trades stream does not send trade's ids. |
Bleutrade | x | x | ||
BTSE | x | x | ||
Bybit | x | x | R | Has public method for Websocket Positions |
Coinbase | x | x | T R U | |
Digifinex | x | x | R B | |
FTX | x | x | T | |
gate.io | x | x | ||
Gemini | x | x | T R B | |
HitBTC | x | x | R | |
Huobi | x | x | R B | |
Kraken | x | x | R | Dark order symbols not supported |
KuCoin | x | x | T R | |
LBank | x | x | ||
Livecoin | x | x | ||
NDAX | x | x | T R | |
OKCoin | x | x | R B | |
OKEx | x | x | T R B O | |
Poloniex | x | x | T R B | |
YoBit | x | x | ||
ZB.com | wip | R |
The following cryptocurrency services are supported:
- Cryptowatch (partial)
Exchange constructors are private, to get access to an exchange in code use:
ExchangeAPI.GetExchangeAPIAsync
.
Installing the CLI
On *nix systems:
- Run this command
curl https://github.com/jjxtra/ExchangeSharp/raw/master/install-console.sh | sh
On Windows (or manually):
- Download the latest binaries for your OS.
- Unzip it into a folder that is in your environment variable
PATH
(ctrl
+shift
+pause|break
→ Environment Variables) - Use it from your preferred command-line emulator (e.g. Powershell, cmd, etc.)
exchange-sharp --help
shows all available commands
Notes
ExchangeSharp uses marketSymbol
to refer to markets, or pairs of currencies.
Please send pull requests if you have made a change that you feel is worthwhile, want a bug fixed or want a new feature. You can also donate to get new features.
Building/Compiling
Websockets
If you must use an older Windows (older than win8.1), you'll need to use the Websocket4Net nuget package, and override the web socket implementation by calling
ExchangeSharp.ClientWebSocket.RegisterWebSocketCreator(
() => new ExchangeSharpConsole.WebSocket4NetClientWebSocket()
);
See WebSocket4NetClientWebSocket.cs
for implementation details.
Nuget
dotnet CLI
dotnet add package DigitalRuby.ExchangeSharp --version 0.9.2
Package Manager on VS
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.9.2
Examples
Creating an order
There's a lot of examples on how to use the API in our console application.
e.g.
ExampleOption.cs
Getting ticker info via Web Sockets
public static async Task Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
using var api = await ExchangeAPI.GetExchangeAPIAsync<ExchangeBinanceAPI>();
// the web socket will handle disconnects and attempt to re-connect automatically.
using var socket = await api.GetTickersWebSocket(tickers =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
});
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine(true);
}
Authentication
Private api calls like placing orers require you to call LoadApiKeys
first. You can generate an api keys file by running the bundled console application and choosing the generate key file option.
Logging
ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger
.
Do not use Console.WriteLine
to log messages in the lib project.
Provide your own nlog.config
or app.config
nlog configuration if you want to change logging settings or turn logging off.
Caching
The ExchageAPI
class provides a method caching mechanism. Use MethodCachePolicy
to put caching behind public methods, or clear to remove caching. Some methods are cached by default. You can set ExchangeAPI.UseDefaultMethodCachePolicy
to false
to stop all caching as well.
You can also set request cache policy if you want to tweak how the http caching behaves.
How to contribute
Please read the contributing guideline before submitting a pull request.
Consulting
I'm happy to make customizations to the software for you and keep in private repo, email exchangesharp@digitalruby.com.
Donations Gratefully Accepted
Believe it or not, donations are quite rare. I've posted publicly the total donation amounts below. If ExchangeSharp has helped you in any way, please consider donating.
Donation totals: 0.039 BTC, 10.25 LTC
Thanks for visiting!
Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.AspNet.SignalR.Client (>= 2.3.0)
- Microsoft.CodeAnalysis.Analyzers (>= 2.9.7)
- Newtonsoft.Json (>= 11.0.2)
- NLog (>= 4.5.10)
- System.Configuration.ConfigurationManager (>= 4.5.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.