Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Hikelio/ExchangeSharp: ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported. · GitHub
Skip to content

Repository files navigation

Build Status

Overview

ExchangeSharp is a C# console app and framework for trading and communicating with various exchange API end points for cryptocurrency assets. Many exchanges are supported, along with web sockets, withdraws and more!

Features

  • Many exchanges supported with public, private and web socket API
  • Easy to use and well documented code and API
  • Optional global market symbol normalization, since each exchange has their own way of doing market symbols
  • Runs anywhere .NET core will run (Windows 8.1 or newer, MAC, Linux, iOS, Android, Unity 2018+, etc.)

Exchanges

The following cryptocurrency exchanges are supported:
(Web socket key: T = tickers, R = trades, B = order book, O = private orders)

Exchange NamePublic RESTPrivate RESTWeb Socket
AbucoinsxxTRO
BinancexxTRB
Bitbankxx
BitfinexxxTRO
Bithumbx
BitMEXxxRO
Bitstampxx
BittrexxxTR
Bleutradexx
CoinbasexxTR
Cryptopiaxx
Geminixx
Hitbtcxx
HuobixxRB
Krakenxx
KuCoinxxTR
LBankxx
Livecoinxx
OKexxxRB
PoloniexxxTRB
TuxExchangexx
YoBitxx
ZB.comwipR

The following cryptocurrency services are supported:

  • Cryptowatch (partial)

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

Visual Studio 2017 is recommended. .NET 4.7.2+ or .NET core 2.2+ is required. If running on Windows, you should use Windows 8.1 or newer.

If you must use an older Windows, 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.

Windows: Open ExchangeSharp.sln in Visual Studio and build/run Other Platforms: dotnet build ExchangeSharp.sln -f netcoreapp2.1
Ubuntu Release Example: dotnet build ExchangeSharp.sln -f netcoreapp2.1 -c Release -r ubuntu.16.10-x64

You can also publish from Visual Studio (right click project, select publish), which allows easily changing the platform, .NET core version and self-contained binary settings.

Nuget

NuGet
PM> Install-Package DigitalRuby.ExchangeSharp -Version 0.6.0

Simple Example

ExchangeKrakenAPI api = new ExchangeKrakenAPI();
ExchangeTicker ticker = api.GetTickerAsync("XXBTZUSD").Sync();
Console.WriteLine("On the Kraken exchange, 1 bitcoin is worth {0} USD.", ticker.Bid);
// load API keys created from ExchangeSharpConsole.exe keys mode=create path=keys.bin keylist=public_key,private_key
api.LoadAPIKeys("keys.bin");
/// place limit order for 0.01 bitcoin at ticker.Ask USD
ExchangeOrderResult result = api.PlaceOrderAsync(new ExchangeOrderRequest
{
Amount = 0.01m,
IsBuy = true,
Price = ticker.Ask,
MarketSymbol = "XXBTZUSD"
}).Sync();
// Kraken is a bit funny in that they don't return the order details in the initial request, so you have to follow up with an order details request
// if you want to know more info about the order - most other exchanges don't return until they have the order details for you.
// I've also found that Kraken tends to fail if you follow up too quickly with an order details request, so sleep a bit to give them time to get
// their house in order.
System.Threading.Thread.Sleep(500);
result = api.GetOrderDetailsAsync(result.OrderId).Sync();
Console.WriteLine("Placed an order on Kraken for 0.01 bitcoin at {0} USD. Status is {1}. Order id is {2}.", ticker.Ask, result.Result, result.OrderId);

Web Socket Example

public static void Main(string[] args)
{
// create a web socket connection to Binance. Note you can Dispose the socket anytime to shut it down.
// the web socket will handle disconnects and attempt to re-connect automatically.
ExchangeBinanceAPI b = new ExchangeBinanceAPI();
using (var socket = b.GetTickersWebSocket((tickers) =>
{
Console.WriteLine("{0} tickers, first: {1}", tickers.Count, tickers.First());
}))
{
Console.WriteLine("Press ENTER to shutdown.");
Console.ReadLine();
}
}

Logging

ExchangeSharp uses NLog internally currently. To log, use ExchangeSharp.Logger. Do not use Console.WriteLine to log messages.

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 anyway, please consider donating.

Donate with Bitcoin

Donate with Litecoin

Donate with Ethereum

Donate

Donation totals: 0.02350084 BTC, 10.25 LTC

Thanks for visiting!

Jeff Johnson
jeff@digitalruby.com
http://www.digitalruby.com

About

ExchangeSharp is a powerful, fast and easy to use .NET/C# API for interfacing with many crypto currency exchanges. REST and web sockets are supported.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages