C# CryptoExchange.Netライブラリで仮想通貨を自動売買する
nugetで公開されているCryptoExchange.Net
の使い方をまとめる
CryptoExchange.Net
をベースとしたBinance.Net
を使ってAPI通信を行うことをゴールとする
APIキーはBinance API Managementの管理画面から取得しておく
Usage
nugetからインストール
REST APIクライアントのインスタンスを作成
var binanceClient = new BinanceClient(new BinanceClientOptions()
{
ApiCredentials = new ApiCredentials("API-KEY", "API-SECRET"),
SpotApiOptions = new BinanceApiClientOptions
{
RateLimitingBehaviour = RateLimitingBehaviour.Fail
},
UsdFuturesApiOptions = new BinanceApiClientOptions
{
ApiCredentials = new ApiCredentials("OTHER-API-KEY-FOR-FUTURES", "OTHER-API-SECRET-FOR-FUTURES")
}
});
市場データを入手する
// 通貨データを取得
var callResult = await binanceClient.SpotApi.ExchangeData.GetExchangeInfoAsync();
if(!callResult.Success)
{
Console.WriteLine("Request failed: " + callResult.Error);
return;
}
var symbols = callResult.Data.Symbols;
foreach (var symbol in symbols)
{
Console.WriteLine(symbol.Name); // ETHBTC
}
// 通貨の価格データを取得
var spotTickerData = await binanceClient.SpotApi.ExchangeData.GetTickersAsync();
if(!spotTickerData.Success)
{
Console.WriteLine("Request failed: " + spotTickerData.Error);
return;
}
var tickers = spotTickerData.Data;
foreach (var ticker in tickers)
{
Console.WriteLine(ticker.Symbol); // ETHBTC
Console.WriteLine(ticker.LastPrice); // 0.07365800
}
// 板情報を取得
var spotOrderBookData = await binanceClient.SpotApi.ExchangeData.GetOrderBookAsync("BTCUSDT");
if(!spotOrderBookData.Success)
{
Console.WriteLine("Request failed: " + spotOrderBookData.Error);
return;
}
var orderBook = spotOrderBookData.Data;
Console.WriteLine(orderBook.Symbol); // BTCUSDT
foreach (var bid in orderBook.Bids)
{
Console.WriteLine(bid.Price); // 17419.66000000
Console.WriteLine(bid.Quantity); // 0.20466000
}
// https://binance-docs.github.io/apidocs/spot/en/#old-trade-lookup-market_data
// ヒストリカルデータ取得
var spotTradeHistoryData = await binanceClient.SpotApi.ExchangeData.GetTradeHistoryAsync("BTCUSDT");
if(!spotTradeHistoryData.Success)
{
Console.WriteLine("Request failed: " + spotTradeHistoryData.Error);
return;
}
var spotTradeHistory = spotTradeHistoryData.Data;
foreach (var item in spotTradeHistory)
{
Console.WriteLine(item.OrderId); // 2336973335
Console.WriteLine(item.Price); // 17431.47000000
Console.WriteLine(item.BaseQuantity); // 0.00070000
Console.WriteLine(item.TradeTime); // 2022/12/15 19:36:46
Console.WriteLine(item.BuyerIsMaker); // True
Console.WriteLine(item.IsBestMatch); // True
}
CryptoExchange.Net
のDocumentにあるように、API通信のレスポンスはWebCallResult
型で返る