|
|
|
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 Newtonsoft.Json;
|
|
|
|
using System;
|
|
|
|
using System.Text;
|
|
|
|
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.D21;
|
|
|
|
|
|
|
|
public void TrendChanged<T, T1>(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
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<D21RuningInfo>(robot.Id.ToString());
|
|
|
|
if (d21RuningInfo == null)
|
|
|
|
d21RuningInfo = new D21RuningInfo() { RobotId = robot.Id };
|
|
|
|
d21RuningInfo.RecentSmallTrendSingal = singalRequest.SingalType;
|
|
|
|
RedisHelper.Set(robot.Id.ToString(), d21RuningInfo);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
var stringBuilder = new StringBuilder("TrendChanged");
|
|
|
|
stringBuilder.AppendLine($"SingalRequest {JsonConvert.SerializeObject(singalRequest)}");
|
|
|
|
stringBuilder.AppendLine($"Robot {JsonConvert.SerializeObject(robot)}");
|
|
|
|
logManager.GetLogger(robot.ExecuteLogKey).Error(ex, stringBuilder.ToString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void LongCross<T, T1>(T singalRequest, T1 robot, decimal newestPrice, bool isRemedy)
|
|
|
|
where T : BaseSingalRequest
|
|
|
|
where T1 : RobotResponse
|
|
|
|
{
|
|
|
|
throw new NotImplementedException();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void ShortCross<T, T1>(T singalRequest, T1 robot, decimal newestPrice, bool isRemedy)
|
|
|
|
where T : BaseSingalRequest
|
|
|
|
where T1 : RobotResponse
|
|
|
|
{
|
|
|
|
throw new NotImplementedException();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|