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();
}
}