Browse Source

新增创建金字塔策略机器人接口

master
shanji 3 years ago
parent
commit
77d87d3be3
  1. 3
      .editorconfig
  2. 13
      Binance.TradeRobot.API/Binance.TradeRobot.API.xml
  3. 11
      Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
  4. 29
      Binance.TradeRobot.API/Controllers/RobotController.cs
  5. 2
      Binance.TradeRobot.API/Startup.cs
  6. 36
      Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
  7. 0
      Binance.TradeRobot.Business/Business/BaseBusiness.cs
  8. 32
      Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
  9. 93
      Binance.TradeRobot.Business/Business/RobotBusiness.cs
  10. 0
      Binance.TradeRobot.Business/Business/UserBusiness.cs
  11. 24
      Binance.TradeRobot.Business/Extensions/RobotExtension.cs
  12. 2
      Binance.TradeRobot.Model/Base/MappingProfiles.cs
  13. 4
      Binance.TradeRobot.Model/Binance.TradeRobot.Model.csproj
  14. 70
      Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
  15. 17
      Binance.TradeRobot.Model/Db/Policy/UPrep/PyramidPolicy.cs
  16. 46
      Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs
  17. 27
      Binance.TradeRobot.Model/Dto/Request/Robot/AddPyramidPolicyRobotRequest.cs
  18. 17
      Binance.TradeRobot.Model/Dto/Request/Robot/AddRobotRequest.cs

3
.editorconfig

@ -5,3 +5,6 @@ dotnet_diagnostic.CS8618.severity = none
# CS1591: 缺少对公共可见类型或成员的 XML 注释 # CS1591: 缺少对公共可见类型或成员的 XML 注释
dotnet_diagnostic.CS1591.severity = none dotnet_diagnostic.CS1591.severity = none
# CS8625: 无法将 null 字面量转换为非 null 的引用类型。
dotnet_diagnostic.CS8625.severity = none

13
Binance.TradeRobot.API/Binance.TradeRobot.API.xml

@ -23,6 +23,19 @@
<param name="tradePolicy">交易策略</param> <param name="tradePolicy">交易策略</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Binance.TradeRobot.API.Controllers.ExchangeAccountController.GetNoUsedExchangeAccountList(Binance.TradeRobot.Model.Base.Enums.TradePolicy)">
<summary>
获取APIKey未使用的交易所账户列表
</summary>
<param name="tradePolicy"></param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.API.Controllers.RobotController.AddPyramidPolicyRobot(Binance.TradeRobot.Model.Dto.AddPyramidPolicyRobotRequest)">
<summary>
创建金字塔策略合约机器人
</summary>
<param name="addPyramidPolicyRobotRequest"></param>
</member>
<member name="M:Binance.TradeRobot.API.Controllers.UserController.Login(Binance.TradeRobot.Model.Dto.LoginRequest)"> <member name="M:Binance.TradeRobot.API.Controllers.UserController.Login(Binance.TradeRobot.Model.Dto.LoginRequest)">
<summary> <summary>
用户登录 用户登录

11
Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs

@ -48,5 +48,16 @@ namespace Binance.TradeRobot.API.Controllers
{ {
return exchangeBusiness.GetExchangeAccountList(tradePolicy); return exchangeBusiness.GetExchangeAccountList(tradePolicy);
} }
/// <summary>
/// 获取APIKey未使用的交易所账户列表
/// </summary>
/// <param name="tradePolicy"></param>
/// <returns></returns>
[HttpGet("{tradePolicy}")]
public IList<ExchangeAccountResponse> GetNoUsedExchangeAccountList([FromRoute]Enums.TradePolicy tradePolicy)
{
return exchangeBusiness.GetNoUsedExchangeAccountList(tradePolicy);
}
} }
} }

29
Binance.TradeRobot.API/Controllers/RobotController.cs

@ -0,0 +1,29 @@
using Binance.TradeRobot.Business;
using Binance.TradeRobot.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Binance.TradeRobot.API.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class RobotController : BaseApiController
{
private RobotBusiness robotBusiness;
public RobotController(RobotBusiness robotBusiness)
{
this.robotBusiness = robotBusiness;
}
/// <summary>
/// 创建金字塔策略合约机器人
/// </summary>
/// <param name="addPyramidPolicyRobotRequest"></param>
[HttpPost]
public void AddPyramidPolicyRobot([FromBody] AddPyramidPolicyRobotRequest addPyramidPolicyRobotRequest)
{
robotBusiness.AddPyramidPolicyRobot(addPyramidPolicyRobotRequest);
}
}
}

2
Binance.TradeRobot.API/Startup.cs

@ -4,13 +4,11 @@ using Binance.TradeRobot.Business;
using Binance.TradeRobot.Common.Extensions; using Binance.TradeRobot.Common.Extensions;
using Binance.TradeRobot.Common.Http; using Binance.TradeRobot.Common.Http;
using Binance.TradeRobot.Model.Base; using Binance.TradeRobot.Model.Base;
using HY.TradingRobot.Model.Base;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Serialization; using Newtonsoft.Json.Serialization;

36
Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml

@ -4,12 +4,26 @@
<name>Binance.TradeRobot.Business</name> <name>Binance.TradeRobot.Business</name>
</assembly> </assembly>
<members> <members>
<member name="M:Binance.TradeRobot.Business.Extensions.UserExtension.CalculateRatio(System.Collections.Generic.IList{Binance.TradeRobot.Model.Dto.UserResponse},System.Boolean)"> <member name="M:Binance.TradeRobot.Business.Exchange.ExchangeBusiness.GetNoUsedExchangeAccountList(Binance.TradeRobot.Model.Base.Enums.TradePolicy)">
<summary> <summary>
计算成员分红/本金比例 获取APIKey未使用交易所账户列表
</summary> </summary>
<param name="userList"></param> <param name="tradePolicy"></param>
<param name="multiplyBy100">比例乘100</param> <returns></returns>
</member>
<member name="M:Binance.TradeRobot.Business.RobotBusiness.CheckRobotRegister(Binance.TradeRobot.Model.Dto.AddRobotRequest,Binance.TradeRobot.Model.Db.ExchangeAPIKey@)">
<summary>
检查机器人注册条件
</summary>
<param name="addRobotRequest"></param>
<param name="exchangeAPIKey"></param>
<exception cref="T:Binance.TradeRobot.Model.Base.BusinessException"></exception>
</member>
<member name="M:Binance.TradeRobot.Business.RobotBusiness.AddPyramidPolicyRobot(Binance.TradeRobot.Model.Dto.AddPyramidPolicyRobotRequest)">
<summary>
添加金字塔策略机器人
</summary>
<param name="addPyramidPolicyRobotRequest"></param>
</member> </member>
<member name="M:Binance.TradeRobot.Business.UserBusiness.OneWayAssetChange(System.Int64,System.Decimal,System.Int64,Binance.TradeRobot.Model.Base.Enums.CapitalChangeType,System.String)"> <member name="M:Binance.TradeRobot.Business.UserBusiness.OneWayAssetChange(System.Int64,System.Decimal,System.Int64,Binance.TradeRobot.Model.Base.Enums.CapitalChangeType,System.String)">
<summary> <summary>
@ -22,5 +36,19 @@
<param name="remark"></param> <param name="remark"></param>
<exception cref="T:Binance.TradeRobot.Model.Base.BusinessException"></exception> <exception cref="T:Binance.TradeRobot.Model.Base.BusinessException"></exception>
</member> </member>
<member name="M:Binance.TradeRobot.Business.Extensions.RobotExtension.GetBusinessType(Binance.TradeRobot.Model.Base.Enums.TradePolicy)">
<summary>
获取交易策略对应的业务类型
</summary>
<param name="tradePolicy"></param>
<returns></returns>
</member>
<member name="M:Binance.TradeRobot.Business.Extensions.UserExtension.CalculateRatio(System.Collections.Generic.IList{Binance.TradeRobot.Model.Dto.UserResponse},System.Boolean)">
<summary>
计算成员分红/本金比例
</summary>
<param name="userList"></param>
<param name="multiplyBy100">比例乘100</param>
</member>
</members> </members>
</doc> </doc>

0
Binance.TradeRobot.Business/BaseBusiness.cs → Binance.TradeRobot.Business/Business/BaseBusiness.cs

32
Binance.TradeRobot.Business/Exchange/ExchangeBusiness.cs → Binance.TradeRobot.Business/Business/ExchangeBusiness.cs

@ -1,4 +1,5 @@
using Binance.TradeRobot.Common.DI; using Binance.TradeRobot.Business.Extensions;
using Binance.TradeRobot.Common.DI;
using Binance.TradeRobot.Common.Extensions; using Binance.TradeRobot.Common.Extensions;
using Binance.TradeRobot.Model.Base; using Binance.TradeRobot.Model.Base;
using Binance.TradeRobot.Model.Db; using Binance.TradeRobot.Model.Db;
@ -32,11 +33,7 @@ namespace Binance.TradeRobot.Business.Exchange
throw new BusinessException("重复的APIKey或SecretKey"); throw new BusinessException("重复的APIKey或SecretKey");
var exchangeAccount = addExchangeAccountRequest.Map<ExchangeAccount>(); var exchangeAccount = addExchangeAccountRequest.Map<ExchangeAccount>();
if (addExchangeAccountRequest.TradePolicy == Enums.TradePolicy.) exchangeAccount.BusinessType = addExchangeAccountRequest.TradePolicy.GetBusinessType();
exchangeAccount.BusinessType = Enums.BusinessType.UPrep;
if (addExchangeAccountRequest.TradePolicy == Enums.TradePolicy.v2)
exchangeAccount.BusinessType = Enums.BusinessType.Spot_Margin;
var exchangeAPIKey = new ExchangeAPIKey() var exchangeAPIKey = new ExchangeAPIKey()
{ {
@ -133,5 +130,28 @@ namespace Binance.TradeRobot.Business.Exchange
ewh.Set(); ewh.Set();
} }
} }
/// <summary>
/// 获取APIKey未使用交易所账户列表
/// </summary>
/// <param name="tradePolicy"></param>
/// <returns></returns>
public IList<ExchangeAccountResponse> GetNoUsedExchangeAccountList(Enums.TradePolicy tradePolicy)
{
var exchangeAccountList = fsql.Select<ExchangeAccount>().Where(ea => ea.TradePolicy == tradePolicy).ToList().Map<IList<ExchangeAccountResponse>>();
var accountIdList = exchangeAccountList.Select(ea => ea.Id);
var exchangeAPIKeyList = fsql.Select<ExchangeAPIKey>().Where(k => k.RobotId == null && accountIdList.Contains(k.AccountId))
.ToList()
.Map<IList<ExchangeAPIKeyResponse>>();
foreach (var exchangeAccount in exchangeAccountList)
{
var currentExchangeAccountAPIKeyList = exchangeAPIKeyList.Where(k => k.AccountId == exchangeAccount.Id);
if (currentExchangeAccountAPIKeyList.Count() == 0)
continue;
exchangeAccount.ExchangeAPIKeyList.AddRange(currentExchangeAccountAPIKeyList);
}
return exchangeAccountList;
}
} }
} }

93
Binance.TradeRobot.Business/Business/RobotBusiness.cs

@ -0,0 +1,93 @@
using Binance.TradeRobot.Business.Extensions;
using Binance.TradeRobot.Common.DI;
using Binance.TradeRobot.Common.Extensions;
using Binance.TradeRobot.Model.Base;
using Binance.TradeRobot.Model.Db;
using Binance.TradeRobot.Model.Dto;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using System.Data.Common;
using Yitter.IdGenerator;
namespace Binance.TradeRobot.Business
{
[BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)]
public class RobotBusiness : BaseBusiness
{
public RobotBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache) : base(fsql, logManager, idGenerator, memoryCache)
{
}
/// <summary>
/// 检查机器人注册条件
/// </summary>
/// <param name="addRobotRequest"></param>
/// <param name="exchangeAPIKey"></param>
/// <exception cref="BusinessException"></exception>
private void CheckRobotRegister(AddRobotRequest addRobotRequest, out ExchangeAPIKey exchangeAPIKey)
{
exchangeAPIKey = null;
if (string.IsNullOrEmpty(addRobotRequest.Symbol) || addRobotRequest.ExchangeAPIKeyId == 0)
throw new BusinessException("参数不全");
exchangeAPIKey = fsql.Select<ExchangeAPIKey>(addRobotRequest.ExchangeAPIKeyId).ToOne();
if (exchangeAPIKey == null)
throw new BusinessException("选择的APIKey不存在");
if (exchangeAPIKey.RobotId != null)
throw new BusinessException("APIKey已被其他机器人使用");
var accountId = exchangeAPIKey.AccountId;
if (fsql.Select<ExchangeAccount, ExchangeAPIKey, Robot>().InnerJoin((ea, ek, r) => ea.Id == ek.AccountId)
.LeftJoin((ea, ek, r) => ek.RobotId == r.Id)
.Where((ea, ek, r) => ea.Id == accountId &&
r.Symbol == addRobotRequest.Symbol).Any())
throw new BusinessException("同一个交易所账号下只允许存在一个交易对");
}
private Robot CreateRobot(AddRobotRequest addRobotRequest)
{
return new Robot()
{
Id = idGenerator.NewLong(),
Symbol = addRobotRequest.Symbol,
TradePolicy = addRobotRequest.TradePolicy,
BusinessType = addRobotRequest.TradePolicy.GetBusinessType()
};
}
private RobotAccount CreateRobotAccount(long robotId)
{
return new RobotAccount() { Id = idGenerator.NewLong(), RobotId = robotId };
}
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<ExchangeAPIKey>(exchangeAPIKeyId).WithTransaction(tran).Set(ek => ek.RobotId, robot.Id).ExecuteAffrows();
}
/// <summary>
/// 添加金字塔策略机器人
/// </summary>
/// <param name="addPyramidPolicyRobotRequest"></param>
public void AddPyramidPolicyRobot(AddPyramidPolicyRobotRequest addPyramidPolicyRobotRequest)
{
CheckRobotRegister(addPyramidPolicyRobotRequest, out ExchangeAPIKey exchangeAPIKey);
var robot = CreateRobot(addPyramidPolicyRobotRequest);
var robotAccount = CreateRobotAccount(robot.Id);
var pyramidPolicy = addPyramidPolicyRobotRequest.Map<PyramidPolicy>();
pyramidPolicy.Id = idGenerator.NewLong();
pyramidPolicy.RobotId = robot.Id;
fsql.Transaction(() =>
{
var tran = fsql.Ado.TransactionCurrentThread;
ExecuteAddRobotWithTran(robot, robotAccount, addPyramidPolicyRobotRequest.ExchangeAPIKeyId, tran);
fsql.Insert(pyramidPolicy).ExecuteAffrows();
});
//调整仓位杠杆倍数
}
}
}

0
Binance.TradeRobot.Business/User/UserBusiness.cs → Binance.TradeRobot.Business/Business/UserBusiness.cs

24
Binance.TradeRobot.Business/Extensions/RobotExtension.cs

@ -0,0 +1,24 @@
using Binance.TradeRobot.Model.Base;
using System.Collections.Generic;
namespace Binance.TradeRobot.Business.Extensions
{
public static class RobotExtension
{
private static IDictionary<Enums.TradePolicy, Enums.BusinessType> BusinessTypeDic = new Dictionary<Enums.TradePolicy, Enums.BusinessType>()
{
{Enums.TradePolicy., Enums.BusinessType.UPrep },
{ Enums.TradePolicy.v2, Enums.BusinessType.Spot_Margin}
};
/// <summary>
/// 获取交易策略对应的业务类型
/// </summary>
/// <param name="tradePolicy"></param>
/// <returns></returns>
public static Enums.BusinessType GetBusinessType(this Enums.TradePolicy tradePolicy)
{
return BusinessTypeDic[tradePolicy];
}
}
}

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

@ -15,6 +15,8 @@ namespace Binance.TradeRobot.Model.Base
CreateMap<AddExchangeAPIKeyRequest, ExchangeAPIKey>(); CreateMap<AddExchangeAPIKeyRequest, ExchangeAPIKey>();
CreateMap<ExchangeAPIKey, ExchangeAPIKeyResponse>(); CreateMap<ExchangeAPIKey, ExchangeAPIKeyResponse>();
CreateMap<ExchangeAccount, ExchangeAccountResponse>(); CreateMap<ExchangeAccount, ExchangeAccountResponse>();
CreateMap<AddPyramidPolicyRobotRequest, PyramidPolicy>();
} }
} }
} }

4
Binance.TradeRobot.Model/Binance.TradeRobot.Model.csproj

@ -12,8 +12,4 @@
<PackageReference Include="FreeSql" Version="3.0.100" /> <PackageReference Include="FreeSql" Version="3.0.100" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Dto\Request\Robot\" />
</ItemGroup>
</Project> </Project>

70
Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml

@ -94,11 +94,51 @@
交易所账号Id 交易所账号Id
</summary> </summary>
</member> </member>
<member name="P:Binance.TradeRobot.Model.Db.PyramidPolicy.Leverage">
<summary>
杠杆倍数(1-125整数)
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.PyramidPolicy.Position">
<summary>
仓位
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.PyramidPolicy.Pyramid">
<summary>
金字塔
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.Robot.RunningTime"> <member name="P:Binance.TradeRobot.Model.Db.Robot.RunningTime">
<summary> <summary>
运行时长(s) 运行时长(s)
</summary> </summary>
</member> </member>
<member name="P:Binance.TradeRobot.Model.Db.RobotAccount.ClosePositionCount">
<summary>
平仓次数
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.RobotAccount.SoptCurrentcyAmount">
<summary>
现货/杠杆持仓金额
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.RobotAccount.SpotCurrencyQuantity">
<summary>
现货/杠杆持仓数量
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.RobotAccount.TotalProfit">
<summary>
总收益
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.RobotAccount.WinCount">
<summary>
盈利次数
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Db.User.CostAmount"> <member name="P:Binance.TradeRobot.Model.Db.User.CostAmount">
<summary> <summary>
投资本金 投资本金
@ -164,6 +204,36 @@
交易策略 交易策略
</summary> </summary>
</member> </member>
<member name="P:Binance.TradeRobot.Model.Dto.AddPyramidPolicyRobotRequest.SignalPeriod">
<summary>
信号周期
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.AddPyramidPolicyRobotRequest.Leverage">
<summary>
杠杆倍数
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.AddPyramidPolicyRobotRequest.Position">
<summary>
仓位
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.AddPyramidPolicyRobotRequest.Pyramid">
<summary>
金字塔
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.AddRobotRequest.Symbol">
<summary>
交易对
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.AddRobotRequest.ExchangeAPIKeyId">
<summary>
交易所APIKeyId
</summary>
</member>
<member name="P:Binance.TradeRobot.Model.Dto.LoginRequest.Pwd"> <member name="P:Binance.TradeRobot.Model.Dto.LoginRequest.Pwd">
<summary> <summary>
密码需要Md5小写加密 密码需要Md5小写加密

17
Binance.TradeRobot.Model/Db/Policy/UPrep/PyramidPolicy.cs

@ -6,7 +6,6 @@ namespace Binance.TradeRobot.Model.Db
[Table(DisableSyncStructure = true)] [Table(DisableSyncStructure = true)]
public partial class PyramidPolicy public partial class PyramidPolicy
{ {
[Column(IsPrimary = true)] [Column(IsPrimary = true)]
public long Id { get; set; } public long Id { get; set; }
@ -14,6 +13,22 @@ namespace Binance.TradeRobot.Model.Db
public Enums.SignalPeriod SignalPeriod { get; set; } public Enums.SignalPeriod SignalPeriod { get; set; }
public long RobotId { get; set; } public long RobotId { get; set; }
/// <summary>
/// 杠杆倍数(1-125整数)
/// </summary>
public int Leverage { get; set; } = 1;
/// <summary>
/// 仓位
/// </summary>
[Column(DbType = "decimal(18,8)")]
public decimal Position { get; set; } = 0M;
/// <summary>
/// 金字塔
/// </summary>
public int Pyramid { get; set; } = 0;
} }
} }

46
Binance.TradeRobot.Model/Db/Robot/RobotAccount.cs

@ -0,0 +1,46 @@
using FreeSql.DataAnnotations;
namespace Binance.TradeRobot.Model.Db
{
[Table(DisableSyncStructure = true)]
public partial class RobotAccount
{
[Column(IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 平仓次数
/// </summary>
public long ClosePositionCount { get; set; } = 0;
public long RobotId { get; set; }
/// <summary>
/// 现货/杠杆持仓金额
/// </summary>
[Column(DbType = "decimal(18,8)")]
public decimal SoptCurrentcyAmount { get; set; } = 0.0M;
/// <summary>
/// 现货/杠杆持仓数量
/// </summary>
[Column(DbType = "decimal(18,8)")]
public decimal SpotCurrencyQuantity { get; set; } = 0.0M;
/// <summary>
/// 总收益
/// </summary>
[Column(DbType = "decimal(18,8)")]
public decimal TotalProfit { get; set; } = 0.0M;
/// <summary>
/// 盈利次数
/// </summary>
public long WinCount { get; set; } = 0;
}
}

27
Binance.TradeRobot.Model/Dto/Request/Robot/AddPyramidPolicyRobotRequest.cs

@ -0,0 +1,27 @@
using Binance.TradeRobot.Model.Base;
namespace Binance.TradeRobot.Model.Dto
{
public class AddPyramidPolicyRobotRequest : AddRobotRequest
{
/// <summary>
/// 信号周期
/// </summary>
public Enums.SignalPeriod SignalPeriod { get; set; }
/// <summary>
/// 杠杆倍数
/// </summary>
public int Leverage { get; set; }
/// <summary>
/// 仓位
/// </summary>
public decimal Position { get; set; }
/// <summary>
/// 金字塔
/// </summary>
public int Pyramid { get; set; }
}
}

17
Binance.TradeRobot.Model/Dto/Request/Robot/AddRobotRequest.cs

@ -0,0 +1,17 @@
using Binance.TradeRobot.Model.Base;
namespace Binance.TradeRobot.Model.Dto
{
public class AddRobotRequest
{
/// <summary>
/// 交易对
/// </summary>
public string Symbol { get; set; }
public Enums.TradePolicy TradePolicy { get; set; }
/// <summary>
/// 交易所APIKeyId
/// </summary>
public long ExchangeAPIKeyId { get; set; }
}
}
Loading…
Cancel
Save