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

10
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<string, SpotMarketWebSocketClient> spotMarketWebSocketClientDictionary;
private IDictionary<string, SpotOrderWebSocketClient> spotOrderWebSocketClientDictionary;
private IEnumerable<ISpotOrderPublishBusiness> spotOrderPublishBusinessList;
public GlobalContext(NLogManager logManager)
public GlobalContext(NLogManager logManager, IEnumerable<ISpotOrderPublishBusiness> spotOrderPublishBusinessList)
{
this.logManager = logManager;
spotMarketWebSocketClientDictionary = new Dictionary<string, SpotMarketWebSocketClient>();
spotOrderWebSocketClientDictionary = new Dictionary<string, SpotOrderWebSocketClient>();
this.spotOrderPublishBusinessList = spotOrderPublishBusinessList;
}
/// <summary>
@ -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);
}
}
}

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

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

6
SDKAdapter/Model/SpotOrderTradePublishInfo.cs → 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; }
}
}

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

@ -25,7 +25,7 @@ namespace SDKAdapter.WebSockets.Order.Spot
string apiKey,
string secret,
NLog.ILogger logger,
Action<SpotOrderTradePublishInfo> onOrderUpdated) : base(businessType,
Action<SpotOrderPublishInfo> 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)

6
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<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)
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<SpotOrderTradePublishInfo> onOrderUpdated)
public SpotOrderWebSocketClient(Enums.BusinessType businessType, long accountId, string apiKey, string secret, NLog.ILogger logger, Action<SpotOrderPublishInfo> onOrderUpdated)
{
this.BusinessType = businessType;
this.AccountId = accountId;

Loading…
Cancel
Save