Skip to content

Fetch exchangeInfo using /api/v1/exchangeInfo instead of github page #26

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 24 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
2cddfa7
added exchangeInfo
Jan 16, 2018
ad8f682
Merge branch 'master' of https://github.com/morpheums/Binance.API.Csh…
Jan 23, 2018
5629f5f
Added support for Partial Book Depth Streams
Jan 24, 2018
671617e
fix AccountUpdatedMessage
Jan 25, 2018
560a0b7
fix userstreams
Jan 25, 2018
a187e17
add DeltaTimeAdjustment to solve server time synchronization problems…
Jan 25, 2018
3d48b34
Fix code for corret solution build
MaVaLe Jan 26, 2018
c8cf26f
ExchangeInfo APi Unit test enter for debug
MaVaLe Jan 26, 2018
77c246a
Fix code for corret solution build
MaVaLe Jan 26, 2018
9b0bc17
ExchangeInfo APi Unit test enter for debug
MaVaLe Jan 26, 2018
0a6bf06
InvariantCulture for decimal parse
MaVaLe Jan 27, 2018
66c8769
Change work whis WebSocket events
MaVaLe Jan 28, 2018
707f2d0
Return WebSocket object for external use
MaVaLe Jan 28, 2018
24dd005
Merge pull request #2 from MaVaLe/master
frabul Jan 28, 2018
2b66674
quantity parameter of PostNewOrderTest method should have maximum 20 …
Jan 28, 2018
e678f8f
Merge branch 'master' of https://github.com/N4rk0/Binance.API.Csharp.…
Jan 28, 2018
e1e1268
fix build error
Jan 28, 2018
8d30491
untabify
Jan 28, 2018
5894dec
Added callback for detecting socket disconnection
Jan 29, 2018
8877b5c
FIX: Correct serializatio of OrderOrTradeUpdatedMessage
Feb 3, 2018
3f0d985
Addded clientOrderId feature
Feb 3, 2018
3c397f8
fix: remove trailing zeros
Feb 3, 2018
55fd0d4
added missing parameters to GetTradeList
Feb 20, 2018
568e20b
fix trade info
Feb 25, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public abstract class ApiClientAbstract
/// <param name="apiKey">Key used to authenticate within the API.</param>
/// <param name="apiSecret">API secret used to signed API calls.</param>
/// <param name="apiUrl">API based url.</param>
public ApiClientAbstract(string apiKey, string apiSecret, string apiUrl = @"https://www.binance.com", string webSocketEndpoint = @"wss://stream.binance.com:9443/ws/", bool addDefaultHeaders = true)
public ApiClientAbstract(string apiKey, string apiSecret, string apiUrl = @"https://us.binance.com", string webSocketEndpoint = @"wss://stream.binance.com:9443/ws/", bool addDefaultHeaders = true)
{
_apiUrl = apiUrl;
_apiKey = apiKey;
Expand Down
42 changes: 26 additions & 16 deletions Binance.API.Csharp.Client.Domain/Interfaces/IApiClient.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Binance.API.Csharp.Client.Models.Enums;
using Binance.API.Csharp.Client.Models.WebSocket;
using System;
using System.Threading.Tasks;
using WebSocketSharp;
using static Binance.API.Csharp.Client.Domain.Abstract.ApiClientAbstract;

namespace Binance.API.Csharp.Client.Domain.Interfaces
Expand All @@ -18,22 +20,30 @@ public interface IApiClient
/// <returns></returns>
Task<T> CallAsync<T>(ApiMethod method, string endpoint, bool isSigned = false, string parameters = null);

/// <summary>
/// Connects to a Websocket endpoint.
/// </summary>
/// <typeparam name="T">Type used to parsed the response message.</typeparam>
/// <param name="parameters">Paremeters to send to the Websocket.</param>
/// <param name="messageDelegate">Deletage to callback after receive a message.</param>
/// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
void ConnectToWebSocket<T>(string parameters, MessageHandler<T> messageDelegate, bool useCustomParser = false);
/// <summary>
/// Connects to a Websocket endpoint.
/// </summary>
/// <typeparam name="T">Type used to parsed the response message.</typeparam>
/// <param name="parameters">Paremeters to send to the Websocket.</param>
/// <param name="messageDelegate">Deletage to callback after receive a message.</param>
/// <param name="useCustomParser">Specifies if needs to use a custom parser for the response message.</param>
WebSocket ConnectToWebSocket<T>(
string parameters,
MessageHandler<T> messageDelegate,
Action<CloseEventArgs> onClose,
bool useCustomParser = false);

/// <summary>
/// Connects to a UserData Websocket endpoint.
/// </summary>
/// <param name="parameters">Paremeters to send to the Websocket.</param>
/// <param name="accountHandler">Deletage to callback after receive a account info message.</param>
/// <param name="tradeHandler">Deletage to callback after receive a trade message.</param>
/// <param name="orderHandler">Deletage to callback after receive a order message.</param>
void ConnectToUserDataWebSocket(string parameters, MessageHandler<AccountUpdatedMessage> accountHandler, MessageHandler<OrderOrTradeUpdatedMessage> tradeHandler, MessageHandler<OrderOrTradeUpdatedMessage> orderHandler);
/// <summary>
/// Connects to a UserData Websocket endpoint.
/// </summary>
/// <param name="parameters">Paremeters to send to the Websocket.</param>
/// <param name="accountHandler">Deletage to callback after receive a account info message.</param>
/// <param name="tradeHandler">Deletage to callback after receive a trade message.</param>
/// <param name="orderHandler">Deletage to callback after receive a order message.</param>
WebSocket ConnectToUserDataWebSocket(string parameters,
MessageHandler<AccountUpdatedMessage> accountHandler,
MessageHandler<OrderOrTradeUpdatedMessage> tradeHandler,
MessageHandler<OrderOrTradeUpdatedMessage> orderHandler,
Action<CloseEventArgs> onClose);
}
}
21 changes: 12 additions & 9 deletions Binance.API.Csharp.Client.Domain/Interfaces/IBinanceClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using WebSocketSharp;
using static Binance.API.Csharp.Client.Domain.Abstract.ApiClientAbstract;

namespace Binance.API.Csharp.Client.Domain.Interfaces
Expand Down Expand Up @@ -85,8 +86,7 @@ public interface IBinanceClient
/// <param name="timeInForce">Indicates how long an order will remain active before it is executed or expires.</param>
/// <param name="recvWindow">Specific number of milliseconds the request is valid for.</param>
/// <returns></returns>
Task<NewOrder> PostNewOrder(string symbol, decimal quantity, decimal price, OrderSide side, OrderType orderType = OrderType.LIMIT, TimeInForce timeInForce = TimeInForce.GTC, decimal icebergQty = 0m, long recvWindow = 6000000);

Task<NewOrder> PostNewOrder(string symbol, decimal quantity, decimal price, OrderSide side, OrderType orderType = OrderType.LIMIT, TimeInForce timeInForce = TimeInForce.GTC, string clientOrderId = null, decimal icebergQty = 0m, long recvWindow = 5000);
/// <summary>
/// Test new order creation and signature/recvWindow long. Creates and validates a new order but does not send it into the matching engine.
/// </summary>
Expand All @@ -98,8 +98,7 @@ public interface IBinanceClient
/// <param name="timeInForce">Indicates how long an order will remain active before it is executed or expires.</param>
/// <param name="recvWindow">Specific number of milliseconds the request is valid for.</param>
/// <returns></returns>
Task<dynamic> PostNewOrderTest(string symbol, decimal quantity, decimal price, OrderSide side, OrderType orderType = OrderType.LIMIT, TimeInForce timeInForce = TimeInForce.GTC, decimal icebergQty = 0m, long recvWindow = 6000000);

Task<dynamic> PostNewOrderTest(string symbol, decimal quantity, decimal price, OrderSide side, OrderType orderType = OrderType.LIMIT, TimeInForce timeInForce = TimeInForce.GTC, string clientOrderId = null, decimal icebergQty = 0m, long recvWindow = 5000);
/// <summary>
/// Check an order's status.
/// </summary>
Expand Down Expand Up @@ -151,7 +150,7 @@ public interface IBinanceClient
/// <param name="symbol">Ticker symbol.</param>
/// <param name="recvWindow">Specific number of milliseconds the request is valid for.</param>
/// <returns></returns>
Task<IEnumerable<Trade>> GetTradeList(string symbol, long recvWindow = 6000000);
Task<IEnumerable<Trade>> GetTradeList(string symbol, int limit, long fromId, long recvWindow = 5000);

/// <summary>
/// Submit a withdraw request.
Expand Down Expand Up @@ -210,27 +209,31 @@ public interface IBinanceClient
#endregion

#region WebSocket

/// <summary>
/// Listen to the Depth endpoint.
/// </summary>
/// <param name="symbol">Ticker symbol.</param>
/// <param name="messageHandler"></param>
/// <param name="depthHandler">Handler to be used when a message is received.</param>
void ListenDepthEndpoint(string symbol, MessageHandler<DepthMessage> messageHandler);
WebSocket ListenDepthEndpoint(string symbol, MessageHandler<DepthMessage> messageHandler, Action<CloseEventArgs> onClose);

/// <summary>
/// Listen to the Kline endpoint.
/// </summary>
/// <param name="symbol">Ticker symbol.</param>
/// <param name="interval">Time interval to retreive.</param>
/// <param name="messageHandler"></param>
/// <param name="klineHandler">Handler to be used when a message is received.</param>
void ListenKlineEndpoint(string symbol, TimeInterval interval, MessageHandler<KlineMessage> messageHandler);
WebSocket ListenKlineEndpoint(string symbol, TimeInterval interval, MessageHandler<KlineMessage> messageHandler, Action<CloseEventArgs> onClose);

/// <summary>
/// Listen to the Trades endpoint.
/// </summary>
/// <param name="symbol">Ticker symbol.</param>
/// <param name="messageHandler"></param>
/// <param name="tradeHandler">Handler to be used when a message is received.</param>
void ListenTradeEndpoint(string symbol, MessageHandler<AggregateTradeMessage> messageHandler);
WebSocket ListenTradeEndpoint(string symbol, MessageHandler<AggregateTradeMessage> messageHandler, Action<CloseEventArgs> onClose);

/// <summary>
/// Listen to the User Data endpoint.
Expand All @@ -239,7 +242,7 @@ public interface IBinanceClient
/// <param name="tradesHandler">Handler to be used when a trade message is received.</param>
/// <param name="ordersHandler">Handler to be used when a order message is received.</param>
/// <returns></returns>
string ListenUserDataEndpoint(MessageHandler<AccountUpdatedMessage> accountInfoHandler, MessageHandler<OrderOrTradeUpdatedMessage> tradesHandler, MessageHandler<OrderOrTradeUpdatedMessage> ordersHandler);
string ListenUserDataEndpoint(MessageHandler<AccountUpdatedMessage> accountInfoHandler, MessageHandler<OrderOrTradeUpdatedMessage> tradesHandler, MessageHandler<OrderOrTradeUpdatedMessage> ordersHandler, Action<CloseEventArgs> onClose);
#endregion
}
}
2 changes: 2 additions & 0 deletions Binance.API.Csharp.Client.Models/Account/Trade.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ public class Trade
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("orderId")]
public int OrderId { get; set; }
[JsonProperty("price")]
public decimal Price { get; set; }
[JsonProperty("qty")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ public class AccountUpdatedMessage
public int BuyerCommission { get; set; }
[JsonProperty("s")]
public int SellerCommission { get; set; }
[JsonProperty("t")]
[JsonProperty("T")]
public bool CanTrade { get; set; }
[JsonProperty("w")]
[JsonProperty("W")]
public bool CanWithdraw { get; set; }
[JsonProperty("d")]
[JsonProperty("D")]
public bool CanDeposit { get; set; }
[JsonProperty("u")]
public long TimeLastAccountUpdate { get; set; }
[JsonProperty("B")]
public IEnumerable<Balance> Balances { get; set; }
}
Expand Down
6 changes: 6 additions & 0 deletions Binance.API.Csharp.Client.Models/WebSocket/DepthMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@ public class DepthMessage
public IEnumerable<OrderBookOffer> Bids { get; set; }
public IEnumerable<OrderBookOffer> Asks { get; set; }
}
public class DepthPartialMessage
{
public int UpdateId { get; set; }
public IEnumerable<OrderBookOffer> Bids { get; set; }
public IEnumerable<OrderBookOffer> Asks { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class OrderOrTradeUpdatedMessage
[JsonProperty("s")]
public string Symbol { get; set; }
[JsonProperty("c")]
public string NewClientOrderId { get; set; }
public string NewClientOrderId { get; set; }
[JsonProperty("S")]
public string Side { get; set; }
[JsonProperty("o")]
Expand All @@ -22,14 +22,23 @@ public class OrderOrTradeUpdatedMessage
public decimal OriginalQuantity { get; set; }
[JsonProperty("p")]
public decimal Price { get; set; }
[JsonProperty("P")]
public decimal StopPrice { get; set; }
[JsonProperty("F")]
public decimal IcebergQuantity { get; set; }
[JsonProperty("g")]
public int g { get; set; }

[JsonProperty("C")]
public string OriginalClientOrderId { get; set; }
[JsonProperty("x")]
public string ExecutionType { get; set; }
[JsonProperty("X")]
public string Status { get; set; }
[JsonProperty("r")]
public string RejectReason { get; set; }
[JsonProperty("i")]
public int Orderid { get; set; }
public int OrderId { get; set; }
[JsonProperty("l")]
public decimal LastFilledTradeQuantity { get; set; }
[JsonProperty("z")]
Expand All @@ -44,7 +53,22 @@ public class OrderOrTradeUpdatedMessage
public long TradeTime { get; set; }
[JsonProperty("t")]
public int TradeId { get; set; }
[JsonProperty("I")]
public int I { get; set; }
[JsonProperty("w")]
public bool IsOrderWorking { get; set; }
[JsonProperty("m")]
public bool BuyerIsMaker { get; set; }
[JsonProperty("M")]
public bool M { get; set; }
[JsonProperty("O")]
public int O { get; set; }
[JsonProperty("Z")]
public decimal Z { get; set; }

public override string ToString()
{
return JsonConvert.SerializeObject(this, Formatting.Indented);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http" />
<Reference Include="websocket-sharp, Version=1.0.2.32519, Culture=neutral, PublicKeyToken=5660b08a1845a91e, processorArchitecture=MSIL">
<HintPath>..\packages\WebSocketSharp-NonPreRelease.1.0.0\lib\net35\websocket-sharp.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="BinanceTest.cs" />
Expand Down
7 changes: 7 additions & 0 deletions Binance.API.Csharp.Client.Test/BinanceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ public void GetServerTime()
{
var serverTime = binanceClient.GetServerTime().Result;
}

[TestMethod]
public void ExchangeInfo()
{
var rules = binanceClient.GetTradingRulesAsync().Result;
Thread.Sleep(1000);
}
#endregion

#region Market Data
Expand Down
1 change: 1 addition & 0 deletions Binance.API.Csharp.Client.Test/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
<package id="MSTest.TestAdapter" version="1.2.0" targetFramework="net461" />
<package id="MSTest.TestFramework" version="1.2.0" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net461" />
<package id="WebSocketSharp-NonPreRelease" version="1.0.0" targetFramework="net461" />
</packages>
Loading