diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs index 5d2bf40..d01380e 100644 --- a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs @@ -145,7 +145,7 @@ namespace Binance.TradeRobot.Business if (balance < previewTradeAmount) { #region 借币 - step = "借币"; + step = "验证借币比例"; diffAmount = previewTradeAmount - balance; var diffRatio = diffAmount / balance * 100; //借币比例 @@ -168,6 +168,7 @@ namespace Binance.TradeRobot.Business #region 验证交易所的最大可借额度 try { + step = "验证交易所的最大可借额度"; var exchangeMaxLoanAmount = apiClient.QueryMaxLoanAmount(robot.Symbol); if (exchangeMaxLoanAmount < diffAmount) { @@ -199,7 +200,24 @@ namespace Binance.TradeRobot.Business #region 借币 if (diffAmount > 0M) { + step = "借币"; + try + { + } + catch (Exception borrowex) + { + logList.Add(new ExecutionLog() + { + Id = idGenerator.NewLong(), + SourceSingal = Enums.SingalType.多交叉, + RobotId = robot.Id, + CreateTime = DateTime.Now, + Content = $"借币失败 {borrowex.Message}" + }); + previewTradeAmount = balance; //无法借币,使用余额下单 + diffAmount = 0M; + } } #endregion diff --git a/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs b/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs index 3fc7970..5bc66b5 100644 --- a/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs +++ b/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs @@ -97,6 +97,18 @@ namespace Binance.TradeRobot.Model.Db [Column(MapType = typeof(int), DbType = "int")] public Enums.OrderType OrderType { get; set; } + + /// + /// 借币金额 + /// + [Column(DbType = "decimal(18,8)")] + public decimal LoanAmount { get; set; } = 0.0M; + + /// + /// 借币利息 + /// + [Column(DbType = "decimal(18,8)")] + public decimal LoanInterest { get; set; } = 0.0M; } } diff --git a/SDKAdapter/APIClient/BaseAPIClient.cs b/SDKAdapter/APIClient/BaseAPIClient.cs index 3fa81ef..c9c55e2 100644 --- a/SDKAdapter/APIClient/BaseAPIClient.cs +++ b/SDKAdapter/APIClient/BaseAPIClient.cs @@ -63,7 +63,7 @@ namespace SDKAdapter.APIClient /// /// /// 还币利息 - public virtual decimal IsolatedMarginRepayLoan(string symbol, decimal repayAmount) + public virtual decimal IsolatedMarginRepay(string symbol, decimal repayAmount) { throw new NotImplementedException(); } diff --git a/SDKAdapter/APIClient/BinanceAPIClient.cs b/SDKAdapter/APIClient/BinanceAPIClient.cs index 3df96fa..c8dc2e3 100644 --- a/SDKAdapter/APIClient/BinanceAPIClient.cs +++ b/SDKAdapter/APIClient/BinanceAPIClient.cs @@ -82,9 +82,25 @@ namespace SDKAdapter.APIClient }; } - public override decimal IsolatedMarginRepayLoan(string symbol, decimal repayAmount) + public override decimal IsolatedMarginRepay(string symbol, decimal repayAmount) { - return base.IsolatedMarginRepayLoan(symbol, repayAmount); + var r = binanceClient.SpotApi.Account.MarginRepayAsync("USDT", repayAmount, true, symbol).Result; + if (!r.Success) + throw new Exception($"还币失败 {r.Error?.Message}"); + var txId = r.Data.TransactionId; + + var r1 = binanceClient.SpotApi.Account.GetMarginRepaysAsync("USDT", txId, isolatedSymbol: symbol).Result; + if (!r1.Success) + throw new Exception($"还币成功,查询还贷记录失败 {r1.Error?.Message}"); + try + { + return r1.Data.Rows.ToList().Sum(x => x.Interest); + } + catch + { + return 0M; + } + } } } diff --git a/SDKTestConsole/Program.cs b/SDKTestConsole/Program.cs index 232873c..446fc67 100644 --- a/SDKTestConsole/Program.cs +++ b/SDKTestConsole/Program.cs @@ -11,12 +11,22 @@ namespace SDKTestConsole var apiKey = "NnLXgcdUAZ8FAye4Qge3zrrdg5o7ufoWbgtYsKzgfIXz0OMz27G1Kx4SykMzw7YS"; var secret = "lpJ3t50osPx6lEUerVFMdoKsZ6uHPc769OFPGtfhcoPANpv97CEcvR3pz3Bezhhv"; var client = BaseAPIClient.Create(Enums.Exchange.Binance, 0, apiKey, secret); + //逐仓杠杆账户资产 //var marginList = client.GetIsolatedMarginAccountAssets(); //var s = JsonConvert.SerializeObject(marginList); - var maxLoan = client.QueryMaxLoanAmount("ETHUSDT"); - Console.WriteLine(maxLoan); + //查询最大借币额度 + //var maxLoan = client.QueryMaxLoanAmount("ETHUSDT"); + //Console.WriteLine(maxLoan); + + //var r1 = client.IsolatedMarginLoan("ETHUSDT", 10M); + //var r2 = client.IsolatedMarginLoan("ETHUSDT", 10M); + //Console.WriteLine(r2.AccountLoanAmount); + + + var r3 = client.IsolatedMarginRepay("ETHUSDT", 20M); + Console.WriteLine(r3); Console.ReadKey(); } }