Browse Source

订单回调

master
shanji 3 years ago
parent
commit
ec5392b774
  1. 35
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs
  2. 47
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs
  3. 4
      Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs
  4. 2
      SDKAdapter/Model/SpotOrderPublishInfo.cs
  5. 1
      SDKAdapter/WebSockets/Order/Spot/BinanceSpotOrderWebSocketClient.cs

35
Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs

@ -4,21 +4,50 @@ using Microsoft.Extensions.Caching.Memory;
using SDKAdapter.Model;
using System;
using System.Collections.Generic;
using System.Threading;
using Yitter.IdGenerator;
namespace Binance.TradeRobot.Business
{
public class BaseSpotOrderPublishBusiness : BaseBusiness
{
protected DingBusiness dingBusiness { get; private set; }
protected DingBusiness dingBusiness;
protected RobotBusiness robotBusiness;
public BaseSpotOrderPublishBusiness(IFreeSql fsql,
NLogManager logManager,
IIdGenerator idGenerator,
IMemoryCache memoryCache,
DingBusiness dingBusiness) : base(fsql, logManager, idGenerator, memoryCache) { this.dingBusiness = dingBusiness; }
DingBusiness dingBusiness,
RobotBusiness robotBusiness) : base(fsql, logManager, idGenerator, memoryCache)
{
this.dingBusiness = dingBusiness;
this.robotBusiness = robotBusiness;
}
/// <summary>
/// 检查订单是否存在
/// </summary>
/// <param name="orderId"></param>
/// <exception cref="BusinessException">订单不存在异常</exception>
protected void CheckOrderExists(long orderId)
{
var tryCount = 3;
while (tryCount > 0)
{
var isOrderExists = fsql.Select<SpotOrder>(orderId).Any();
if (!isOrderExists)
{
tryCount--;
Thread.Sleep(1000);
continue;
}
return;
}
throw new BusinessException("订单不存在");
}
public void HandleError(Exception ex,
protected void HandleError(Exception ex,
List<ExecutionLog> logList,
string loggerName,
long robotId,

47
Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs

@ -1,11 +1,13 @@
using Binance.TradeRobot.Common.DI;
using Binance.TradeRobot.Model.Base;
using Binance.TradeRobot.Model.Db;
using FreeSql;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using SDKAdapter.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using Yitter.IdGenerator;
namespace Binance.TradeRobot.Business
@ -15,32 +17,51 @@ namespace Binance.TradeRobot.Business
{
public Enums.TradePolicy TradePolicy => Enums.TradePolicy.D21;
public RobotBusiness robotBusiness;
public D21OrderPublishBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache, DingBusiness dingBusiness, RobotBusiness robotBusiness) : base(fsql, logManager, idGenerator, memoryCache, dingBusiness)
public D21OrderPublishBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache, DingBusiness dingBusiness, RobotBusiness robotBusiness) : base(fsql, logManager, idGenerator, memoryCache, dingBusiness, robotBusiness)
{
this.robotBusiness = robotBusiness;
}
public void OnSpotOrderPublish(SpotOrderPublishInfo spotOrderPublishInfo)
{
var logger = logManager.GetLogger(spotOrderPublishInfo.LoggerName);
//var logger = logManager.GetLogger(spotOrderPublishInfo.LoggerName);
var step = "";
var logList = new List<ExecutionLog>();
try
{
logList.Add(new ExecutionLog()
CheckOrderExists(spotOrderPublishInfo.OrderId);
var robot = robotBusiness.GetD21PolicyRobotList(spotOrderPublishInfo.RobotId, isLoadRecentTradeProfit: false, isLoadAPIKey: true).FirstOrDefault();
if (robot == null)
throw new BusinessException($"未找到机器人");
IUpdate<SpotOrder> updateSpotOrder = fsql.Update<SpotOrder>(spotOrderPublishInfo.OrderId).Set(o => o.State, spotOrderPublishInfo.SpotOrderState);
if (spotOrderPublishInfo.SpotOrderState == Enums.SpotOrderState.Rejected || spotOrderPublishInfo.SpotOrderState == Enums.SpotOrderState.Expired)
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
OrderId = spotOrderPublishInfo.OrderId,
RobotId = spotOrderPublishInfo.RobotId,
SourceSingal = Enums.SingalType.,
Content = $"收到订单推送,订单号:{spotOrderPublishInfo.OrderId},订单方向:{spotOrderPublishInfo.TradeDirection},订单类型:{spotOrderPublishInfo.OrderType},订单状态:{spotOrderPublishInfo.SpotOrderState},本次成交额:{spotOrderPublishInfo.LastTradeAmount}"
});
}
if (spotOrderPublishInfo.SpotOrderState == Enums.SpotOrderState.Filled)
{
logList.Add(new ExecutionLog()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
OrderId = spotOrderPublishInfo.OrderId,
RobotId = spotOrderPublishInfo.RobotId,
SourceSingal = Enums.SingalType.,
Content = $"收到订单推送,订单号:{spotOrderPublishInfo.OrderId},订单方向:{spotOrderPublishInfo.TradeDirection},订单类型:{spotOrderPublishInfo.OrderType},订单状态:{spotOrderPublishInfo.SpotOrderState},成交额:{spotOrderPublishInfo.LastTradeAmount},成交量:{spotOrderPublishInfo.LastTradeQuantity},成交价:{spotOrderPublishInfo.LastTradePrice},手续费({spotOrderPublishInfo.FeeUnit}):{spotOrderPublishInfo.Fee}"
});
updateSpotOrder = fsql.Update<SpotOrder>(spotOrderPublishInfo.OrderId)
//.Set(o => o.TradeCount + 1)
.Set(o => o.TradeAmount, spotOrderPublishInfo.CummulativeTradeAmount)
.Set(o => o.TradeQuantity, spotOrderPublishInfo.CummulativeTradeQuantity)
.Set(o => o.TradePrice, spotOrderPublishInfo.CummulativeTradeAmount / spotOrderPublishInfo.CummulativeTradeQuantity)
.Set(o => o.TradeFee, spotOrderPublishInfo.Fee)
.Set(o => o.TradeFeeUnit, spotOrderPublishInfo.FeeUnit);
}
}
catch (Exception ex)

4
Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs

@ -234,6 +234,7 @@ namespace Binance.TradeRobot.Business
Id = idGenerator.NewLong(),
SourceSingal = singalRequest.SingalType,
RobotId = robot.Id,
OrderId = orderId,
CreateTime = DateTime.Now,
Content = $"市价买单挂单成功,订单号:{orderId},挂单金额:{previewTradeAmount},借币金额:{diffAmount}"
});
@ -241,6 +242,8 @@ namespace Binance.TradeRobot.Business
{
fsql.Insert(logList).ExecuteAffrows();
fsql.Insert(buyOrder).ExecuteAffrows();
if (diffAmount > 0M)
fsql.Update<RobotAccount>(robot.RobotAccount.Id).Set(ra => ra.LoanAmount + diffAmount).ExecuteAffrows();
if (previewTradeAmount != d21Robot.D21Policy.Position) //借币失败 仓位减少
fsql.Update<D21Policy>(d21Robot.D21Policy.Id).Set(d => d.Position, previewTradeAmount).ExecuteAffrows();
});
@ -338,6 +341,7 @@ namespace Binance.TradeRobot.Business
Id = idGenerator.NewLong(),
SourceSingal = singalRequest.SingalType,
RobotId = robot.Id,
OrderId = orderId,
CreateTime = DateTime.Now,
Content = $"市价卖单挂单成功,订单号:{orderId},挂单数量:{saleQuantity}"
});

2
SDKAdapter/Model/SpotOrderPublishInfo.cs

@ -43,6 +43,8 @@ namespace SDKAdapter.Model
public DateTime LastTradeTime { get; set; }
public string RejectedReason { get; set; }
public string LoggerName { get; set; }
}
}

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

@ -53,6 +53,7 @@ namespace SDKAdapter.WebSockets.Order.Spot
{
Binance.Net.Enums.OrderStatus.New,
Binance.Net.Enums.OrderStatus.PendingCancel,
Binance.Net.Enums.OrderStatus.PartiallyFilled, //由于无法确定手续费时候存在局部,暂时忽略局部成交
Binance.Net.Enums.OrderStatus.Insurance,
Binance.Net.Enums.OrderStatus.Adl
};

Loading…
Cancel
Save