diff --git a/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs b/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs index 8caef1a..ca10274 100644 --- a/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs +++ b/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs @@ -1,4 +1,4 @@ -using Binance.TradeRobot.Business.Exchange; +using Binance.TradeRobot.Business; using Binance.TradeRobot.Model.Base; using Binance.TradeRobot.Model.Dto; using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -44,7 +44,7 @@ namespace Binance.TradeRobot.API.Controllers /// /// [HttpGet("{exchange}")] - public IList GetSymbolList(Enums.Exchange exchange) + public IList GetSymbolList([FromRoute] Enums.Exchange exchange) { return exchangeBusiness.GetSymbolList(exchange); } diff --git a/Binance.TradeRobot.API/Controllers/SingalController.cs b/Binance.TradeRobot.API/Controllers/SingalController.cs index 36b46a5..28b6386 100644 --- a/Binance.TradeRobot.API/Controllers/SingalController.cs +++ b/Binance.TradeRobot.API/Controllers/SingalController.cs @@ -1,4 +1,4 @@ -using Binance.TradeRobot.Business.Business; +using Binance.TradeRobot.Business; using Binance.TradeRobot.Model.Dto; using Microsoft.AspNetCore.Mvc; diff --git a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml index f9c37ab..e1c6af7 100644 --- a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml +++ b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml @@ -4,7 +4,7 @@ Binance.TradeRobot.Business - + 获取APIKey未使用交易所账户列表 @@ -66,7 +66,7 @@ 现货策略 - + 趋势变化 @@ -74,8 +74,9 @@ + - + 多交叉 @@ -84,8 +85,9 @@ 是否为补救信号 + - + 空交叉 @@ -93,7 +95,8 @@ - 是否为补救信号 + 是否为补救信号' + diff --git a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs index 7360e7c..1d91ee3 100644 --- a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs @@ -16,7 +16,7 @@ using System.Threading; using System.Threading.Tasks; using Yitter.IdGenerator; -namespace Binance.TradeRobot.Business.Exchange +namespace Binance.TradeRobot.Business { [BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)] public class ExchangeBusiness : BaseBusiness @@ -74,6 +74,12 @@ namespace Binance.TradeRobot.Business.Exchange return fsql.Select().Where(s => s.ExchangeId == exchange).ToList(); } + public SymbolInfoResponse GetSymbol(Enums.Exchange exchange, string symbol) + { + return fsql.Select().Where(s => s.ExchangeId == exchange && s.Symbol == symbol).ToOne(); + } + + public void AddExchangeAccount(AddExchangeAccountRequest addExchangeAccountRequest) { if (addExchangeAccountRequest.Id == 0 || diff --git a/Binance.TradeRobot.Business/Business/RobotBusiness.cs b/Binance.TradeRobot.Business/Business/RobotBusiness.cs index 20ac87d..d76282c 100644 --- a/Binance.TradeRobot.Business/Business/RobotBusiness.cs +++ b/Binance.TradeRobot.Business/Business/RobotBusiness.cs @@ -199,56 +199,57 @@ namespace Binance.TradeRobot.Business bool isLoadRecentTradeProfit = true, bool isLoadAPIKey = false) { - var robotList = fsql.Select().InnerJoin((r, s, ra, d, e) => r.Id == ra.RobotId) - .InnerJoin((r, s, ra, d, e) => r.Symbol == s.Symbol && r.ExchangeId == s.ExchangeId) - .InnerJoin((r, s, ra, d, e) => r.Id == d.RobotId) - .InnerJoin((r, s, ra, d, e) => r.Id == e.RobotId) - .WhereIf(robotState != null, (r, s, ra, d, e) => r.State == robotState) - .WhereIf(signalPeriod != null, (r, s, ra, d, e) => d.PeriodicSignal == signalPeriod) - .WhereIf(!string.IsNullOrEmpty(symbol), (r, s, ra, d, e) => r.Symbol == symbol) - .Where((r, s, ra, d, e) => r.TradePolicy == Enums.TradePolicy.D21) - .ToList((r, s, ra, d, e) => new Robot() - { - Id = r.Id, - BusinessType = r.BusinessType, - ExchangeId = r.ExchangeId, - Symbol = r.Symbol, - State = r.State, - RunningTime = r.RunningTime, - CreateTime = r.CreateTime, - TradePolicy = r.TradePolicy, + var robotList = fsql.Select().InnerJoin((r, ra, d, e) => r.Id == ra.RobotId) + .InnerJoin((r, ra, d, e) => r.Id == d.RobotId) + .InnerJoin((r, ra, d, e) => r.Id == e.RobotId) + .WhereIf(robotState != null, (r, ra, d, e) => r.State == robotState) + .WhereIf(signalPeriod != null, (r, ra, d, e) => d.PeriodicSignal == signalPeriod) + .WhereIf(!string.IsNullOrEmpty(symbol), (r, ra, d, e) => r.Symbol == symbol) + .Where((r, ra, d, e) => r.TradePolicy == Enums.TradePolicy.D21) + .ToList((r, ra, d, e) => new Robot + { + Id = r.Id, + BusinessType = r.BusinessType, + ExchangeId = r.ExchangeId, + Symbol = r.Symbol, + State = r.State, + RunningTime = r.RunningTime, + CreateTime = r.CreateTime, + TradePolicy = r.TradePolicy, - SymbolId = s.Id, - SymbolSaleQuantityAccuracy = s.SaleQuantityAccuracy, + //SymbolId = s.Id, + //SymbolSaleQuantityAccuracy = s.SaleQuantityAccuracy, - RobotAccountId = ra.Id, - ClosePositionCount = ra.ClosePositionCount, - WinCount = ra.WinCount, - LoanAmount = ra.LoanAmount, - SoptCurrentcyAmount = ra.SoptCurrentcyAmount, - SpotCurrencyQuantity = ra.SpotCurrencyQuantity, - TotalProfit = ra.TotalProfit, + RobotAccountId = ra.Id, + ClosePositionCount = ra.ClosePositionCount, + WinCount = ra.WinCount, + LoanAmount = ra.LoanAmount, + SoptCurrentcyAmount = ra.SoptCurrentcyAmount, + SpotCurrencyQuantity = ra.SpotCurrencyQuantity, + TotalProfit = ra.TotalProfit, + + ExchangeAccountId = e.AccountId, + ExchangeAPIKey = e.APIKey, + ExchangeSecretKey = e.SecretKey, + + D21ExecutionMode = d.ExecutionMode, + D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase, + D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal, + D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio, + D21PeriodicSignal = d.PeriodicSignal, + D21PolicyId = d.Id, + D21Position = d.Position, + D21Assets = d.Assets, + D21Level1PositionStopLossRatio = d.Level1PositionStopLossRatio, + D21Level1PriceStopLossRatio = d.Level1PriceStopLossRatio, + D21Level2PositionStopLossRatio = d.Level2PositionStopLossRatio, + D21Level2PriceStopLossRatio = d.Level2PriceStopLossRatio, + D21MaxExchangeLoanRatio = d.MaxExchangeLoanRatio, + D21MaxSystemLoanRatio = d.MaxSystemLoanRatio, + D21CreateTime = d.CreateTime + }).Map>(); - ExchangeAccountId = e.AccountId, - ExchangeAPIKey = e.APIKey, - ExchangeSecretKey = e.SecretKey, - D21ExecutionMode = d.ExecutionMode, - D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase, - D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal, - D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio, - D21PeriodicSignal = d.PeriodicSignal, - D21PolicyId = d.Id, - D21Position = d.Position, - D21Assets = d.Assets, - D21Level1PositionStopLossRatio = d.Level1PositionStopLossRatio, - D21Level1PriceStopLossRatio = d.Level1PriceStopLossRatio, - D21Level2PositionStopLossRatio = d.Level2PositionStopLossRatio, - D21Level2PriceStopLossRatio = d.Level2PriceStopLossRatio, - D21MaxExchangeLoanRatio = d.MaxExchangeLoanRatio, - D21MaxSystemLoanRatio = d.MaxSystemLoanRatio, - D21CreateTime = d.CreateTime - }).Map>(); if (isLoadRecentTradeProfit) { //统计近期订单利润 @@ -259,7 +260,6 @@ namespace Binance.TradeRobot.Business foreach (var r in robotList) r.ExchangeAPIKey = null; } - return robotList; } } diff --git a/Binance.TradeRobot.Business/Business/SingalBusiness.cs b/Binance.TradeRobot.Business/Business/SingalBusiness.cs index 8c24e5e..6b8bc5a 100644 --- a/Binance.TradeRobot.Business/Business/SingalBusiness.cs +++ b/Binance.TradeRobot.Business/Business/SingalBusiness.cs @@ -1,5 +1,6 @@ using Binance.TradeRobot.Common.DI; using Binance.TradeRobot.Model.Base; +using Binance.TradeRobot.Model.Db; using Binance.TradeRobot.Model.Dto; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; @@ -8,12 +9,13 @@ using System.Linq; using System.Threading.Tasks; using Yitter.IdGenerator; -namespace Binance.TradeRobot.Business.Business +namespace Binance.TradeRobot.Business { [BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)] public class SingalBusiness : BaseBusiness { private RobotBusiness robotBusiness; + private ExchangeBusiness exchangeBusiness; private IEnumerable tradeBusinessList; public SingalBusiness(IFreeSql fsql, @@ -21,9 +23,11 @@ namespace Binance.TradeRobot.Business.Business IIdGenerator idGenerator, IMemoryCache memoryCache, RobotBusiness robotBusiness, + ExchangeBusiness exchangeBusiness, IEnumerable tradeBusinessList) : base(fsql, logManager, idGenerator, memoryCache) { this.robotBusiness = robotBusiness; + this.exchangeBusiness = exchangeBusiness; this.tradeBusinessList = tradeBusinessList; } @@ -34,7 +38,9 @@ namespace Binance.TradeRobot.Business.Business if (robotList == null || robotList.Count() == 0) throw new BusinessException("未找到符合条件的机器人"); - //var robot = robotList.FirstOrDefault(); + var symbolInfo = exchangeBusiness.GetSymbol(robotList[0].ExchangeId, robotList[0].Symbol); + if (symbolInfo == null) + throw new BusinessException($"未找到交易对{robotList[0].Symbol}({robotList[0].ExchangeId})"); var d21TradeBusiness = tradeBusinessList.FirstOrDefault(t => t.TradePolicy == Enums.TradePolicy.D21); foreach (var robot in robotList) @@ -43,7 +49,7 @@ namespace Binance.TradeRobot.Business.Business { case Enums.SingalType.小趋势看空: case Enums.SingalType.小趋势看多: - Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot)); + Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot, symbolInfo)); break; case Enums.SingalType.多交叉: diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs index 3953ae1..1a47caa 100644 --- a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs @@ -41,7 +41,7 @@ namespace Binance.TradeRobot.Business }; } - public void TrendChanged(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse + public void TrendChanged(T singalRequest, T1 robot, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse { try { @@ -67,7 +67,7 @@ namespace Binance.TradeRobot.Business } } - public void LongCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse + public void LongCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse { string step = string.Empty; var logList = new List(); @@ -247,7 +247,7 @@ namespace Binance.TradeRobot.Business } } - public void ShortCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse + public void ShortCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse { } diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs index 1cf147a..f09128e 100644 --- a/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs @@ -14,7 +14,8 @@ namespace Binance.TradeRobot.Business /// /// /// - void TrendChanged(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse; + /// + void TrendChanged(T singalRequest, T1 robot, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse; /// /// 多交叉 @@ -24,7 +25,8 @@ namespace Binance.TradeRobot.Business /// /// /// 是否为补救信号 - void LongCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse; + /// + void LongCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse; /// /// 空交叉 @@ -33,7 +35,8 @@ namespace Binance.TradeRobot.Business /// /// /// - /// 是否为补救信号 - void ShortCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse; + /// 是否为补救信号' + /// + void ShortCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse; } } diff --git a/Binance.TradeRobot.Model/Base/MappingProfiles.cs b/Binance.TradeRobot.Model/Base/MappingProfiles.cs index 1167d20..684e838 100644 --- a/Binance.TradeRobot.Model/Base/MappingProfiles.cs +++ b/Binance.TradeRobot.Model/Base/MappingProfiles.cs @@ -26,11 +26,11 @@ namespace Binance.TradeRobot.Model.Base .ForPath(t => t.RobotAccount.WinCount, opt => opt.MapFrom(f => f.WinCount)) .ForPath(t => t.ExchangeAPIKey.AccountId, opt => opt.MapFrom(f => f.ExchangeAccountId)) .ForPath(t => t.ExchangeAPIKey.APIKey, opt => opt.MapFrom(f => f.ExchangeAPIKey)) - .ForPath(t => t.ExchangeAPIKey.SecretKey, opt => opt.MapFrom(f => f.ExchangeSecretKey)) - .ForPath(t => t.SymbolInfo.Id, opt => opt.MapFrom(f => f.SymbolId)) - .ForPath(t => t.SymbolInfo.Symbol, opt => opt.MapFrom(f => f.Symbol)) - .ForPath(t => t.SymbolInfo.SaleQuantityAccuracy, opt => opt.MapFrom(f => f.SymbolSaleQuantityAccuracy)) - .ForPath(t => t.SymbolInfo.ExchangeId, opt => opt.MapFrom(f => f.ExchangeId)); + .ForPath(t => t.ExchangeAPIKey.SecretKey, opt => opt.MapFrom(f => f.ExchangeSecretKey)); + //.ForPath(t => t.SymbolInfo.Id, opt => opt.MapFrom(f => f.SymbolId)) + //.ForPath(t => t.SymbolInfo.Symbol, opt => opt.MapFrom(f => f.Symbol)) + //.ForPath(t => t.SymbolInfo.SaleQuantityAccuracy, opt => opt.MapFrom(f => f.SymbolSaleQuantityAccuracy)) + //.ForPath(t => t.SymbolInfo.ExchangeId, opt => opt.MapFrom(f => f.ExchangeId)); CreateMap().IncludeBase() .ForPath(t => t.D21Policy.Id, opt => opt.MapFrom(f => f.D21PolicyId)) .ForPath(t => t.D21Policy.RobotId, opt => opt.MapFrom(f => f.Id)) diff --git a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml index 6904c88..4af71c6 100644 --- a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml +++ b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml @@ -344,11 +344,6 @@ 运行时长(s) - - - 卖币精度 - - 平仓次数 diff --git a/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs b/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs index 22e25df..26a9605 100644 --- a/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs +++ b/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs @@ -15,7 +15,7 @@ namespace Binance.TradeRobot.Model.Db [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } - [Column(DbType = "int", MapType = typeof(int))] + [Column(MapType = typeof(int), DbType = "int")] public Enums.Exchange ExchangeId { get; set; } /// diff --git a/Binance.TradeRobot.Model/Db/Robot/Robot.cs b/Binance.TradeRobot.Model/Db/Robot/Robot.cs index 76cf1d8..bfa2d91 100644 --- a/Binance.TradeRobot.Model/Db/Robot/Robot.cs +++ b/Binance.TradeRobot.Model/Db/Robot/Robot.cs @@ -36,16 +36,16 @@ namespace Binance.TradeRobot.Model.Db [Column(MapType = typeof(int), DbType = "int")] public Enums.Exchange ExchangeId { get; set; } - #region Symbol Extension - /// - /// 卖币精度 - /// - [Column(IsIgnore = true)] - public long SymbolId { get; set; } - - [Column(IsIgnore = true)] - public int SymbolSaleQuantityAccuracy { get; set; } - #endregion + //#region Symbol Extension + //[Column(IsIgnore = true)] + //public long SymbolId { get; set; } + + ///// + ///// 卖币精度 + ///// + //[Column(IsIgnore = true)] + //public int SymbolSaleQuantityAccuracy { get; set; } + //#endregion #region RobotAccount Extension diff --git a/SDKAdapter/APIClient/BaseAPIClient.cs b/SDKAdapter/APIClient/BaseAPIClient.cs index c9c55e2..8dce4ee 100644 --- a/SDKAdapter/APIClient/BaseAPIClient.cs +++ b/SDKAdapter/APIClient/BaseAPIClient.cs @@ -67,5 +67,30 @@ namespace SDKAdapter.APIClient { throw new NotImplementedException(); } + + /// + /// 逐仓杠杆下单接口 + /// + /// 交易对 + /// 交易方向 + /// 订单类型 + /// 基础币数量,卖单必传 + /// 报价币金额,市价买单必传 + /// 下单价格,市价不传 + /// 止损价格,与STOP_LOSS,STOP_LOSS_LIMIT一起使用 + /// 客户端订单Id + /// 交易所订单Id + /// + public virtual long IsolatedMarginPlaceOrder(string symbol, + Enums.TradeDirection tradeDirection, + Enums.OrderType orderType, + decimal? quantity, + decimal? quoteAmount, + decimal? price, + decimal? stopPrice, + string newClientOrderId) + { + throw new NotImplementedException(); + } } } diff --git a/SDKAdapter/APIClient/BinanceAPIClient.cs b/SDKAdapter/APIClient/BinanceAPIClient.cs index c8dc2e3..faa36ad 100644 --- a/SDKAdapter/APIClient/BinanceAPIClient.cs +++ b/SDKAdapter/APIClient/BinanceAPIClient.cs @@ -1,5 +1,6 @@ using Binance.Net.Clients; using Binance.Net.Objects; +using Binance.TradeRobot.Model.Base; using CryptoExchange.Net.Authentication; using SDKAdapter.Model; using System; @@ -102,5 +103,36 @@ namespace SDKAdapter.APIClient } } + + public override long IsolatedMarginPlaceOrder(string symbol, + Enums.TradeDirection tradeDirection, + Enums.OrderType orderType, + decimal? quantity, + decimal? quoteAmount, + decimal? price, + decimal? stopPrice, + string newClientOrderId) + { + var binanceOrderSite = (Binance.Net.Enums.OrderSide)(int)tradeDirection; + var binanceOrderType = (Binance.Net.Enums.SpotOrderType)(int)orderType; + Binance.Net.Enums.TimeInForce? timeInForce = null; + if (orderType == Enums.OrderType.STOP_LOSS_LIMIT) + timeInForce = Binance.Net.Enums.TimeInForce.GoodTillCanceled; + + var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync(symbol, + binanceOrderSite, + binanceOrderType, + quantity, + quoteAmount, + newClientOrderId, + price: price, + timeInForce: timeInForce, + stopPrice: stopPrice, + isIsolated: true, + orderResponseType: Binance.Net.Enums.OrderResponseType.Acknowledge).Result; + if (!r.Success) + throw new Exception($"下单失败 {orderType} {tradeDirection} {r.Error?.Message}"); + return r.Data.Id; + } } } diff --git a/SDKTestConsole/Program.cs b/SDKTestConsole/Program.cs index e8a3ba3..35a7178 100644 --- a/SDKTestConsole/Program.cs +++ b/SDKTestConsole/Program.cs @@ -55,7 +55,7 @@ namespace SDKTestConsole //var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT", // Binance.Net.Enums.OrderSide.Buy, // Binance.Net.Enums.SpotOrderType.Market, - // quoteQuantity: 20M, //报价币金额 + // quoteQuantity: 30M, //报价币金额 // //quantity: 100M, // //timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled, // //stopPrice: 1899M, @@ -78,19 +78,34 @@ namespace SDKTestConsole //止损卖币 - //var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT", - // Binance.Net.Enums.OrderSide.Sell, - // Binance.Net.Enums.SpotOrderType.StopLossLimit, - // quantity: 0.00008040M, - // price: 1899M, - // //quoteQuantity: 20M, //报价币金额 - // //quantity: 100M, - // timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled, - // stopPrice: 1899M, - // isIsolated: true, - // orderResponseType: Binance.Net.Enums.OrderResponseType.Full).Result; - //var s = JsonConvert.SerializeObject(r); - //Console.WriteLine(s); + var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT", + Binance.Net.Enums.OrderSide.Sell, + Binance.Net.Enums.SpotOrderType.StopLossLimit, + quantity: 0.0149M, + price: 1699M, + //quoteQuantity: 20M, //报价币金额 + //quantity: 100M, + timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled, + stopPrice: 1699M, + isIsolated: true, + orderResponseType: Binance.Net.Enums.OrderResponseType.Full).Result; + + var s = JsonConvert.SerializeObject(r); + Console.WriteLine(s); + + var r1 = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT", + Binance.Net.Enums.OrderSide.Sell, + Binance.Net.Enums.SpotOrderType.StopLossLimit, + quantity: 0.0149M, + price: 1699M, + //quoteQuantity: 20M, //报价币金额 + //quantity: 100M, + timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled, + stopPrice: 1699M, + isIsolated: true, + orderResponseType: Binance.Net.Enums.OrderResponseType.Full).Result; + var s1 = JsonConvert.SerializeObject(r1); + Console.WriteLine(s1); Console.ReadKey(); } }