From 0b95b4bf32d2b373a3b8c586a383fdd5ac7d098e Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Sun, 3 Apr 2022 04:04:44 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E4=BA=A4=E6=98=93?=
=?UTF-8?q?=E6=89=80Id?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Binance.TradeRobot.API.xml | 3 ++-
.../Controllers/ExchangeAccountController.cs | 5 +++--
.../Binance.TradeRobot.Business.xml | 3 ++-
.../Business/ExchangeBusiness.cs | 6 ++++--
.../Business/RobotBusiness.cs | 3 ++-
Binance.TradeRobot.Model/Base/Enums.cs | 18 +++++++++++++++++
.../Binance.TradeRobot.Model.xml | 20 +++++++++++++++++++
.../Db/Exchange/ExchangeAccount.cs | 3 +++
Binance.TradeRobot.Model/Db/Robot/Robot.cs | 2 ++
.../Db/Robot/RobotAccount.cs | 5 +++++
.../Db/User/UserAccountProfitLossRecord.cs | 3 +++
.../Exchange/AddExchangeAccountRequest.cs | 2 ++
.../Dto/Request/Robot/AddRobotRequest.cs | 2 ++
13 files changed, 68 insertions(+), 7 deletions(-)
diff --git a/Binance.TradeRobot.API/Binance.TradeRobot.API.xml b/Binance.TradeRobot.API/Binance.TradeRobot.API.xml
index a4bb4d5..d30aeb6 100644
--- a/Binance.TradeRobot.API/Binance.TradeRobot.API.xml
+++ b/Binance.TradeRobot.API/Binance.TradeRobot.API.xml
@@ -23,11 +23,12 @@
交易策略
-
+
获取APIKey未使用的交易所账户列表
+
diff --git a/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs b/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
index eb88f78..64b17cb 100644
--- a/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
+++ b/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
@@ -53,11 +53,12 @@ namespace Binance.TradeRobot.API.Controllers
/// 获取APIKey未使用的交易所账户列表
///
///
+ ///
///
[HttpGet("{tradePolicy}")]
- public IList GetNoUsedExchangeAccountList([FromRoute]Enums.TradePolicy tradePolicy)
+ public IList GetNoUsedExchangeAccountList([FromRoute] Enums.TradePolicy tradePolicy, [FromRoute] Enums.Exchange exchangeId)
{
- return exchangeBusiness.GetNoUsedExchangeAccountList(tradePolicy);
+ return exchangeBusiness.GetNoUsedExchangeAccountList(tradePolicy, exchangeId);
}
}
}
diff --git a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
index 0d455e1..ea5a435 100644
--- a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
+++ b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
@@ -4,11 +4,12 @@
Binance.TradeRobot.Business
-
+
获取APIKey未使用交易所账户列表
+
diff --git a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
index ca0b772..b0b3421 100644
--- a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
@@ -135,10 +135,12 @@ namespace Binance.TradeRobot.Business.Exchange
/// 获取APIKey未使用交易所账户列表
///
///
+ ///
///
- public IList GetNoUsedExchangeAccountList(Enums.TradePolicy tradePolicy)
+ public IList GetNoUsedExchangeAccountList(Enums.TradePolicy tradePolicy, Enums.Exchange exchangeId)
{
- var exchangeAccountList = fsql.Select().Where(ea => ea.TradePolicy == tradePolicy).ToList().Map>();
+ var exchangeAccountList = fsql.Select().Where(ea => ea.TradePolicy == tradePolicy && ea.ExchangeId == exchangeId)
+ .ToList().Map>();
var accountIdList = exchangeAccountList.Select(ea => ea.Id);
var exchangeAPIKeyList = fsql.Select().Where(k => k.RobotId == null && accountIdList.Contains(k.AccountId))
.ToList()
diff --git a/Binance.TradeRobot.Business/Business/RobotBusiness.cs b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
index 6f798b1..b985941 100644
--- a/Binance.TradeRobot.Business/Business/RobotBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
@@ -51,7 +51,8 @@ namespace Binance.TradeRobot.Business
Id = idGenerator.NewLong(),
Symbol = addRobotRequest.Symbol,
TradePolicy = addRobotRequest.TradePolicy,
- BusinessType = addRobotRequest.TradePolicy.GetBusinessType()
+ BusinessType = addRobotRequest.TradePolicy.GetBusinessType(),
+ ExchangeId = addRobotRequest.ExchangeId,
};
}
diff --git a/Binance.TradeRobot.Model/Base/Enums.cs b/Binance.TradeRobot.Model/Base/Enums.cs
index eed48b6..7a8f251 100644
--- a/Binance.TradeRobot.Model/Base/Enums.cs
+++ b/Binance.TradeRobot.Model/Base/Enums.cs
@@ -97,5 +97,23 @@ namespace Binance.TradeRobot.Model.Base
_1M
}
#endregion
+
+ #region 交易所
+
+ ///
+ /// Binance=0, Gate.io=1
+ ///
+ public enum Exchange
+ {
+ ///
+ /// 币安
+ ///
+ Binance = 0,
+ ///
+ /// 芝麻开门
+ ///
+ Gate_IO = 1
+ }
+ #endregion
}
}
diff --git a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
index 4ce0f16..fbb4d82 100644
--- a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
+++ b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
@@ -74,6 +74,21 @@
信号周期 1m=0,3m=1,5m=2,15m=3,30m=4,1h=5,2h=6,4h=7,6h=8,8h=9,12h=10,1d=11,3d=12,1w=13,1M=14
+
+
+ Binance=0, Gate.io=1
+
+
+
+
+ 币安
+
+
+
+
+ 芝麻开门
+
+
业务类型
@@ -139,6 +154,11 @@
盈利次数
+
+
+ 总借币金额
+
+
投资本金
diff --git a/Binance.TradeRobot.Model/Db/Exchange/ExchangeAccount.cs b/Binance.TradeRobot.Model/Db/Exchange/ExchangeAccount.cs
index fe5d9ad..1cec070 100644
--- a/Binance.TradeRobot.Model/Db/Exchange/ExchangeAccount.cs
+++ b/Binance.TradeRobot.Model/Db/Exchange/ExchangeAccount.cs
@@ -33,6 +33,9 @@ namespace Binance.TradeRobot.Model.Db
[Column(MapType = typeof(int))]
public Enums.TradePolicy TradePolicy { get; set; }
+ [Column(MapType = typeof(int))]
+ public Enums.Exchange ExchangeId { get; set; }
+
}
}
diff --git a/Binance.TradeRobot.Model/Db/Robot/Robot.cs b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
index e361767..99878cd 100644
--- a/Binance.TradeRobot.Model/Db/Robot/Robot.cs
+++ b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
@@ -32,6 +32,8 @@ namespace Binance.TradeRobot.Model.Db
[Column(MapType = (typeof(int)))]
public Enums.BusinessType BusinessType { get; set; }
+ [Column(MapType = (typeof(int)))]
+ public Enums.Exchange ExchangeId { get; set; }
}
}
diff --git a/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs b/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
index 838922f..7d2538d 100644
--- a/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
+++ b/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
@@ -41,6 +41,11 @@ namespace Binance.TradeRobot.Model.Db
///
public long WinCount { get; set; } = 0;
+ ///
+ /// 总借币金额
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal LoanAmount { get; set; } = 0.0M;
}
}
diff --git a/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs b/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs
index 46b3e86..fb08e16 100644
--- a/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs
+++ b/Binance.TradeRobot.Model/Db/User/UserAccountProfitLossRecord.cs
@@ -54,6 +54,9 @@ namespace Binance.TradeRobot.Model.Db
[Column(DbType = "decimal(18,8)")]
public decimal UserProfit { get; set; } = 0.0M;
+ [Column(MapType = (typeof(int)))]
+ public Enums.Exchange ExchangeId { get; set; }
+
}
}
diff --git a/Binance.TradeRobot.Model/Dto/Request/Exchange/AddExchangeAccountRequest.cs b/Binance.TradeRobot.Model/Dto/Request/Exchange/AddExchangeAccountRequest.cs
index a4b5f7d..0dce341 100644
--- a/Binance.TradeRobot.Model/Dto/Request/Exchange/AddExchangeAccountRequest.cs
+++ b/Binance.TradeRobot.Model/Dto/Request/Exchange/AddExchangeAccountRequest.cs
@@ -8,6 +8,8 @@ namespace Binance.TradeRobot.Model.Dto
public string LoginName { get; set; }
+ public Enums.Exchange ExchangeId { get; set; }
+
///
/// 交易策略
///
diff --git a/Binance.TradeRobot.Model/Dto/Request/Robot/AddRobotRequest.cs b/Binance.TradeRobot.Model/Dto/Request/Robot/AddRobotRequest.cs
index e1f86fe..3b13762 100644
--- a/Binance.TradeRobot.Model/Dto/Request/Robot/AddRobotRequest.cs
+++ b/Binance.TradeRobot.Model/Dto/Request/Robot/AddRobotRequest.cs
@@ -13,5 +13,7 @@ namespace Binance.TradeRobot.Model.Dto
/// 交易所APIKeyId
///
public long ExchangeAPIKeyId { get; set; }
+
+ public Enums.Exchange ExchangeId { get; set; }
}
}
From 8c6ae51c9a72e3c00e1470c4f4de1e27877080d0 Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Tue, 5 Apr 2022 03:48:36 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=8A=A82.1=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Binance.TradeRobot.Model/Base/Enums.cs | 26 ++++-
.../Db/Order/ExecutionLog.cs | 24 +++++
.../Db/Order/LoanOrder.cs | 54 ++++++++++
.../Db/Order/SpotOrder.cs | 99 +++++++++++++++++++
.../Db/Policy/Spot/D21Policy.cs | 63 ++++++++++++
Binance.TradeRobot.Model/Db/Robot/Robot.cs | 2 +-
.../Db/代码生成/__重新生成.bat | 2 +-
7 files changed, 267 insertions(+), 3 deletions(-)
create mode 100644 Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs
create mode 100644 Binance.TradeRobot.Model/Db/Order/LoanOrder.cs
create mode 100644 Binance.TradeRobot.Model/Db/Order/SpotOrder.cs
create mode 100644 Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs
diff --git a/Binance.TradeRobot.Model/Base/Enums.cs b/Binance.TradeRobot.Model/Base/Enums.cs
index 7a8f251..a92006f 100644
--- a/Binance.TradeRobot.Model/Base/Enums.cs
+++ b/Binance.TradeRobot.Model/Base/Enums.cs
@@ -58,7 +58,7 @@ namespace Binance.TradeRobot.Model.Base
///
/// 机器人状态 Stop=0,Runing=1
///
- public enum RobotStatus
+ public enum RobotState
{
Stop = 0,
Runing = 1
@@ -114,6 +114,30 @@ namespace Binance.TradeRobot.Model.Base
///
Gate_IO = 1
}
+
+ ///
+ /// 借币状态 Loading=0 returned=1
+ ///
+ public enum LoanState
+ {
+ Loaning, retured
+ }
+
+ ///
+ /// 订单状态
+ ///
+ public enum OrderState
+ {
+ Created
+ }
+
+ ///
+ /// 交易方向 Buy=0,Sell=1
+ ///
+ public enum TradeDirection
+ {
+ Buy, Sell
+ }
#endregion
}
}
diff --git a/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs b/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs
new file mode 100644
index 0000000..41aac46
--- /dev/null
+++ b/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs
@@ -0,0 +1,24 @@
+using FreeSql.DataAnnotations;
+using System;
+
+namespace Binance.TradeRobot.Model.Db
+{
+
+ [Table(DisableSyncStructure = true)]
+ public partial class ExecutionLog {
+
+ [ Column(IsPrimary = true)]
+ public long Id { get; set; }
+
+ [Column(StringLength = 250, IsNullable = false)]
+ public string Content { get; set; }
+
+ [Column(InsertValueSql = "getdate()")]
+ public DateTime CreateTime { get; set; }
+
+
+ public long RobotId { get; set; }
+
+ }
+
+}
diff --git a/Binance.TradeRobot.Model/Db/Order/LoanOrder.cs b/Binance.TradeRobot.Model/Db/Order/LoanOrder.cs
new file mode 100644
index 0000000..05c59e1
--- /dev/null
+++ b/Binance.TradeRobot.Model/Db/Order/LoanOrder.cs
@@ -0,0 +1,54 @@
+using Binance.TradeRobot.Model.Base;
+using FreeSql.DataAnnotations;
+using System;
+
+namespace Binance.TradeRobot.Model.Db
+{
+
+ [Table(DisableSyncStructure = true)]
+ public partial class LoanOrder
+ {
+
+ [Column(IsPrimary = true)]
+ public long Id { get; set; }
+
+ [Column(InsertValueSql = "getdate()")]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 交易所Id
+ ///
+
+ public int ExchangeId { get; set; }
+
+
+ [Column(MapType = typeof(int))]
+ public Enums.LoanState LoadState { get; set; } = Enums.LoanState.Loaning;
+
+ ///
+ /// 借币金额
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal LoanAmount { get; set; } = 0.0M;
+
+ ///
+ /// 借币利息
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal LoanFee { get; set; } = 0.0M;
+
+ [Column(StringLength = 50, IsNullable = false)]
+ public string LoanOrderId { get; set; }
+
+
+ public DateTime ReturnTime { get; set; }
+
+
+ public long RobotId { get; set; }
+
+
+ public long SpotOrderId { get; set; }
+
+ }
+
+}
diff --git a/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs b/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs
new file mode 100644
index 0000000..93dee84
--- /dev/null
+++ b/Binance.TradeRobot.Model/Db/Order/SpotOrder.cs
@@ -0,0 +1,99 @@
+using Binance.TradeRobot.Model.Base;
+using FreeSql.DataAnnotations;
+using System;
+
+namespace Binance.TradeRobot.Model.Db
+{
+
+ [Table(DisableSyncStructure = true)]
+ public partial class SpotOrder
+ {
+
+ [Column(IsPrimary = true)]
+ public long Id { get; set; }
+
+ [Column(InsertValueSql = "getdate()")]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 交易所Id
+ ///
+
+ public int ExchangeId { get; set; }
+
+ ///
+ /// 历史利润
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal HistoryTotalProfit { get; set; } = 0.0M;
+
+ ///
+ /// 最后交易时间
+ ///
+
+ public DateTime? LastTradeTime { get; set; }
+
+ ///
+ /// 交易策略
+ ///
+
+ public int PolicyType { get; set; }
+
+ ///
+ /// 订单利润
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal Profit { get; set; } = 0.0M;
+
+
+ public long RobotId { get; set; }
+
+
+ [Column(MapType = typeof(int))]
+ public Enums.OrderState States { get; set; }
+
+ [Column(MapType = typeof(int))]
+ public Enums.TradeDirection TradeDirection { get; set; }
+
+ [Column(StringLength = 50, IsNullable = false)]
+ public string Symbol { get; set; }
+
+ ///
+ /// 成交总额
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal TradeAmount { get; set; } = 0.0M;
+
+ ///
+ /// 交易次数
+ ///
+
+ public int TradeCount { get; set; } = 0;
+
+ ///
+ /// 手续费
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal TradeFee { get; set; } = 0.0M;
+
+ ///
+ /// 交易手续费单位
+ ///
+ [Column(StringLength = 15, IsNullable = false)]
+ public string TradeFeeUnit { get; set; }
+
+ ///
+ /// 成交均价
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal TradePrice { get; set; } = 0.0M;
+
+ ///
+ /// 交易量
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal TradeQuantity { get; set; }
+
+ }
+
+}
diff --git a/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs b/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs
new file mode 100644
index 0000000..a3c4403
--- /dev/null
+++ b/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs
@@ -0,0 +1,63 @@
+using Binance.TradeRobot.Model.Base;
+using FreeSql.DataAnnotations;
+using System;
+
+namespace Binance.TradeRobot.Model.Db
+{
+
+ [Table(DisableSyncStructure = true)]
+ public partial class D21Policy
+ {
+
+ [Column(IsPrimary = true)]
+ public long Id { get; set; }
+
+ [Column(InsertValueSql = "getdate()")]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 执行模式
+ ///
+
+ public int ExecutionMode { get; set; } = 0;
+
+ ///
+ /// 是否开启增购
+ ///
+
+ public bool IsEnabledIncreasePurchase { get; set; } = true;
+
+ ///
+ /// 是否开启错误信号补救
+ ///
+
+ public bool IsEnableRemedyForErrorCrossSignal { get; set; } = true;
+
+ ///
+ /// 最大追高比例
+ ///
+ [Column(DbType = "decimal(18,2)")]
+ public decimal MaxFollowPurchaseRatio { get; set; } = 0.0M;
+
+ ///
+ /// 信号周期
+ ///
+
+ public Enums.SignalPeriod PeriodicSignal { get; set; }
+
+ ///
+ /// 仓位
+ ///
+ [Column(DbType = "decimal(18,8)")]
+ public decimal Position { get; set; } = 0.0M;
+
+
+ public long RobotId { get; set; }
+
+ ///
+ /// 止损比例
+ ///
+ public decimal StopLossRatio { get; set; }
+ }
+
+}
diff --git a/Binance.TradeRobot.Model/Db/Robot/Robot.cs b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
index 99878cd..023481a 100644
--- a/Binance.TradeRobot.Model/Db/Robot/Robot.cs
+++ b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
@@ -24,7 +24,7 @@ namespace Binance.TradeRobot.Model.Db
public long RunningTime { get; set; } = 0;
[Column(MapType = (typeof(int)))]
- public Enums.RobotStatus State { get; set; }
+ public Enums.RobotState State { get; set; }
[Column(StringLength = 50, IsNullable = false)]
public string Symbol { get; set; }
diff --git a/Binance.TradeRobot.Model/Db/代码生成/__重新生成.bat b/Binance.TradeRobot.Model/Db/代码生成/__重新生成.bat
index 9a24191..00aec37 100644
--- a/Binance.TradeRobot.Model/Db/代码生成/__重新生成.bat
+++ b/Binance.TradeRobot.Model/Db/代码生成/__重新生成.bat
@@ -1 +1 @@
-FreeSql.Generator -Razor 1 -NameOptions 1,0,0,0 -NameSpace Binance.TradeRobot.Model.Db -DB "SqlServer,data source=18.179.56.42;initial catalog=Binance.TradeRobot.DB;User Id=sa;Password=kaicn1132+-;TrustServerCertificate=true;pooling=true;max pool size=2" -FileName "{name}.cs"
+FreeSql.Generator -Razor 1 -NameOptions 1,0,0,0 -NameSpace Binance.TradeRobot.Model.Db -DB "SqlServer,data source=.;initial catalog=Binance.TradeRobot.DB;User Id=sa;Password=pc911103;TrustServerCertificate=true;pooling=true;max pool size=2" -FileName "{name}.cs"
From 3beff6cf5de4b89156a3e1118c47c5444b948f3d Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Wed, 6 Apr 2022 03:07:41 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=8A=A82.1=E6=9C=BA=E5=99=A8=E4=BA=BA=E6=8E=A5=E5=8F=A3=20?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9F=A5=E8=AF=A2=E5=8A=A8.21=E6=9C=BA?=
=?UTF-8?q?=E5=99=A8=E4=BA=BA=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Binance.TradeRobot.API.xml | 8 +-
.../Controllers/RobotController.cs | 22 ++-
.../Binance.TradeRobot.Business.xml | 6 +
.../Business/RobotBusiness.cs | 92 ++++++++--
.../Extensions/RobotExtension.cs | 3 +-
Binance.TradeRobot.Model/Base/Enums.cs | 48 +++---
.../Base/MappingProfiles.cs | 21 +++
.../Binance.TradeRobot.Model.xml | 163 +++++++++++++++++-
.../Db/Policy/Spot/D21Policy.cs | 4 +-
Binance.TradeRobot.Model/Db/Robot/Robot.cs | 93 +++++++++-
.../Db/Robot/RobotAccount.cs | 12 ++
.../Request/Robot/AddD21PolicyRobotRequest.cs | 41 +++++
.../Dto/Response/Policy/D21PolicyResponse.cs | 8 +
.../Response/Robot/D21PolicyRobotResponse.cs | 7 +
.../Response/Robot/RobotAccountResponse.cs | 8 +
.../Dto/Response/Robot/RobotResponse.cs | 27 +++
16 files changed, 515 insertions(+), 48 deletions(-)
create mode 100644 Binance.TradeRobot.Model/Dto/Request/Robot/AddD21PolicyRobotRequest.cs
create mode 100644 Binance.TradeRobot.Model/Dto/Response/Policy/D21PolicyResponse.cs
create mode 100644 Binance.TradeRobot.Model/Dto/Response/Robot/D21PolicyRobotResponse.cs
create mode 100644 Binance.TradeRobot.Model/Dto/Response/Robot/RobotAccountResponse.cs
create mode 100644 Binance.TradeRobot.Model/Dto/Response/Robot/RobotResponse.cs
diff --git a/Binance.TradeRobot.API/Binance.TradeRobot.API.xml b/Binance.TradeRobot.API/Binance.TradeRobot.API.xml
index d30aeb6..1144f50 100644
--- a/Binance.TradeRobot.API/Binance.TradeRobot.API.xml
+++ b/Binance.TradeRobot.API/Binance.TradeRobot.API.xml
@@ -33,10 +33,16 @@
- 创建金字塔策略合约机器人
+ 创建金字塔策略机器人
+
+
+ 创建动2.1策略机器人
+
+
+
用户登录
diff --git a/Binance.TradeRobot.API/Controllers/RobotController.cs b/Binance.TradeRobot.API/Controllers/RobotController.cs
index 7e51e55..ae9f540 100644
--- a/Binance.TradeRobot.API/Controllers/RobotController.cs
+++ b/Binance.TradeRobot.API/Controllers/RobotController.cs
@@ -3,6 +3,7 @@ using Binance.TradeRobot.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
namespace Binance.TradeRobot.API.Controllers
{
@@ -17,7 +18,7 @@ namespace Binance.TradeRobot.API.Controllers
}
///
- /// 创建金字塔策略合约机器人
+ /// 创建金字塔策略机器人
///
///
[HttpPost]
@@ -25,5 +26,24 @@ namespace Binance.TradeRobot.API.Controllers
{
robotBusiness.AddPyramidPolicyRobot(addPyramidPolicyRobotRequest);
}
+
+ ///
+ /// 创建动2.1策略机器人
+ ///
+ ///
+ public void AddD21PolicyRobot([FromBody] AddD21PolicyRobotRequest addD21PolicyRobotRequest)
+ {
+ robotBusiness.AddD21PolicyRobot(addD21PolicyRobotRequest);
+ }
+
+ ///
+ /// 获取动2.1机器人列表
+ ///
+ ///
+ [HttpGet]
+ public IList GetD21PolicyRobotList()
+ {
+ return robotBusiness.GetD21PolicyRobotList();
+ }
}
}
diff --git a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
index ea5a435..b6095d5 100644
--- a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
+++ b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
@@ -26,6 +26,12 @@
+
+
+ 添加动2.1策略机器人
+
+
+
单向资产变更
diff --git a/Binance.TradeRobot.Business/Business/RobotBusiness.cs b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
index b985941..7c3b541 100644
--- a/Binance.TradeRobot.Business/Business/RobotBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
@@ -6,6 +6,7 @@ using Binance.TradeRobot.Model.Db;
using Binance.TradeRobot.Model.Dto;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
+using System.Collections.Generic;
using System.Data.Common;
using Yitter.IdGenerator;
@@ -44,28 +45,33 @@ namespace Binance.TradeRobot.Business
throw new BusinessException("同一个交易所账号下只允许存在一个交易对");
}
- private Robot CreateRobot(AddRobotRequest addRobotRequest)
+ ///
+ /// 添加机器人和账户
+ ///
+ ///
+ ///
+ /// 机器人Id
+ private long AddRobotWithTran(AddRobotRequest addRobotRequest, DbTransaction tran)
{
- return new Robot()
+ var robotId = idGenerator.NewLong();
+ fsql.Insert(new Robot()
{
- Id = idGenerator.NewLong(),
+ Id = robotId,
Symbol = addRobotRequest.Symbol,
TradePolicy = addRobotRequest.TradePolicy,
BusinessType = addRobotRequest.TradePolicy.GetBusinessType(),
ExchangeId = addRobotRequest.ExchangeId,
- };
- }
+ }).WithTransaction(tran).ExecuteAffrows();
- private RobotAccount CreateRobotAccount(long robotId)
- {
- return new RobotAccount() { Id = idGenerator.NewLong(), RobotId = robotId };
- }
+ fsql.Insert(new RobotAccount()
+ {
+ Id = idGenerator.NewLong(),
+ RobotId = robotId
+ }).WithTransaction(tran).ExecuteAffrows();
- private void ExecuteAddRobotWithTran(Robot robot, RobotAccount robotAccount, long exchangeAPIKeyId, DbTransaction tran)
- {
- fsql.Insert(robot).WithTransaction(tran).ExecuteAffrows();
- fsql.Insert(robotAccount).WithTransaction(tran).ExecuteAffrows();
- fsql.Update(exchangeAPIKeyId).WithTransaction(tran).Set(ek => ek.RobotId, robot.Id).ExecuteAffrows();
+ fsql.Update(addRobotRequest.ExchangeAPIKeyId).WithTransaction(tran).Set(ek => ek.RobotId, robotId).ExecuteAffrows();
+
+ return robotId;
}
///
@@ -75,20 +81,70 @@ namespace Binance.TradeRobot.Business
public void AddPyramidPolicyRobot(AddPyramidPolicyRobotRequest addPyramidPolicyRobotRequest)
{
CheckRobotRegister(addPyramidPolicyRobotRequest, out ExchangeAPIKey exchangeAPIKey);
- var robot = CreateRobot(addPyramidPolicyRobotRequest);
- var robotAccount = CreateRobotAccount(robot.Id);
var pyramidPolicy = addPyramidPolicyRobotRequest.Map();
pyramidPolicy.Id = idGenerator.NewLong();
- pyramidPolicy.RobotId = robot.Id;
fsql.Transaction(() =>
{
var tran = fsql.Ado.TransactionCurrentThread;
- ExecuteAddRobotWithTran(robot, robotAccount, addPyramidPolicyRobotRequest.ExchangeAPIKeyId, tran);
+ pyramidPolicy.RobotId = AddRobotWithTran(addPyramidPolicyRobotRequest, tran);
fsql.Insert(pyramidPolicy).ExecuteAffrows();
});
//调整仓位杠杆倍数
+ }
+
+ ///
+ /// 添加动2.1策略机器人
+ ///
+ ///
+ public void AddD21PolicyRobot(AddD21PolicyRobotRequest addD21PolicyRobotRequest)
+ {
+ CheckRobotRegister(addD21PolicyRobotRequest, out _);
+ var d21Policy = addD21PolicyRobotRequest.Map();
+ d21Policy.Id = idGenerator.NewLong();
+ fsql.Transaction(() =>
+ {
+ var tran = fsql.Ado.TransactionCurrentThread;
+ d21Policy.RobotId = AddRobotWithTran(addD21PolicyRobotRequest, tran);
+ fsql.Insert(d21Policy).ExecuteAffrows();
+ });
+ }
+
+ public IList GetD21PolicyRobotList()
+ {
+ var robotList = fsql.Select().InnerJoin((r, ra, d) => r.Id == ra.RobotId)
+ .InnerJoin((r, ra, d) => r.Id == d.RobotId)
+ .ToList((r, ra, d) => 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,
+
+ RobotAccountId = ra.Id,
+ ClosePositionCount = ra.ClosePositionCount,
+ WinCount = ra.WinCount,
+ LoanAmount = ra.LoanAmount,
+ SoptCurrentcyAmount = ra.SoptCurrentcyAmount,
+ SpotCurrencyQuantity = ra.SpotCurrencyQuantity,
+ TotalProfit = ra.TotalProfit,
+
+ D21ExecutionMode = d.ExecutionMode,
+ D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase,
+ D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal,
+ D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio,
+ D21PeriodicSignal = d.PeriodicSignal,
+ D21PolicyId = d.Id,
+ D21Position = d.Position,
+ D21StopLossRatio = d.StopLossRatio
+ }).Map>();
+
+ return robotList;
}
}
}
diff --git a/Binance.TradeRobot.Business/Extensions/RobotExtension.cs b/Binance.TradeRobot.Business/Extensions/RobotExtension.cs
index af53670..f4ff5fe 100644
--- a/Binance.TradeRobot.Business/Extensions/RobotExtension.cs
+++ b/Binance.TradeRobot.Business/Extensions/RobotExtension.cs
@@ -8,7 +8,8 @@ namespace Binance.TradeRobot.Business.Extensions
private static IDictionary BusinessTypeDic = new Dictionary()
{
{Enums.TradePolicy.金字塔, Enums.BusinessType.UPrep },
- { Enums.TradePolicy.动量趋势v2, Enums.BusinessType.Spot_Margin}
+ { Enums.TradePolicy.动量趋势v2, Enums.BusinessType.Spot_Margin},
+ { Enums.TradePolicy.动量趋势v21, Enums.BusinessType.Spot_Margin}
};
///
diff --git a/Binance.TradeRobot.Model/Base/Enums.cs b/Binance.TradeRobot.Model/Base/Enums.cs
index a92006f..40154fc 100644
--- a/Binance.TradeRobot.Model/Base/Enums.cs
+++ b/Binance.TradeRobot.Model/Base/Enums.cs
@@ -65,36 +65,22 @@ namespace Binance.TradeRobot.Model.Base
}
///
- /// 交易策略 动量趋势v2=2,金字塔=11
+ /// 交易策略 动量趋势v2=0,动量趋势v21=1,金字塔=11
///
public enum TradePolicy
{
- 动量趋势v2 = 2,
-
+ 动量趋势v2 = 0,
+ 动量趋势v21 = 1,
金字塔 = 11
}
///
- /// 信号周期 1m=0,3m=1,5m=2,15m=3,30m=4,1h=5,2h=6,4h=7,6h=8,8h=9,12h=10,1d=11,3d=12,1w=13,1M=14
+ /// 执行模式 Both=0,OnlyBuy=1,OnlySell=2
///
- public enum SignalPeriod
+ public enum ExecutionMode
{
- _1m,
- _3m,
- _5m,
- _15m,
- _30m,
- _1h,
- _2h,
- _4h,
- _6h,
- _8h,
- _12h,
- _1d,
- _3d,
- _1w,
- _1M
+ Both = 0, OnlyBuy = 1, OnlySell = 2
}
#endregion
@@ -138,6 +124,28 @@ namespace Binance.TradeRobot.Model.Base
{
Buy, Sell
}
+
+ ///
+ /// 信号周期 1m=0,3m=1,5m=2,15m=3,30m=4,1h=5,2h=6,4h=7,6h=8,8h=9,12h=10,1d=11,3d=12,1w=13,1M=14
+ ///
+ public enum SignalPeriod
+ {
+ _1m,
+ _3m,
+ _5m,
+ _15m,
+ _30m,
+ _1h,
+ _2h,
+ _4h,
+ _6h,
+ _8h,
+ _12h,
+ _1d,
+ _3d,
+ _1w,
+ _1M
+ }
#endregion
}
}
diff --git a/Binance.TradeRobot.Model/Base/MappingProfiles.cs b/Binance.TradeRobot.Model/Base/MappingProfiles.cs
index b5ea5f2..9ac3a42 100644
--- a/Binance.TradeRobot.Model/Base/MappingProfiles.cs
+++ b/Binance.TradeRobot.Model/Base/MappingProfiles.cs
@@ -17,6 +17,27 @@ namespace Binance.TradeRobot.Model.Base
CreateMap();
CreateMap();
+ CreateMap();
+
+ CreateMap().ForPath(t => t.RobotAccount.Id, opt => opt.MapFrom(f => f.RobotAccountId))
+ .ForPath(t => t.RobotAccount.RobotId, opt => opt.MapFrom(f => f.Id))
+ .ForPath(t => t.RobotAccount.SoptCurrentcyAmount, opt => opt.MapFrom(f => f.SoptCurrentcyAmount))
+ .ForPath(t => t.RobotAccount.SpotCurrencyQuantity, opt => opt.MapFrom(f => f.SpotCurrencyQuantity))
+ .ForPath(t => t.RobotAccount.ClosePositionCount, opt => opt.MapFrom(f => f.ClosePositionCount))
+ .ForPath(t => t.RobotAccount.LoanAmount, opt => opt.MapFrom(f => f.LoanAmount))
+ .ForPath(t => t.RobotAccount.TotalProfit, opt => opt.MapFrom(f => f.TotalProfit))
+ .ForPath(t => t.RobotAccount.WinCount, opt => opt.MapFrom(f => f.WinCount));
+ CreateMap().IncludeBase()
+ .ForPath(t => t.D21Policy.Id, opt => opt.MapFrom(f => f.D21PolicyId))
+ .ForPath(t => t.D21Policy.RobotId, opt => opt.MapFrom(f => f.Id))
+ .ForPath(t => t.D21Policy.Position, opt => opt.MapFrom(f => f.D21Position))
+ .ForPath(t => t.D21Policy.IsEnabledIncreasePurchase, opt => opt.MapFrom(f => f.D21IsEnabledIncreasePurchase))
+ .ForPath(t => t.D21Policy.IsEnableRemedyForErrorCrossSignal, opt => opt.MapFrom(f => f.D21IsEnableRemedyForErrorCrossSignal))
+ .ForPath(t => t.D21Policy.PeriodicSignal, opt => opt.MapFrom(f => f.D21PeriodicSignal))
+ .ForPath(t => t.D21Policy.MaxFollowPurchaseRatio, opt => opt.MapFrom(f => f.D21MaxFollowPurchaseRatio))
+ .ForPath(t => t.D21Policy.StopLossRatio, opt => opt.MapFrom(f => f.D21StopLossRatio))
+ .ForPath(t => t.D21Policy.CreateTime, opt => opt.MapFrom(f => f.D21CreateTime))
+ .ForPath(t => t.D21Policy.ExecutionMode, opt => opt.MapFrom(f => f.D21ExecutionMode));
}
}
}
diff --git a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
index fbb4d82..1b4e917 100644
--- a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
+++ b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
@@ -59,19 +59,19 @@
U本位合约
-
+
机器人状态 Stop=0,Runing=1
- 交易策略 动量趋势v2=2,金字塔=11
+ 交易策略 动量趋势v2=0,动量趋势v21=1,金字塔=11
-
+
- 信号周期 1m=0,3m=1,5m=2,15m=3,30m=4,1h=5,2h=6,4h=7,6h=8,8h=9,12h=10,1d=11,3d=12,1w=13,1M=14
+ 执行模式 Both=0,OnlyBuy=1,OnlySell=2
@@ -89,6 +89,26 @@
芝麻开门
+
+
+ 借币状态 Loading=0 returned=1
+
+
+
+
+ 订单状态
+
+
+
+
+ 交易方向 Buy=0,Sell=1
+
+
+
+
+ 信号周期 1m=0,3m=1,5m=2,15m=3,30m=4,1h=5,2h=6,4h=7,6h=8,8h=9,12h=10,1d=11,3d=12,1w=13,1M=14
+
+
业务类型
@@ -109,6 +129,111 @@
交易所账号Id
+
+
+ 交易所Id
+
+
+
+
+ 借币金额
+
+
+
+
+ 借币利息
+
+
+
+
+ 交易所Id
+
+
+
+
+ 历史利润
+
+
+
+
+ 最后交易时间
+
+
+
+
+ 交易策略
+
+
+
+
+ 订单利润
+
+
+
+
+ 成交总额
+
+
+
+
+ 交易次数
+
+
+
+
+ 手续费
+
+
+
+
+ 交易手续费单位
+
+
+
+
+ 成交均价
+
+
+
+
+ 交易量
+
+
+
+
+ 执行模式
+
+
+
+
+ 是否开启增购
+
+
+
+
+ 是否开启错误信号补救
+
+
+
+
+ 最大追高比例
+
+
+
+
+ 信号周期
+
+
+
+
+ 仓位
+
+
+
+
+ 止损比例
+
+
杠杆倍数(1-125整数)
@@ -224,6 +349,36 @@
交易策略
+
+
+ 是否开启增购
+
+
+
+
+ 是否开启错误信号补救
+
+
+
+
+ 最大追高比例
+
+
+
+
+ 信号周期
+
+
+
+
+ 仓位
+
+
+
+
+ 止损比例
+
+
信号周期
diff --git a/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs b/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs
index a3c4403..61492af 100644
--- a/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs
+++ b/Binance.TradeRobot.Model/Db/Policy/Spot/D21Policy.cs
@@ -18,8 +18,8 @@ namespace Binance.TradeRobot.Model.Db
///
/// 执行模式
///
-
- public int ExecutionMode { get; set; } = 0;
+ [Column(MapType = typeof(int))]
+ public Enums.ExecutionMode ExecutionMode { get; set; } = Enums.ExecutionMode.Both;
///
/// 是否开启增购
diff --git a/Binance.TradeRobot.Model/Db/Robot/Robot.cs b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
index 023481a..737d1e2 100644
--- a/Binance.TradeRobot.Model/Db/Robot/Robot.cs
+++ b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
@@ -34,6 +34,97 @@ namespace Binance.TradeRobot.Model.Db
[Column(MapType = (typeof(int)))]
public Enums.Exchange ExchangeId { get; set; }
- }
+ #region RobotAccount Extension
+
+ [Column(IsIgnore = true)]
+ public long RobotAccountId { get; set; }
+
+ ///
+ /// 平仓次数
+ ///
+ [Column(IsIgnore = true)]
+ public long ClosePositionCount { get; set; } = 0;
+
+ ///
+ /// 现货/杠杆持仓金额
+ ///
+ [Column(IsIgnore = true)]
+ public decimal SoptCurrentcyAmount { get; set; } = 0.0M;
+
+ ///
+ /// 现货/杠杆持仓数量
+ ///
+ [Column(IsIgnore = true)]
+ public decimal SpotCurrencyQuantity { get; set; } = 0.0M;
+
+ ///
+ /// 总收益
+ ///
+ [Column(IsIgnore = true)]
+ public decimal TotalProfit { get; set; } = 0.0M;
+
+ ///
+ /// 盈利次数
+ ///
+ [Column(IsIgnore = true)]
+ public long WinCount { get; set; } = 0;
+
+ ///
+ /// 总借币金额
+ ///
+ [Column(IsIgnore = true)]
+ public decimal LoanAmount { get; set; } = 0.0M;
+ #endregion
+
+ #region D21Policy Extension
+ [Column(IsIgnore = true)]
+ public long D21PolicyId { get; set; }
+
+ ///
+ /// 执行模式
+ ///
+ [Column(IsIgnore = true)]
+ public Enums.ExecutionMode D21ExecutionMode { get; set; } = Enums.ExecutionMode.Both;
+
+ ///
+ /// 是否开启增购
+ ///
+ [Column(IsIgnore = true)]
+ public bool D21IsEnabledIncreasePurchase { get; set; } = true;
+
+ ///
+ /// 是否开启错误信号补救
+ ///
+ [Column(IsIgnore = true)]
+ public bool D21IsEnableRemedyForErrorCrossSignal { get; set; } = true;
+
+ ///
+ /// 最大追高比例
+ ///
+ [Column(IsIgnore = true)]
+ public decimal D21MaxFollowPurchaseRatio { get; set; } = 0.0M;
+
+ ///
+ /// 信号周期
+ ///
+ [Column(IsIgnore = true)]
+ public Enums.SignalPeriod D21PeriodicSignal { get; set; }
+
+ ///
+ /// 仓位
+ ///
+ [Column(IsIgnore = true)]
+ public decimal D21Position { get; set; } = 0.0M;
+
+ ///
+ /// 止损比例
+ ///
+ [Column(IsIgnore = true)]
+ public decimal D21StopLossRatio { get; set; }
+
+ [Column(IsIgnore = true)]
+ public DateTime D21CreateTime { get; set; }
+ #endregion
+ }
}
diff --git a/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs b/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
index 7d2538d..5b8b0e3 100644
--- a/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
+++ b/Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
@@ -46,6 +46,18 @@ namespace Binance.TradeRobot.Model.Db
///
[Column(DbType = "decimal(18,8)")]
public decimal LoanAmount { get; set; } = 0.0M;
+
+ ///
+ /// 现货持仓均价
+ ///
+ [Column(IsIgnore = true)]
+ public decimal SpotCurrencyAcgPrice
+ {
+ get
+ {
+ return SpotCurrencyQuantity == 0M ? 0M : SoptCurrentcyAmount / SpotCurrencyQuantity;
+ }
+ }
}
}
diff --git a/Binance.TradeRobot.Model/Dto/Request/Robot/AddD21PolicyRobotRequest.cs b/Binance.TradeRobot.Model/Dto/Request/Robot/AddD21PolicyRobotRequest.cs
new file mode 100644
index 0000000..d0f84e5
--- /dev/null
+++ b/Binance.TradeRobot.Model/Dto/Request/Robot/AddD21PolicyRobotRequest.cs
@@ -0,0 +1,41 @@
+using Binance.TradeRobot.Model.Base;
+
+namespace Binance.TradeRobot.Model.Dto
+{
+ public class AddD21PolicyRobotRequest : AddRobotRequest
+ {
+ public Enums.ExecutionMode ExecutionMode { get; set; } = Enums.ExecutionMode.Both;
+
+ ///
+ /// 是否开启增购
+ ///
+
+ public bool IsEnabledIncreasePurchase { get; set; } = true;
+
+ ///
+ /// 是否开启错误信号补救
+ ///
+
+ public bool IsEnableRemedyForErrorCrossSignal { get; set; } = true;
+
+ ///
+ /// 最大追高比例
+ ///
+ public decimal MaxFollowPurchaseRatio { get; set; } = 0.0M;
+
+ ///
+ /// 信号周期
+ ///
+ public Enums.SignalPeriod PeriodicSignal { get; set; }
+
+ ///
+ /// 仓位
+ ///
+ public decimal Position { get; set; } = 0.0M;
+
+ ///
+ /// 止损比例
+ ///
+ public decimal StopLossRatio { get; set; }
+ }
+}
diff --git a/Binance.TradeRobot.Model/Dto/Response/Policy/D21PolicyResponse.cs b/Binance.TradeRobot.Model/Dto/Response/Policy/D21PolicyResponse.cs
new file mode 100644
index 0000000..f7e71b3
--- /dev/null
+++ b/Binance.TradeRobot.Model/Dto/Response/Policy/D21PolicyResponse.cs
@@ -0,0 +1,8 @@
+using Binance.TradeRobot.Model.Db;
+
+namespace Binance.TradeRobot.Model.Dto
+{
+ public class D21PolicyResponse : D21Policy
+ {
+ }
+}
diff --git a/Binance.TradeRobot.Model/Dto/Response/Robot/D21PolicyRobotResponse.cs b/Binance.TradeRobot.Model/Dto/Response/Robot/D21PolicyRobotResponse.cs
new file mode 100644
index 0000000..667a7a6
--- /dev/null
+++ b/Binance.TradeRobot.Model/Dto/Response/Robot/D21PolicyRobotResponse.cs
@@ -0,0 +1,7 @@
+namespace Binance.TradeRobot.Model.Dto
+{
+ public class D21PolicyRobotResponse : RobotResponse
+ {
+ public D21PolicyResponse D21Policy { get; set; }
+ }
+}
diff --git a/Binance.TradeRobot.Model/Dto/Response/Robot/RobotAccountResponse.cs b/Binance.TradeRobot.Model/Dto/Response/Robot/RobotAccountResponse.cs
new file mode 100644
index 0000000..ecb090c
--- /dev/null
+++ b/Binance.TradeRobot.Model/Dto/Response/Robot/RobotAccountResponse.cs
@@ -0,0 +1,8 @@
+using Binance.TradeRobot.Model.Db;
+
+namespace Binance.TradeRobot.Model.Dto
+{
+ public class RobotAccountResponse : RobotAccount
+ {
+ }
+}
diff --git a/Binance.TradeRobot.Model/Dto/Response/Robot/RobotResponse.cs b/Binance.TradeRobot.Model/Dto/Response/Robot/RobotResponse.cs
new file mode 100644
index 0000000..f432d27
--- /dev/null
+++ b/Binance.TradeRobot.Model/Dto/Response/Robot/RobotResponse.cs
@@ -0,0 +1,27 @@
+using Binance.TradeRobot.Model.Base;
+using System;
+
+namespace Binance.TradeRobot.Model.Dto
+{
+ public class RobotResponse
+ {
+ public long Id { get; set; }
+ public DateTime CreateTime { get; set; }
+ public Enums.TradePolicy TradePolicy { get; set; }
+
+ ///
+ /// 运行时长(s)
+ ///
+ public long RunningTime { get; set; } = 0;
+
+ public Enums.RobotState State { get; set; }
+
+ public string Symbol { get; set; }
+
+ public Enums.BusinessType BusinessType { get; set; }
+
+ public Enums.Exchange ExchangeId { get; set; }
+
+ public RobotAccountResponse RobotAccount { get; set; }
+ }
+}