From 30581ed7f8152f8de97c054fe592740ef8cc985e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 17 May 2022 05:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Spot/BaseSpotOrderPublishBusiness.cs | 42 +++++++++++++++++++ .../Spot/BaseSpotOrderPublishTradeBusiness.cs | 20 --------- .../Spot/D21OrderPublishBusiness.cs | 37 ++++++++++++++++ .../Spot/D21OrderPublishTradeBusiness.cs | 10 ----- .../Spot/ISpotOrderPublishBusiness.cs | 12 ++++++ .../TradeBusiness/BaseTradeBusiness.cs | 2 +- Binance.TradeRobot.Business/GlobalContext.cs | 10 +++-- Binance.TradeRobot.Model/Base/Enums.cs | 3 +- ...PublishInfo.cs => SpotOrderPublishInfo.cs} | 6 +-- .../Spot/BinanceSpotOrderWebSocketClient.cs | 7 ++-- .../Order/Spot/SpotOrderWebSocketClient.cs | 6 +-- 11 files changed, 111 insertions(+), 44 deletions(-) create mode 100644 Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs delete mode 100644 Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishTradeBusiness.cs create mode 100644 Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs delete mode 100644 Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishTradeBusiness.cs create mode 100644 Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/ISpotOrderPublishBusiness.cs rename SDKAdapter/Model/{SpotOrderTradePublishInfo.cs => SpotOrderPublishInfo.cs} (91%) diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs new file mode 100644 index 0000000..571c98f --- /dev/null +++ b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs @@ -0,0 +1,42 @@ +using Binance.TradeRobot.Model.Base; +using Binance.TradeRobot.Model.Db; +using Microsoft.Extensions.Caching.Memory; +using SDKAdapter.Model; +using System; +using System.Collections.Generic; +using Yitter.IdGenerator; + +namespace Binance.TradeRobot.Business +{ + public class BaseSpotOrderPublishBusiness : BaseBusiness + { + protected DingBusiness dingBusiness { get; private set; } + + public BaseSpotOrderPublishBusiness(IFreeSql fsql, + NLogManager logManager, + IIdGenerator idGenerator, + IMemoryCache memoryCache, + DingBusiness dingBusiness) : base(fsql, logManager, idGenerator, memoryCache) { this.dingBusiness = dingBusiness; } + + public void HandleError(Exception ex, + List logList, + string loggerName, + long robotId, + long orderId, + string step) + { + logList.Add(new ExecutionLog() + { + Id = idGenerator.NewLong(), + SourceSingal = Enums.SingalType.订单回调, + RobotId = robotId, + CreateTime = DateTime.Now, + Content = ex.Message + }); + try { fsql.Insert(logList).ExecuteAffrows(); } catch { } + var errorMsg = $"交易警报,{Enums.SingalType.订单回调},{loggerName},robot {robotId},order {orderId},{step}"; + logManager.GetLogger(loggerName).Error(ex, errorMsg); + dingBusiness.Send($"{errorMsg} {ex.Message}"); + } + } +} diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishTradeBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishTradeBusiness.cs deleted file mode 100644 index 61aa287..0000000 --- a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishTradeBusiness.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Microsoft.Extensions.Caching.Memory; -using SDKAdapter.Model; -using System; -using Yitter.IdGenerator; - -namespace Binance.TradeRobot.Business -{ - public class BaseSpotOrderPublishTradeBusiness : BaseBusiness - { - public BaseSpotOrderPublishTradeBusiness(IFreeSql fsql, - NLogManager logManager, - IIdGenerator idGenerator, - IMemoryCache memoryCache) : base(fsql, logManager, idGenerator, memoryCache) { } - - public virtual void OnSpotOrderPublish(SpotOrderTradePublishInfo spotOrderTradePublishInfo) - { - throw new NotImplementedException(); - } - } -} diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs new file mode 100644 index 0000000..c1a7841 --- /dev/null +++ b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs @@ -0,0 +1,37 @@ +using Binance.TradeRobot.Common.DI; +using Binance.TradeRobot.Model.Base; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using SDKAdapter.Model; +using System; +using Yitter.IdGenerator; + +namespace Binance.TradeRobot.Business +{ + [BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Interface)] + internal class D21OrderPublishBusiness : BaseSpotOrderPublishBusiness, ISpotOrderPublishBusiness + { + public Enums.TradePolicy TradePolicy => Enums.TradePolicy.D21; + + public D21OrderPublishBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache, DingBusiness dingBusiness) : base(fsql, logManager, idGenerator, memoryCache, dingBusiness) + { + + } + + + public void OnSpotOrderPublish(SpotOrderPublishInfo spotOrderPublishInfo) + { + return; + var logger = logManager.GetLogger(spotOrderPublishInfo.LoggerName); + var step = ""; + try + { + + } + catch (Exception ex) + { + HandleError(ex, null, spotOrderPublishInfo.LoggerName, spotOrderPublishInfo.RobotId, spotOrderPublishInfo.OrderId, step); + } + } + } +} diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishTradeBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishTradeBusiness.cs deleted file mode 100644 index 0d08849..0000000 --- a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishTradeBusiness.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Binance.TradeRobot.Business.Business.OrderPublishBusiness.Spot -{ - internal class D21OrderPublishTradeBusiness - { - } -} diff --git a/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/ISpotOrderPublishBusiness.cs b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/ISpotOrderPublishBusiness.cs new file mode 100644 index 0000000..d4b927b --- /dev/null +++ b/Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/ISpotOrderPublishBusiness.cs @@ -0,0 +1,12 @@ +using Binance.TradeRobot.Model.Base; +using SDKAdapter.Model; + +namespace Binance.TradeRobot.Business +{ + public interface ISpotOrderPublishBusiness + { + Enums.TradePolicy TradePolicy { get; } + + void OnSpotOrderPublish(SpotOrderPublishInfo spotOrderPublishInfo); + } +} diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs index 1942324..1eba94e 100644 --- a/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs @@ -36,7 +36,7 @@ namespace Binance.TradeRobot.Business Content = ex.Message }); try { fsql.Insert(logList).ExecuteAffrows(); } catch { } - var errorMsg = $"交易警报,{singalType},{robot.ExecuteKey},{robot.Id},{step}"; + var errorMsg = $"交易警报,{singalType},{robot.ExecuteKey},robot {robot.Id},{step}"; logManager.GetLogger(robot.ExecuteKey).Error(ex, errorMsg); dingBusiness.Send($"{errorMsg} {ex.Message}"); } diff --git a/Binance.TradeRobot.Business/GlobalContext.cs b/Binance.TradeRobot.Business/GlobalContext.cs index 962823a..42ba067 100644 --- a/Binance.TradeRobot.Business/GlobalContext.cs +++ b/Binance.TradeRobot.Business/GlobalContext.cs @@ -5,6 +5,7 @@ using SDKAdapter.Model; using SDKAdapter.WebSockets.Market; using SDKAdapter.WebSockets.Order.Spot; using System.Collections.Generic; +using System.Linq; namespace Binance.TradeRobot.Business { @@ -14,12 +15,14 @@ namespace Binance.TradeRobot.Business private NLogManager logManager; private IDictionary spotMarketWebSocketClientDictionary; private IDictionary spotOrderWebSocketClientDictionary; + private IEnumerable spotOrderPublishBusinessList; - public GlobalContext(NLogManager logManager) + public GlobalContext(NLogManager logManager, IEnumerable spotOrderPublishBusinessList) { this.logManager = logManager; spotMarketWebSocketClientDictionary = new Dictionary(); spotOrderWebSocketClientDictionary = new Dictionary(); + this.spotOrderPublishBusinessList = spotOrderPublishBusinessList; } /// @@ -90,9 +93,10 @@ namespace Binance.TradeRobot.Business return null; } - public void OnSpotOrderPublish(SpotOrderTradePublishInfo spotOrderTradePublishInfo) + public void OnSpotOrderPublish(SpotOrderPublishInfo spotOrderPublishInfo) { - + var orderPublishBusiness = spotOrderPublishBusinessList.FirstOrDefault(p => p.TradePolicy == spotOrderPublishInfo.TradePolicy); + orderPublishBusiness.OnSpotOrderPublish(spotOrderPublishInfo); } } } diff --git a/Binance.TradeRobot.Model/Base/Enums.cs b/Binance.TradeRobot.Model/Base/Enums.cs index 6456698..c56c091 100644 --- a/Binance.TradeRobot.Model/Base/Enums.cs +++ b/Binance.TradeRobot.Model/Base/Enums.cs @@ -216,7 +216,8 @@ namespace Binance.TradeRobot.Model.Base 小趋势看多 = 8, 小趋势看空 = 9, 多交叉 = 10, - 空交叉 = 11 + 空交叉 = 11, + 订单回调 = 100 } #endregion } diff --git a/SDKAdapter/Model/SpotOrderTradePublishInfo.cs b/SDKAdapter/Model/SpotOrderPublishInfo.cs similarity index 91% rename from SDKAdapter/Model/SpotOrderTradePublishInfo.cs rename to SDKAdapter/Model/SpotOrderPublishInfo.cs index 782e97b..8492a97 100644 --- a/SDKAdapter/Model/SpotOrderTradePublishInfo.cs +++ b/SDKAdapter/Model/SpotOrderPublishInfo.cs @@ -1,11 +1,9 @@ using Binance.TradeRobot.Model.Base; using System; -using System.Collections.Generic; -using System.Text; namespace SDKAdapter.Model { - public class SpotOrderTradePublishInfo + public class SpotOrderPublishInfo { public long OrderId { get; set; } @@ -44,5 +42,7 @@ namespace SDKAdapter.Model public DateTime CreateTime { get; set; } public DateTime LastTradeTime { get; set; } + + public string LoggerName { get; set; } } } diff --git a/SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs b/SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs index 4e54df0..316dfed 100644 --- a/SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs +++ b/SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs @@ -25,7 +25,7 @@ namespace SDKAdapter.WebSockets.Order.Spot string apiKey, string secret, NLog.ILogger logger, - Action onOrderUpdated) : base(businessType, + Action onOrderUpdated) : base(businessType, accountId, apiKey, secret, @@ -125,7 +125,7 @@ namespace SDKAdapter.WebSockets.Order.Spot break; } - OnOrderUpdated?.Invoke(new SpotOrderTradePublishInfo() + OnOrderUpdated?.Invoke(new SpotOrderPublishInfo() { OrderId = e.Data.Id, RobotId = robotId.Value, @@ -145,7 +145,8 @@ namespace SDKAdapter.WebSockets.Order.Spot LastTradePrice = e.Data.LastPriceFilled, LastTradeQuantity = e.Data.LastQuantityFilled, LastTradeTime = e.Data.UpdateTime, - CreateTime = e.Data.CreateTime + CreateTime = e.Data.CreateTime, + LoggerName = logger.Name }); } catch (Exception ex) diff --git a/SDKAdapter/WebSockets/Order/Spot/SpotOrderWebSocketClient.cs b/SDKAdapter/WebSockets/Order/Spot/SpotOrderWebSocketClient.cs index 2cd05bd..25ec156 100644 --- a/SDKAdapter/WebSockets/Order/Spot/SpotOrderWebSocketClient.cs +++ b/SDKAdapter/WebSockets/Order/Spot/SpotOrderWebSocketClient.cs @@ -13,17 +13,17 @@ namespace SDKAdapter.WebSockets.Order.Spot protected bool IsConnected { get; set; } protected Enums.BusinessType BusinessType { get; private set; } - public Action OnOrderUpdated { get; private set; } + public Action OnOrderUpdated { get; private set; } - public static SpotOrderWebSocketClient Create(Enums.BusinessType businessType, Enums.Exchange exchange, long accountId, string apiKey, string secret, NLog.ILogger logger, Action onOrderUpdated) + public static SpotOrderWebSocketClient Create(Enums.BusinessType businessType, Enums.Exchange exchange, long accountId, string apiKey, string secret, NLog.ILogger logger, Action onOrderUpdated) { if (exchange == Enums.Exchange.Binance) return new BinanceSpotOrderWebSocketClient(businessType, accountId, apiKey, secret, logger, onOrderUpdated); return null; } - public SpotOrderWebSocketClient(Enums.BusinessType businessType, long accountId, string apiKey, string secret, NLog.ILogger logger, Action onOrderUpdated) + public SpotOrderWebSocketClient(Enums.BusinessType businessType, long accountId, string apiKey, string secret, NLog.ILogger logger, Action onOrderUpdated) { this.BusinessType = businessType; this.AccountId = accountId;