Browse Source

推送 未完

master
shanji 3 years ago
parent
commit
5c9a75be9e
  1. 14
      Binance.TradeRobot.API/Binance.TradeRobot.API.xml
  2. 21
      Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
  3. 4
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/BaseSpotOrderPublishBusiness.cs
  4. 20
      Binance.TradeRobot.Business/Business/OrderPublishBusiness/Spot/D21OrderPublishBusiness.cs
  5. 102
      Binance.TradeRobot.Business/Business/RobotBusiness.cs
  6. 11
      Binance.TradeRobot.Business/Business/SingalBusiness.cs
  7. 4
      Binance.TradeRobot.Business/Business/TradeBusiness/Spot/D21TradeBusiness.cs
  8. 2
      Binance.TradeRobot.Model/Base/Enums.cs
  9. 13
      Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
  10. 5
      Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs
  11. 2
      Binance.TradeRobot.Model/Dto/Request/Singal/BaseSingalRequest.cs

14
Binance.TradeRobot.API/Binance.TradeRobot.API.xml

@ -48,6 +48,20 @@
<param name="exchangeId"></param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.API.Controllers.OrderController.GetSpotOrderList(System.Int64)">
<summary>
获取现货/逐仓杠杆订单记录(最近20条)
</summary>
<param name="robotId"></param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.API.Controllers.OrderController.GetExecutionLogList(System.Int64)">
<summary>
获取执行日志记录(最近50条)
</summary>
<param name="robotId"></param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.API.Controllers.RobotController.StartRobot(System.Int64)">
<summary>
开启机器人

21
Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml

@ -40,7 +40,7 @@
</summary>
<param name="addRobotRequest"></param>
</member>
<member name="M:Binance.TradeRobot.Business.RobotBusiness.GetRobotList(System.Nullable{System.Int64},System.String,System.Nullable{Binance.TradeRobot.Model.Base.Enums.RobotState},System.Nullable{Binance.TradeRobot.Model.Base.Enums.Exchange})">
<member name="M:Binance.TradeRobot.Business.RobotBusiness.GetRobotList(System.Nullable{System.Int64},System.String,System.Nullable{Binance.TradeRobot.Model.Base.Enums.RobotState},System.Nullable{Binance.TradeRobot.Model.Base.Enums.Exchange},System.Nullable{System.Int64})">
<summary>
查询机器人基本信息
</summary>
@ -48,6 +48,7 @@
<param name="symbol"></param>
<param name="robotState"></param>
<param name="exchange"></param>
<param name="accountId">交易所账号Id</param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.Business.RobotBusiness.GetD21PolicyRobotList(System.Nullable{Binance.TradeRobot.Model.Base.Enums.RobotState},System.Nullable{Binance.TradeRobot.Model.Base.Enums.SignalPeriod},System.String,System.Boolean,System.Boolean)">
@ -66,6 +67,14 @@
现货策略
</summary>
</member>
<member name="M:Binance.TradeRobot.Business.BaseTradeBusiness.CreateClientOrderId(System.Int64,Binance.TradeRobot.Model.Base.Enums.TradePolicy)">
<summary>
创建客户端订单号
</summary>
<param name="robotId"></param>
<param name="tradePolicy"></param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.Business.ITradeBusiness.TrendChanged``2(``0,``1,Binance.TradeRobot.Model.Dto.SymbolInfoResponse)">
<summary>
趋势变化
@ -129,15 +138,15 @@
</summary>
<param name="robot"></param>
</member>
<member name="M:Binance.TradeRobot.Business.GlobalContext.SubscribeOrderPublish(Binance.TradeRobot.Model.Dto.RobotResponse)">
<member name="M:Binance.TradeRobot.Business.GlobalContext.UnSubscribeKLine(Binance.TradeRobot.Model.Dto.RobotResponse)">
<summary>
订阅订单推送
取消订阅K线
</summary>
<param name="robot"></param>
</member>
<member name="M:Binance.TradeRobot.Business.GlobalContext.UnSubscribeKLine(Binance.TradeRobot.Model.Dto.RobotResponse)">
<member name="M:Binance.TradeRobot.Business.GlobalContext.SubscribeOrderPublish(Binance.TradeRobot.Model.Dto.RobotResponse)">
<summary>
取消订阅K线
订阅订单推送
</summary>
<param name="robot"></param>
</member>
@ -151,7 +160,7 @@
<summary>
获取指定交易对现货最新成交价
</summary>
<param name="symbol"></param>
<param name="kLineKey"></param>
<returns></returns>
</member>
</members>

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

@ -28,13 +28,13 @@ namespace Binance.TradeRobot.Business
logList.Add(new ExecutionLog()
{
Id = idGenerator.NewLong(),
SourceSingal = Enums.SingalType.,
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}";
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/D21OrderPublishBusiness.cs

@ -1,9 +1,11 @@
using Binance.TradeRobot.Common.DI;
using Binance.TradeRobot.Model.Base;
using Binance.TradeRobot.Model.Db;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using SDKAdapter.Model;
using System;
using System.Collections.Generic;
using Yitter.IdGenerator;
namespace Binance.TradeRobot.Business
@ -12,25 +14,35 @@ namespace Binance.TradeRobot.Business
internal class D21OrderPublishBusiness : BaseSpotOrderPublishBusiness, ISpotOrderPublishBusiness
{
public Enums.TradePolicy TradePolicy => Enums.TradePolicy.D21;
private RobotBusiness robotBusiness;
public D21OrderPublishBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache, DingBusiness dingBusiness) : 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)
{
this.robotBusiness = robotBusiness;
}
public void OnSpotOrderPublish(SpotOrderPublishInfo spotOrderPublishInfo)
{
return;
var logger = logManager.GetLogger(spotOrderPublishInfo.LoggerName);
var step = "";
var logList = new List<ExecutionLog>();
try
{
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}"
});
}
catch (Exception ex)
{
HandleError(ex, null, spotOrderPublishInfo.LoggerName, spotOrderPublishInfo.RobotId, spotOrderPublishInfo.OrderId, step);
HandleError(ex, logList, spotOrderPublishInfo.LoggerName, spotOrderPublishInfo.RobotId, spotOrderPublishInfo.OrderId, step);
}
}
}

102
Binance.TradeRobot.Business/Business/RobotBusiness.cs

@ -200,67 +200,77 @@ namespace Binance.TradeRobot.Business
/// <summary>
/// 获取动2.1策略机器人列表
/// </summary>
/// <param name="robotId"></param>
/// <param name="robotState">机器人状态</param>
/// <param name="signalPeriod">信号周期</param>
/// <param name="symbol">交易对</param>
/// <param name="isLoadRecentTradeProfit">是否加载近期交易利润,默认true</param>
/// <param name="isLoadAPIKey">是否加载机器人绑定的APIKey,默认false</param>
/// <returns></returns>
public IList<D21PolicyRobotResponse> GetD21PolicyRobotList(Enums.RobotState? robotState = null,
public IList<D21PolicyRobotResponse> GetD21PolicyRobotList(long? robotId,
Enums.RobotState? robotState = null,
Enums.SignalPeriod? signalPeriod = null,
string symbol = "",
bool isLoadRecentTradeProfit = true,
bool isLoadAPIKey = false)
{
var robotList = fsql.Select<Robot, RobotAccount, D21Policy, ExchangeAPIKey>().InnerJoin((r, ra, d, e) => r.Id == ra.RobotId)
.InnerJoin((r, ra, d, e) => r.Id == d.RobotId)
.InnerJoin((r, ra, d, e) => r.Id == e.RobotId)
.WhereIf(robotState != null, (r, ra, d, e) => r.State == robotState)
.WhereIf(signalPeriod != null, (r, ra, d, e) => d.PeriodicSignal == signalPeriod)
.WhereIf(!string.IsNullOrEmpty(symbol), (r, ra, d, e) => r.Symbol == symbol)
.Where((r, ra, d, e) => r.TradePolicy == Enums.TradePolicy.D21)
.ToList((r, ra, d, e) => new Robot
{
Id = r.Id,
BusinessType = r.BusinessType,
ExchangeId = r.ExchangeId,
Symbol = r.Symbol,
State = r.State,
RunningTime = r.RunningTime,
CreateTime = r.CreateTime,
TradePolicy = r.TradePolicy,
var select = fsql.Select<Robot, RobotAccount, D21Policy, ExchangeAPIKey>().InnerJoin((r, ra, d, e) => r.Id == ra.RobotId)
.InnerJoin((r, ra, d, e) => r.Id == d.RobotId)
.InnerJoin((r, ra, d, e) => r.Id == e.RobotId);
if (robotId != null)
{
select = select.Where((r, ra, d, e) => r.Id == robotId);
}
else
{
select = select.WhereIf(robotState != null, (r, ra, d, e) => r.State == robotState)
.WhereIf(signalPeriod != null, (r, ra, d, e) => d.PeriodicSignal == signalPeriod)
.WhereIf(!string.IsNullOrEmpty(symbol), (r, ra, d, e) => r.Symbol == symbol)
.Where((r, ra, d, e) => r.TradePolicy == Enums.TradePolicy.D21);
}
var robotList = select.ToList((r, ra, d, e) => new Robot
{
Id = r.Id,
BusinessType = r.BusinessType,
ExchangeId = r.ExchangeId,
Symbol = r.Symbol,
State = r.State,
RunningTime = r.RunningTime,
CreateTime = r.CreateTime,
TradePolicy = r.TradePolicy,
//SymbolId = s.Id,
//SymbolSaleQuantityAccuracy = s.SaleQuantityAccuracy,
//SymbolId = s.Id,
//SymbolSaleQuantityAccuracy = s.SaleQuantityAccuracy,
RobotAccountId = ra.Id,
ClosePositionCount = ra.ClosePositionCount,
WinCount = ra.WinCount,
LoanAmount = ra.LoanAmount,
SoptCurrentcyAmount = ra.SoptCurrentcyAmount,
SpotCurrencyQuantity = ra.SpotCurrencyQuantity,
TotalProfit = ra.TotalProfit,
RobotAccountId = ra.Id,
ClosePositionCount = ra.ClosePositionCount,
WinCount = ra.WinCount,
LoanAmount = ra.LoanAmount,
SoptCurrentcyAmount = ra.SoptCurrentcyAmount,
SpotCurrencyQuantity = ra.SpotCurrencyQuantity,
TotalProfit = ra.TotalProfit,
ExchangeAccountId = e.AccountId,
ExchangeAPIKey = e.APIKey,
ExchangeSecretKey = e.SecretKey,
ExchangeAccountId = e.AccountId,
ExchangeAPIKey = e.APIKey,
ExchangeSecretKey = e.SecretKey,
D21ExecutionMode = d.ExecutionMode,
D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase,
D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal,
D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio,
D21PeriodicSignal = d.PeriodicSignal,
D21PolicyId = d.Id,
D21Position = d.Position,
D21Assets = d.Assets,
D21Level1PositionStopLossRatio = d.Level1PositionStopLossRatio,
D21Level1PriceStopLossRatio = d.Level1PriceStopLossRatio,
D21Level2PositionStopLossRatio = d.Level2PositionStopLossRatio,
D21Level2PriceStopLossRatio = d.Level2PriceStopLossRatio,
D21MaxExchangeLoanRatio = d.MaxExchangeLoanRatio,
D21MaxSystemLoanRatio = d.MaxSystemLoanRatio,
D21CreateTime = d.CreateTime
}).Map<IList<D21PolicyRobotResponse>>();
D21ExecutionMode = d.ExecutionMode,
D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase,
D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal,
D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio,
D21PeriodicSignal = d.PeriodicSignal,
D21PolicyId = d.Id,
D21Position = d.Position,
D21Assets = d.Assets,
D21Level1PositionStopLossRatio = d.Level1PositionStopLossRatio,
D21Level1PriceStopLossRatio = d.Level1PriceStopLossRatio,
D21Level2PositionStopLossRatio = d.Level2PositionStopLossRatio,
D21Level2PriceStopLossRatio = d.Level2PriceStopLossRatio,
D21MaxExchangeLoanRatio = d.MaxExchangeLoanRatio,
D21MaxSystemLoanRatio = d.MaxSystemLoanRatio,
D21CreateTime = d.CreateTime
}).Map<IList<D21PolicyRobotResponse>>();
if (isLoadRecentTradeProfit)

11
Binance.TradeRobot.Business/Business/SingalBusiness.cs

@ -38,15 +38,16 @@ namespace Binance.TradeRobot.Business
public void D21Singal(D21SingalRequest d21SingalRequest)
{
//logManager.GetLogger("D21").Info(JsonConvert.SerializeObject(d21SingalRequest));
var robotList = robotBusiness.GetD21PolicyRobotList(Enums.RobotState.Runing,
d21SingalRequest.KLinePeriodic,
d21SingalRequest.Symbol,
false,
var robotList = robotBusiness.GetD21PolicyRobotList(d21SingalRequest.RobotId,
Enums.RobotState.Runing,
d21SingalRequest.KLinePeriodic,
d21SingalRequest.Symbol,
false,
true);
if (robotList == null || robotList.Count() == 0)
throw new BusinessException("未找到符合条件的机器人");
var symbolInfo = exchangeBusiness.GetSymbol(robotList[0].ExchangeId,
var symbolInfo = exchangeBusiness.GetSymbol(robotList[0].ExchangeId,
robotList[0].Symbol);
if (symbolInfo == null)
throw new BusinessException($"未找到交易对{robotList[0].Symbol}({robotList[0].ExchangeId})");

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

@ -235,7 +235,7 @@ namespace Binance.TradeRobot.Business
SourceSingal = singalRequest.SingalType,
RobotId = robot.Id,
CreateTime = DateTime.Now,
Content = $"市价买单挂单成功,orderId:{orderId}"
Content = $"市价买单挂单成功,订单号:{orderId},挂单金额:{previewTradeAmount},借币金额:{diffAmount}"
});
fsql.Transaction(() =>
{
@ -339,7 +339,7 @@ namespace Binance.TradeRobot.Business
SourceSingal = singalRequest.SingalType,
RobotId = robot.Id,
CreateTime = DateTime.Now,
Content = $"市价卖单挂单成功,orderId:{orderId}"
Content = $"市价卖单挂单成功,订单号:{orderId},挂单数量:{saleQuantity}"
});
fsql.Transaction(() =>
{

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

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

13
Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml

@ -46,7 +46,7 @@
</member>
<member name="F:Binance.TradeRobot.Model.Base.Enums.BusinessType.Spot">
<summary>
币币
币币(现货)
</summary>
</member>
<member name="F:Binance.TradeRobot.Model.Base.Enums.BusinessType.IsolateMargin">
@ -739,6 +739,17 @@
运行时长(s)
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.RobotResponse.OrderPublishKey">
<summary>
订单推送监听实例Key
<para>币安逐仓杠杆需要单独的运行实例</para>
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.RobotResponse.SymbolInfo">
<summary>
订单推送日志Key
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.RobotResponse.RobotAccount">
<summary>
机器人账户对象

5
Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs

@ -12,7 +12,7 @@ namespace Binance.TradeRobot.Model.Db
[Column(DbType = "bigint", IsPrimary = true)]
public long Id { get; set; }
[Column(StringLength = 250, IsNullable = false)]
[Column(StringLength = 300, IsNullable = false)]
public string Content { get; set; }
[Column(DbType = "datetime")]
@ -21,6 +21,9 @@ namespace Binance.TradeRobot.Model.Db
[Column(DbType = "bigint")]
public long RobotId { get; set; }
[Column(DbType = "bigint", IsNullable = true)]
public long? OrderId { get; set; }
/// <summary>
/// 来源信号
/// </summary>

2
Binance.TradeRobot.Model/Dto/Request/Singal/BaseSingalRequest.cs

@ -4,6 +4,8 @@ namespace Binance.TradeRobot.Model.Dto
{
public class BaseSingalRequest
{
public long? RobotId { get; set; }
public Enums.SingalType SingalType { get; set; }
/// <summary>

Loading…
Cancel
Save