diff --git a/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj b/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj index 00d2ea8..2a3ee39 100644 --- a/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj +++ b/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj @@ -11,6 +11,7 @@ + diff --git a/Binance.TradeRobot.API/Startup.cs b/Binance.TradeRobot.API/Startup.cs index dde2531..46d507d 100644 --- a/Binance.TradeRobot.API/Startup.cs +++ b/Binance.TradeRobot.API/Startup.cs @@ -37,6 +37,9 @@ namespace Binance.TradeRobot.API var fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, Configuration.GetConnectionString("DB")).Build(); services.AddSingleton(typeof(IFreeSql), fsql); + var csredis = new CSRedis.CSRedisClient(Configuration.GetConnectionString("Redis")); + RedisHelper.Initialization(csredis); + var idOption = new IdGeneratorOptions(1); var idGenerator = new DefaultIdGenerator(idOption); services.AddSingleton(typeof(IIdGenerator), idGenerator); diff --git a/Binance.TradeRobot.API/appsettings.json b/Binance.TradeRobot.API/appsettings.json index b320ffb..b1baca5 100644 --- a/Binance.TradeRobot.API/appsettings.json +++ b/Binance.TradeRobot.API/appsettings.json @@ -10,7 +10,8 @@ "ConnectionStrings": { //"DB": "Data Source=192.168.201.44;Initial Catalog=HY.TradingRobot.DB;User ID=sa;Pwd=kaicn1132+-;" //"DB": "Data Source=.;Initial Catalog=Binance.TradeRobot.DB;User ID=sa;Pwd=pc911103;Encrypt=True; TrustServerCertificate=True;" - "DB": "data source=47.245.58.112;port=3306;user id=sa;password=rYn6re2AKhcDWcBi;initial catalog=tradedb;charset=utf8;sslmode=none;" + "DB": "data source=47.245.58.112;port=3306;user id=sa;password=rYn6re2AKhcDWcBi;initial catalog=tradedb;charset=utf8;sslmode=none;", + "Redis": "127.0.0.1:6379,password=kaicn1132+-,defaultDatabase=0,testcluster=false" }, "JwtConfig": { "Secret": "heyitraderobot11", diff --git a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj index da07f3a..81f65bd 100644 --- a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj +++ b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj @@ -1,4 +1,4 @@ - + netstandard2.1 @@ -8,6 +8,7 @@ + diff --git a/Binance.TradeRobot.Business/Business/SingalBusiness.cs b/Binance.TradeRobot.Business/Business/SingalBusiness.cs index eaff5cd..9a8b0fd 100644 --- a/Binance.TradeRobot.Business/Business/SingalBusiness.cs +++ b/Binance.TradeRobot.Business/Business/SingalBusiness.cs @@ -3,7 +3,9 @@ using Binance.TradeRobot.Model.Base; using Binance.TradeRobot.Model.Dto; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; +using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Yitter.IdGenerator; namespace Binance.TradeRobot.Business.Business @@ -12,14 +14,17 @@ namespace Binance.TradeRobot.Business.Business public class SingalBusiness : BaseBusiness { private RobotBusiness robotBusiness; + private IEnumerable tradeBusinessList; public SingalBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache, - RobotBusiness robotBusiness) : base(fsql, logManager, idGenerator, memoryCache) + RobotBusiness robotBusiness, + IEnumerable tradeBusinessList) : base(fsql, logManager, idGenerator, memoryCache) { this.robotBusiness = robotBusiness; + this.tradeBusinessList = tradeBusinessList; } public void D21Singnal(D21SingalRequest d21SingalRequest) @@ -30,11 +35,12 @@ namespace Binance.TradeRobot.Business.Business throw new BusinessException("未找到符合条件的机器人"); var robot = robotList.FirstOrDefault(); + var d21TradeBusiness = tradeBusinessList.FirstOrDefault(t => t.TradePolicy == Enums.TradePolicy.动量趋势v21); switch (d21SingalRequest.SingalType) { case Enums.SingalType.小趋势看空: case Enums.SingalType.小趋势看多: - + Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot)); break; case Enums.SingalType.多交叉: diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs new file mode 100644 index 0000000..9c87080 --- /dev/null +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs @@ -0,0 +1,41 @@ +using Binance.TradeRobot.Common.DI; +using Binance.TradeRobot.Model.Base; +using Binance.TradeRobot.Model.Db; +using Binance.TradeRobot.Model.Dto; +using Binance.TradeRobot.Model.RuningInfo; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using System; +using Yitter.IdGenerator; + +namespace Binance.TradeRobot.Business +{ + [BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Interface)] + public class D21TradeBusiness : BaseBusiness, ITradeBusiness + { + public D21TradeBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache) : base(fsql, logManager, idGenerator, memoryCache) + { + + } + + public Enums.TradePolicy TradePolicy => Enums.TradePolicy.动量趋势v21; + + public void TrendChanged(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse + { + var executionLog = new ExecutionLog() + { + Id = idGenerator.NewLong(), + RobotId = robot.Id, + CreateTime = DateTime.Now, + SourceSingal = singalRequest.SingalType, + Content = $"收到趋势信号【{singalRequest.SingalType}】" + }; + fsql.Insert(executionLog).ExecuteAffrows(); + var d21RuningInfo = RedisHelper.Get(robot.Id.ToString()); + if (d21RuningInfo == null) + d21RuningInfo = new D21RuningInfo() { RobotId = robot.Id }; + d21RuningInfo.RecentSmallTrendSingal = singalRequest.SingalType; + RedisHelper.Set(robot.Id.ToString(), d21RuningInfo); + } + } +} diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs new file mode 100644 index 0000000..9a38acd --- /dev/null +++ b/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs @@ -0,0 +1,12 @@ +using Binance.TradeRobot.Model.Base; +using Binance.TradeRobot.Model.Dto; + +namespace Binance.TradeRobot.Business +{ + public interface ITradeBusiness + { + Enums.TradePolicy TradePolicy { get; } + + void TrendChanged(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse; + } +} diff --git a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml index 1010108..fe5eca9 100644 --- a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml +++ b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml @@ -127,6 +127,11 @@ 关联机器人Id + + + 来源信号 + + 交易所Id @@ -697,5 +702,10 @@ 分红比例 + + + 最近一次小趋势信号 + + diff --git a/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs b/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs index 3734598..509a930 100644 --- a/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs +++ b/Binance.TradeRobot.Model/Db/Order/ExecutionLog.cs @@ -6,23 +6,27 @@ namespace Binance.TradeRobot.Model.Db { [Table(Name = "executionlog", DisableSyncStructure = true)] - public partial class ExecutionLog { + public partial class ExecutionLog + { - [Column(DbType = "bigint", IsPrimary = true)] - public long Id { get; set; } + [Column(DbType = "bigint", IsPrimary = true)] + public long Id { get; set; } - [Column(StringLength = 250, IsNullable = false)] - public string Content { get; set; } + [Column(StringLength = 250, IsNullable = false)] + public string Content { get; set; } - [Column(DbType = "datetime")] - public DateTime CreateTime { get; set; } + [Column(DbType = "datetime")] + public DateTime CreateTime { get; set; } - [Column(DbType = "bigint")] - public long RobotId { get; set; } + [Column(DbType = "bigint")] + public long RobotId { get; set; } - [Column(MapType = typeof(int), DbType = "int")] - public Enums.SingalType SourceSingal { get; set; } + /// + /// Դź + /// + [Column(MapType = typeof(int), DbType = "int")] + public Enums.SingalType SourceSingal { get; set; } - } + } } diff --git a/Binance.TradeRobot.Model/RuningInfo/D21RuningInfo.cs b/Binance.TradeRobot.Model/RuningInfo/D21RuningInfo.cs new file mode 100644 index 0000000..d0a7cb6 --- /dev/null +++ b/Binance.TradeRobot.Model/RuningInfo/D21RuningInfo.cs @@ -0,0 +1,14 @@ +using Binance.TradeRobot.Model.Base; + +namespace Binance.TradeRobot.Model.RuningInfo +{ + public class D21RuningInfo + { + public long RobotId { get; set; } + + /// + /// 最近一次小趋势信号 + /// + public Enums.SingalType RecentSmallTrendSingal { get; set; } + } +}