From 577cb2e6f5cdd831768916bcc1d1c05a1ae55c10 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Wed, 25 May 2022 18:42:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E5=8D=95=E8=AE=B0=E5=BD=95=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E8=AE=A2=E5=8D=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Spot/D21OrderPublishBusiness.cs | 1 + .../TradeBusiness/BaseTradeBusiness.cs | 10 +-- .../TradeBusiness/Spot/D21TradeBusiness.cs | 2 + .../Db/Order/SpotOrder.cs | 7 ++ SDKAdapter/APIClient/BaseAPIClient.cs | 3 +- SDKAdapter/APIClient/BinanceAPIClient.cs | 4 +- SDKTestConsole/Program.cs | 74 ++++++++++++++----- 7 files changed, 74 insertions(+), 27 deletions(-) diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs index 2d802c8..8f58b63 100644 --- a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs +++ b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs @@ -275,6 +275,7 @@ namespace Binance.TradeRobot.Business var stopLossOrder = new SpotOrder() { Id = stopOrderId, + ClientOrderId = stopLossClientOrderId, CreateTime = DateTime.Now, ExchangeId = d21Robot.ExchangeId, LoanAmount = 0M, diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs index ae50bfd..0a62cc4 100644 --- a/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs @@ -60,14 +60,14 @@ namespace Binance.TradeRobot.Business { if (baseAPIClient == null) baseAPIClient = GetBaseAPIClient(d21Robot.ExchangeId, d21Robot.ExchangeAPIKey.AccountId, d21Robot.ExchangeAPIKey.APIKey, d21Robot.ExchangeAPIKey.SecretKey); - var stopLossOrderIdList = fsql.Select().Where(o => o.OrderType == Enums.OrderType.STOP_LOSS_LIMIT && + var stopLossOrderList = fsql.Select().Where(o => o.OrderType == Enums.OrderType.STOP_LOSS_LIMIT && o.State == Enums.SpotOrderState.Created && - o.RobotId == d21Robot.Id).ToList(o => o.Id); - if (stopLossOrderIdList == null || stopLossOrderIdList.Count() == 0) + o.RobotId == d21Robot.Id).ToList(o => new { o.Id, o.ClientOrderId }); + if (stopLossOrderList == null || stopLossOrderList.Count() == 0) return; - foreach (var stopLossOrderId in stopLossOrderIdList) - baseAPIClient.CancelIsolateMarginOrder(d21Robot.Symbol, stopLossOrderId); + foreach (var stopLossOrder in stopLossOrderList) + baseAPIClient.CancelIsolateMarginOrder(d21Robot.Symbol, stopLossOrder.Id, stopLossOrder.ClientOrderId); } } } diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs index 012b789..a2c0132 100644 --- a/Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs @@ -218,6 +218,7 @@ namespace Binance.TradeRobot.Business var buyOrder = new SpotOrder() { Id = orderId, + ClientOrderId = clientOrderId, CreateTime = DateTime.Now, ExchangeId = robot.ExchangeId, LoanAmount = diffAmount, @@ -332,6 +333,7 @@ namespace Binance.TradeRobot.Business var sellOrder = new SpotOrder() { Id = orderId, + ClientOrderId = clientOrderId, CreateTime = DateTime.Now, ExchangeId = robot.ExchangeId, OrderType = Enums.OrderType.MARKET, diff --git a/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs b/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs index c6e1ea5..6e459a6 100644 --- a/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs +++ b/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs @@ -12,6 +12,13 @@ namespace Binance.TradeRobot.Model.Db [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } + /// + /// 客户端订单号 + /// + [Column(StringLength = 50)] + public string ClientOrderId { get; set; } + + [Column(DbType = "datetime")] public DateTime CreateTime { get; set; } diff --git a/SDKAdapter/APIClient/BaseAPIClient.cs b/SDKAdapter/APIClient/BaseAPIClient.cs index 1b920c5..7542980 100644 --- a/SDKAdapter/APIClient/BaseAPIClient.cs +++ b/SDKAdapter/APIClient/BaseAPIClient.cs @@ -98,8 +98,9 @@ namespace SDKAdapter.APIClient /// /// /// + /// /// - public virtual void CancelIsolateMarginOrder(string symbol, long orderId) + public virtual void CancelIsolateMarginOrder(string symbol, long orderId, string clientOrderId) { throw new NotImplementedException(); } diff --git a/SDKAdapter/APIClient/BinanceAPIClient.cs b/SDKAdapter/APIClient/BinanceAPIClient.cs index 353a074..e11f5d8 100644 --- a/SDKAdapter/APIClient/BinanceAPIClient.cs +++ b/SDKAdapter/APIClient/BinanceAPIClient.cs @@ -135,9 +135,9 @@ namespace SDKAdapter.APIClient return r.Data.Id; } - public override void CancelIsolateMarginOrder(string symbol, long orderId) + public override void CancelIsolateMarginOrder(string symbol, long orderId, string clientOrderId) { - _ = binanceClient.SpotApi.Trading.CancelMarginOrderAsync(symbol, orderId, isIsolated: true).Result; + _ = binanceClient.SpotApi.Trading.CancelMarginOrderAsync(symbol, orderId, isIsolated: true, newClientOrderId: clientOrderId).Result; } } } diff --git a/SDKTestConsole/Program.cs b/SDKTestConsole/Program.cs index 68550e3..40a0830 100644 --- a/SDKTestConsole/Program.cs +++ b/SDKTestConsole/Program.cs @@ -4,7 +4,9 @@ using Binance.TradeRobot.Model.Base; using CryptoExchange.Net.Authentication; using Newtonsoft.Json; using SDKAdapter.APIClient; +using SDKAdapter.WebSockets.Order.Spot; using System; +using System.Threading.Tasks; namespace SDKTestConsole { @@ -12,34 +14,68 @@ namespace SDKTestConsole { private static System.Threading.Timer timer; + private static SpotOrderWebSocketClient orderWebSocketClient; static void Main(string[] args) { - var apiKey = "RsQ5RuhYbNRXCTGAQXhwb5Dt3jgPnwKXfR1OXz0qWmf3IsAC7zPQd14WGIr18rDA"; - var secret = "yxW4PPb65rVpdo7fMt2mZcbNOtjOe3J4fMSRVtX5YJfj7kRzHW3dY6xfoW4jje1I"; + var apiKey = "pXKdUPbGN4DNar2f2HRoL2qxHoCWcLNf9V5uHTL2lBVCxz66eE8PMPwBw9h8RbKf"; + var secret = "c14tJd7kpMnePKRDoo4nzZk4bIn9bDO8ZCYo69amB4uspLgO5s4GlzYvTwD2zYav"; var client = BaseAPIClient.Create(Enums.Exchange.Binance, 0, apiKey, secret); //逐仓杠杆账户资产 - var marginList = client.GetIsolatedMarginAccountAssets(); - var s = JsonConvert.SerializeObject(marginList); + //var marginList = client.GetIsolatedMarginAccountAssets(); + //var s = JsonConvert.SerializeObject(marginList); - var spotClientOption = new BinanceApiClientOptions() - { - BaseAddress = "https://api.binance.com", - ApiCredentials = new ApiCredentials(apiKey, secret) - }; - var usdFuturesClientOption = new BinanceApiClientOptions() - { - BaseAddress = "https://fapi.binance.com", - ApiCredentials = new ApiCredentials(apiKey, secret) - }; - var binanceClient = new BinanceClient(new BinanceClientOptions() - { - UsdFuturesApiOptions = usdFuturesClientOption, - SpotApiOptions = spotClientOption - }); + //var spotClientOption = new BinanceApiClientOptions() + //{ + // BaseAddress = "https://api.binance.com", + // ApiCredentials = new ApiCredentials(apiKey, secret) + //}; + //var usdFuturesClientOption = new BinanceApiClientOptions() + //{ + // BaseAddress = "https://fapi.binance.com", + // ApiCredentials = new ApiCredentials(apiKey, secret) + //}; + //var binanceClient = new BinanceClient(new BinanceClientOptions() + //{ + // UsdFuturesApiOptions = usdFuturesClientOption, + // SpotApiOptions = spotClientOption + //}); var binanceSocketClient = new BinanceSocketClient(); + //var newClientOrderId = "abcd_286129845448773_1"; + //var orderId = client.IsolatedMarginPlaceOrder("ETHUSDT", Enums.TradeDirection.Buy, Enums.OrderType.MARKET, quoteAmount: 20M, newClientOrderId: newClientOrderId); + + var logger = NLog.LogManager.GetLogger("test"); + + + + var stopLossClientOrderId = "stoploss2_286129845448773_1"; + long stopLossOrderId = 0; + + while (true) + { + var input = Console.ReadLine(); + if (input == "start") + { + orderWebSocketClient = SpotOrderWebSocketClient.Create(Enums.BusinessType.IsolateMargin, + Enums.Exchange.Binance, + 0, + apiKey, + secret, + logger, + null); + orderWebSocketClient.Start("ETHUSDT"); + } + if (input == "down") + { + stopLossOrderId = client.IsolatedMarginPlaceOrder("ETHUSDT", Enums.TradeDirection.Sell, Enums.OrderType.STOP_LOSS_LIMIT, quantity: 0.0101M, price: 1876M, stopPrice: 1876M, newClientOrderId: stopLossClientOrderId); + } + if (input == "cancel") + { + client.CancelIsolateMarginOrder("ETHUSDT", stopLossOrderId, stopLossClientOrderId); + } + } Console.ReadKey(); } }