From 6e49c3938230956ee460059931ae90291de8e6ad Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Thu, 16 Jun 2022 16:45:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A2=E6=8D=9F=E6=8C=82=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Binance.TradeRobot.Business/Business/ExchangeBusiness.cs | 6 ++++-- .../OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs | 2 +- Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs index 4b487ff..11fc03e 100644 --- a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs @@ -46,14 +46,17 @@ namespace Binance.TradeRobot.Business if (!symbol.EndsWith("USDT")) continue; var stepSize = jtoken_symbol["filters"]?.FirstOrDefault(jtoken_filters => jtoken_filters.Value("filterType") == "LOT_SIZE")?.Value("stepSize") ?? 0M; + var tickSize = jtoken_symbol["filters"]?.FirstOrDefault(jtoken_filters => jtoken_filters.Value("filterType") == "PRICE_FILTER")?.Value("tickSize") ?? 0M; var saleAccuracy = stepSize != 0 ? (1 / stepSize).ToString().Length - 1 : 0; + var priceAccuracy = tickSize != 0 ? (1 / tickSize).ToString().Length - 1 : 0; var symbolInfo = new SymbolInfo() { Id = idGenerator.NewLong(), ExchangeId = Enums.Exchange.Binance, CreateTime = DateTime.Now, Symbol = symbol, - SaleQuantityAccuracy = saleAccuracy + SaleQuantityAccuracy = saleAccuracy, + PriceAccuracy = priceAccuracy }; symbolList.Add(symbolInfo); } @@ -79,7 +82,6 @@ namespace Binance.TradeRobot.Business 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/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs index 6a17b5e..d31cfce 100644 --- a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs +++ b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs @@ -276,7 +276,7 @@ namespace Binance.TradeRobot.Business var positionStopLossRatio = (isFirstStopLoss ? d21Robot.D21Policy.Level1PositionStopLossRatio : d21Robot.D21Policy.Level2PositionStopLossRatio) / 100; var priceStopLossRatio = (isFirstStopLoss ? d21Robot.D21Policy.Level1PriceStopLossRatio : d21Robot.D21Policy.Level2PriceStopLossRatio) / 100; - var stopPrice = avgTradePrice - avgTradePrice * priceStopLossRatio; + var stopPrice = (avgTradePrice - avgTradePrice * priceStopLossRatio).CutDecimal(symbolInfo.PriceAccuracy); var stopQuantity = (buyQuantity * positionStopLossRatio).CutDecimal(symbolInfo.SaleQuantityAccuracy); var stopLossClientOrderId = CreateClientOrderId(d21Robot.Id, d21Robot.TradePolicy); var stopOrderId = baseAPIClient.IsolatedMarginPlaceOrder(d21Robot.Symbol, diff --git a/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs b/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs index 26a9605..6b47046 100644 --- a/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs +++ b/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs @@ -24,6 +24,12 @@ namespace Binance.TradeRobot.Model.Db [Column(DbType = "int")] public int SaleQuantityAccuracy { get; set; } + /// + /// 价格精度 + /// + [Column(DbType = "int")] + public int PriceAccuracy { get; set; } + [Column(StringLength = 50)] public string Symbol { get; set; }