Browse Source

回调

master
shanji 3 years ago
parent
commit
30581ed7f8
  1. 42
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs
  2. 20
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishTradeBusiness.cs
  3. 37
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs
  4. 10
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishTradeBusiness.cs
  5. 12
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/ISpotOrderPublishBusiness.cs
  6. 2
      Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs
  7. 10
      Binance.TradeRobot.Business/GlobalContext.cs
  8. 3
      Binance.TradeRobot.Model/Base/Enums.cs
  9. 6
      SDKAdapter/Model/SpotOrderPublishInfo.cs
  10. 7
      SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs
  11. 6
      SDKAdapter/WebSockets/Order/Spot/SpotOrderWebSocketClient.cs

42
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<ExecutionLog> 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}");
}
}
}

20
Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishTradeBusiness.cs

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

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

10
Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishTradeBusiness.cs

@ -1,10 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Binance.TradeRobot.Business.Business.OrderPublishBusiness.Spot
{
internal class D21OrderPublishTradeBusiness
{
}
}

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

2
Binance.TradeRobot.Business/Business/TradeBusiness/BaseTradeBusiness.cs

@ -36,7 +36,7 @@ namespace Binance.TradeRobot.Business
Content = ex.Message Content = ex.Message
}); });
try { fsql.Insert(logList).ExecuteAffrows(); } catch { } 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); logManager.GetLogger(robot.ExecuteKey).Error(ex, errorMsg);
dingBusiness.Send($"{errorMsg} {ex.Message}"); dingBusiness.Send($"{errorMsg} {ex.Message}");
} }

10
Binance.TradeRobot.Business/GlobalContext.cs

@ -5,6 +5,7 @@ using SDKAdapter.Model;
using SDKAdapter.WebSockets.Market; using SDKAdapter.WebSockets.Market;
using SDKAdapter.WebSockets.Order.Spot; using SDKAdapter.WebSockets.Order.Spot;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Binance.TradeRobot.Business namespace Binance.TradeRobot.Business
{ {
@ -14,12 +15,14 @@ namespace Binance.TradeRobot.Business
private NLogManager logManager; private NLogManager logManager;
private IDictionary<string, SpotMarketWebSocketClient> spotMarketWebSocketClientDictionary; private IDictionary<string, SpotMarketWebSocketClient> spotMarketWebSocketClientDictionary;
private IDictionary<string, SpotOrderWebSocketClient> spotOrderWebSocketClientDictionary; private IDictionary<string, SpotOrderWebSocketClient> spotOrderWebSocketClientDictionary;
private IEnumerable<ISpotOrderPublishBusiness> spotOrderPublishBusinessList;
public GlobalContext(NLogManager logManager) public GlobalContext(NLogManager logManager, IEnumerable<ISpotOrderPublishBusiness> spotOrderPublishBusinessList)
{ {
this.logManager = logManager; this.logManager = logManager;
spotMarketWebSocketClientDictionary = new Dictionary<string, SpotMarketWebSocketClient>(); spotMarketWebSocketClientDictionary = new Dictionary<string, SpotMarketWebSocketClient>();
spotOrderWebSocketClientDictionary = new Dictionary<string, SpotOrderWebSocketClient>(); spotOrderWebSocketClientDictionary = new Dictionary<string, SpotOrderWebSocketClient>();
this.spotOrderPublishBusinessList = spotOrderPublishBusinessList;
} }
/// <summary> /// <summary>
@ -90,9 +93,10 @@ namespace Binance.TradeRobot.Business
return null; return null;
} }
public void OnSpotOrderPublish(SpotOrderTradePublishInfo spotOrderTradePublishInfo) public void OnSpotOrderPublish(SpotOrderPublishInfo spotOrderPublishInfo)
{ {
var orderPublishBusiness = spotOrderPublishBusinessList.FirstOrDefault(p => p.TradePolicy == spotOrderPublishInfo.TradePolicy);
orderPublishBusiness.OnSpotOrderPublish(spotOrderPublishInfo);
} }
} }
} }

3
Binance.TradeRobot.Model/Base/Enums.cs

@ -216,7 +216,8 @@ namespace Binance.TradeRobot.Model.Base
= 8, = 8,
= 9, = 9,
= 10, = 10,
= 11 = 11,
= 100
} }
#endregion #endregion
} }

6
SDKAdapter/Model/SpotOrderTradePublishInfo.cs → SDKAdapter/Model/SpotOrderPublishInfo.cs

@ -1,11 +1,9 @@
using Binance.TradeRobot.Model.Base; using Binance.TradeRobot.Model.Base;
using System; using System;
using System.Collections.Generic;
using System.Text;
namespace SDKAdapter.Model namespace SDKAdapter.Model
{ {
public class SpotOrderTradePublishInfo public class SpotOrderPublishInfo
{ {
public long OrderId { get; set; } public long OrderId { get; set; }
@ -44,5 +42,7 @@ namespace SDKAdapter.Model
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
public DateTime LastTradeTime { get; set; } public DateTime LastTradeTime { get; set; }
public string LoggerName { get; set; }
} }
} }

7
SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs

@ -25,7 +25,7 @@ namespace SDKAdapter.WebSockets.Order.Spot
string apiKey, string apiKey,
string secret, string secret,
NLog.ILogger logger, NLog.ILogger logger,
Action<SpotOrderTradePublishInfo> onOrderUpdated) : base(businessType, Action<SpotOrderPublishInfo> onOrderUpdated) : base(businessType,
accountId, accountId,
apiKey, apiKey,
secret, secret,
@ -125,7 +125,7 @@ namespace SDKAdapter.WebSockets.Order.Spot
break; break;
} }
OnOrderUpdated?.Invoke(new SpotOrderTradePublishInfo() OnOrderUpdated?.Invoke(new SpotOrderPublishInfo()
{ {
OrderId = e.Data.Id, OrderId = e.Data.Id,
RobotId = robotId.Value, RobotId = robotId.Value,
@ -145,7 +145,8 @@ namespace SDKAdapter.WebSockets.Order.Spot
LastTradePrice = e.Data.LastPriceFilled, LastTradePrice = e.Data.LastPriceFilled,
LastTradeQuantity = e.Data.LastQuantityFilled, LastTradeQuantity = e.Data.LastQuantityFilled,
LastTradeTime = e.Data.UpdateTime, LastTradeTime = e.Data.UpdateTime,
CreateTime = e.Data.CreateTime CreateTime = e.Data.CreateTime,
LoggerName = logger.Name
}); });
} }
catch (Exception ex) catch (Exception ex)

6
SDKAdapter/WebSockets/Order/Spot/SpotOrderWebSocketClient.cs

@ -13,17 +13,17 @@ namespace SDKAdapter.WebSockets.Order.Spot
protected bool IsConnected { get; set; } protected bool IsConnected { get; set; }
protected Enums.BusinessType BusinessType { get; private set; } protected Enums.BusinessType BusinessType { get; private set; }
public Action<SpotOrderTradePublishInfo> OnOrderUpdated { get; private set; } public Action<SpotOrderPublishInfo> OnOrderUpdated { get; private set; }
public static SpotOrderWebSocketClient Create(Enums.BusinessType businessType, Enums.Exchange exchange, long accountId, string apiKey, string secret, NLog.ILogger logger, Action<SpotOrderTradePublishInfo> onOrderUpdated) public static SpotOrderWebSocketClient Create(Enums.BusinessType businessType, Enums.Exchange exchange, long accountId, string apiKey, string secret, NLog.ILogger logger, Action<SpotOrderPublishInfo> onOrderUpdated)
{ {
if (exchange == Enums.Exchange.Binance) if (exchange == Enums.Exchange.Binance)
return new BinanceSpotOrderWebSocketClient(businessType, accountId, apiKey, secret, logger, onOrderUpdated); return new BinanceSpotOrderWebSocketClient(businessType, accountId, apiKey, secret, logger, onOrderUpdated);
return null; return null;
} }
public SpotOrderWebSocketClient(Enums.BusinessType businessType, long accountId, string apiKey, string secret, NLog.ILogger logger, Action<SpotOrderTradePublishInfo> onOrderUpdated) public SpotOrderWebSocketClient(Enums.BusinessType businessType, long accountId, string apiKey, string secret, NLog.ILogger logger, Action<SpotOrderPublishInfo> onOrderUpdated)
{ {
this.BusinessType = businessType; this.BusinessType = businessType;
this.AccountId = accountId; this.AccountId = accountId;

Loading…
Cancel
Save