Browse Source

开启 暂停机器人

master
shanji 3 years ago
parent
commit
7efe808880
  1. 12
      Binance.SDK.Test/Binance.SDK.Test.csproj
  2. 27
      Binance.SDK.Test/Program.cs
  3. 14
      Binance.SDK/BinanceContractTest.cs
  4. 16
      Binance.TradeRobot.API.sln
  5. 1
      Binance.TradeRobot.API/Binance.TradeRobot.API.csproj
  6. 4
      Binance.TradeRobot.API/appsettings.json
  7. 1
      Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj
  8. 2
      Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
  9. 7
      Binance.TradeRobot.Business/Business/RobotBusiness.cs
  10. 26
      Binance.TradeRobot.Business/Business/SingalBusiness.cs
  11. 35
      Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs
  12. 6
      Binance.TradeRobot.Business/Extensions/RobotExtension.cs
  13. 14
      Binance.TradeRobot.Business/GlobalContext.cs
  14. 6
      Binance.TradeRobot.Model/Base/Enums.cs
  15. 6
      SDKAdapter/SDKAdapter.csproj
  16. 57
      SDKAdapter/WebSockets/Market/SpotMarketWebSocketClient.cs

12
Binance.SDK.Test/Binance.SDK.Test.csproj

@ -1,12 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Binance.Net" Version="8.0.1" />
</ItemGroup>
</Project>

27
Binance.SDK.Test/Program.cs

@ -1,27 +0,0 @@
using Binance.Net.Clients;
using Binance.Net.Objects;
using CryptoExchange.Net.Authentication;
using System;
namespace Binance.SDK.Test
{
internal class Program
{
static void Main(string[] args)
{
var apiKey = "muiZ1IA2sPMQ2m0YFPubEvZepjzn2nxeuPHqQ6mejKVXljYDQTOIYbm22NlXxKcv";
var apiSecret = "3Clur3D1hDeZYhtVSJzPBiEBb7S0ktC8WpaRQ3F7ysQe55kbsPTBZ6U4X9XsX4Ww";
var client = new BinanceClient(new BinanceClientOptions()
{
UsdFuturesApiOptions = new BinanceApiClientOptions()
{
BaseAddress = "https://fapi.binance.com",
ApiCredentials = new ApiCredentials(apiKey, apiSecret)
}
});
var result = client.UsdFuturesApi.Account.GetBalancesAsync().Result;
Console.WriteLine(result);
}
}
}

14
Binance.SDK/BinanceContractTest.cs

@ -1,14 +0,0 @@
using Binance.Net.Clients;
using Binance.Net.Objects;
using CryptoExchange.Net.Authentication;
namespace Binance.SDK
{
public class BinanceContractTest
{
public BinanceContractTest()
{
}
}
}

16
Binance.TradeRobot.API.sln

@ -16,9 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Binance.SDK", "Binance.SDK\Binance.SDK.csproj", "{8B84B654-82D9-42C0-AF0C-5C78CE916253}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Binance.SDK.Test", "Binance.SDK.Test\Binance.SDK.Test.csproj", "{52E20E47-2605-48A8-B09C-1C61194502F9}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDKAdapter", "SDKAdapter\SDKAdapter.csproj", "{E461043B-179D-4625-BF2F-C00EAB1C8213}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -42,14 +40,10 @@ Global
{C840DCF2-0E1E-4F9F-9EAA-5A4F80B51BD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C840DCF2-0E1E-4F9F-9EAA-5A4F80B51BD2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C840DCF2-0E1E-4F9F-9EAA-5A4F80B51BD2}.Release|Any CPU.Build.0 = Release|Any CPU
{8B84B654-82D9-42C0-AF0C-5C78CE916253}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B84B654-82D9-42C0-AF0C-5C78CE916253}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B84B654-82D9-42C0-AF0C-5C78CE916253}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B84B654-82D9-42C0-AF0C-5C78CE916253}.Release|Any CPU.Build.0 = Release|Any CPU
{52E20E47-2605-48A8-B09C-1C61194502F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52E20E47-2605-48A8-B09C-1C61194502F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52E20E47-2605-48A8-B09C-1C61194502F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52E20E47-2605-48A8-B09C-1C61194502F9}.Release|Any CPU.Build.0 = Release|Any CPU
{E461043B-179D-4625-BF2F-C00EAB1C8213}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E461043B-179D-4625-BF2F-C00EAB1C8213}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E461043B-179D-4625-BF2F-C00EAB1C8213}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E461043B-179D-4625-BF2F-C00EAB1C8213}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

1
Binance.TradeRobot.API/Binance.TradeRobot.API.csproj

@ -25,7 +25,6 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Binance.SDK\Binance.SDK.csproj" />
<ProjectReference Include="..\Binance.TradeRobot.Business\Binance.TradeRobot.Business.csproj" />
<ProjectReference Include="..\Binance.TradeRobot.Common\Binance.TradeRobot.Common.csproj" />
<ProjectReference Include="..\Binance.TradeRobot.Model\Binance.TradeRobot.Model.csproj" />

4
Binance.TradeRobot.API/appsettings.json

@ -10,8 +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;",
"Redis": "127.0.0.1:6379,password=kaicn1132+-,defaultDatabase=0,testcluster=false"
"DB": "data source=8.209.252.195;port=3306;user id=sa;password=rYn6re2AKhcDWcBi;initial catalog=tradedb;charset=utf8;sslmode=none;",
"Redis": "8.209.252.195:6379,password=kaicn1132+-,defaultDatabase=0,testcluster=false"
},
"JwtConfig": {
"Secret": "heyitraderobot11",

1
Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj

@ -18,7 +18,6 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Binance.SDK\Binance.SDK.csproj" />
<ProjectReference Include="..\Binance.TradeRobot.Common\Binance.TradeRobot.Common.csproj" />
<ProjectReference Include="..\Binance.TradeRobot.Model\Binance.TradeRobot.Model.csproj" />
</ItemGroup>

2
Binance.TradeRobot.Business/Business/ExchangeBusiness.cs

@ -76,7 +76,7 @@ namespace Binance.TradeRobot.Business.Exchange
Id = k.Id,
AccountId = k.AccountId,
APIKey = k.APIKey,
SecretKey = k.SecretKey,
SecretKey = "********",
CreateTime = k.CreateTime,
RobotId = k.RobotId,
RobotSymbol = r.Symbol

7
Binance.TradeRobot.Business/Business/RobotBusiness.cs

@ -48,11 +48,15 @@ namespace Binance.TradeRobot.Business
public void StartRobot(long robotId)
{
fsql.Update<Robot>(robotId).Set(r => r.State, Enums.RobotState.Runing).ExecuteAffrows();
//监听K线和订单
}
public void StopRobot(long robotId)
{
fsql.Update<Robot>(robotId).Set(r => r.State, Enums.RobotState.Stop).ExecuteAffrows();
//取消监听K线和订单
}
@ -113,6 +117,7 @@ namespace Binance.TradeRobot.Business
/// <param name="addRobotRequest"></param>
public void AddD21PolicyRobot(AddRobotRequest addRobotRequest)
{
addRobotRequest.TradePolicy = Enums.TradePolicy.D21;
CheckRobotRegister(addRobotRequest, out _);
var d21Policy = new D21Policy()
{
@ -151,7 +156,7 @@ namespace Binance.TradeRobot.Business
.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.v21)
.Where((r, ra, d, e) => r.TradePolicy == Enums.TradePolicy.D21)
.ToList((r, ra, d, e) => new Robot()
{
Id = r.Id,

26
Binance.TradeRobot.Business/Business/SingalBusiness.cs

@ -34,20 +34,24 @@ namespace Binance.TradeRobot.Business.Business
if (robotList == null || robotList.Count() == 0)
throw new BusinessException("未找到符合条件的机器人");
var robot = robotList.FirstOrDefault();
var d21TradeBusiness = tradeBusinessList.FirstOrDefault(t => t.TradePolicy == Enums.TradePolicy.v21);
switch (d21SingalRequest.SingalType)
//var robot = robotList.FirstOrDefault();
var d21TradeBusiness = tradeBusinessList.FirstOrDefault(t => t.TradePolicy == Enums.TradePolicy.D21);
foreach (var robot in robotList)
{
case Enums.SingalType.:
case Enums.SingalType.:
Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot));
break;
case Enums.SingalType.:
switch (d21SingalRequest.SingalType)
{
case Enums.SingalType.:
case Enums.SingalType.:
Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot));
break;
case Enums.SingalType.:
break;
case Enums.SingalType.:
break;
case Enums.SingalType.:
break;
break;
}
}
}
}

35
Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs

@ -18,24 +18,31 @@ namespace Binance.TradeRobot.Business
}
public Enums.TradePolicy TradePolicy => Enums.TradePolicy.v21;
public Enums.TradePolicy TradePolicy => Enums.TradePolicy.D21;
public void TrendChanged<T, T1>(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse
{
var executionLog = new ExecutionLog()
try
{
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);
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)
{
}
}
}
}

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

@ -7,9 +7,9 @@ namespace Binance.TradeRobot.Business.Extensions
{
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},
{ Enums.TradePolicy.v21, Enums.BusinessType.Spot_Margin}
{Enums.TradePolicy.Pyramid, Enums.BusinessType.UPrep },
{ Enums.TradePolicy.D2, Enums.BusinessType.Spot_Margin},
{ Enums.TradePolicy.D21, Enums.BusinessType.Spot_Margin}
};
/// <summary>

14
Binance.TradeRobot.Business/GlobalContext.cs

@ -0,0 +1,14 @@
using Binance.TradeRobot.Common.DI;
using Microsoft.Extensions.DependencyInjection;
namespace Binance.TradeRobot.Business
{
[BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)]
public class GlobalContext
{
public GlobalContext()
{
}
}
}

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

@ -69,10 +69,10 @@ namespace Binance.TradeRobot.Model.Base
/// </summary>
public enum TradePolicy
{
v2 = 0,
v21 = 1,
D2 = 0,
D21 = 1,
= 11
Pyramid = 11
}
/// <summary>

6
Binance.SDK/Binance.SDK.csproj → SDKAdapter/SDKAdapter.csproj

@ -6,7 +6,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Binance.Net" Version="8.0.1" />
<Folder Include="WebSockets\Order\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="4.7.13" />
</ItemGroup>
</Project>

57
SDKAdapter/WebSockets/Market/SpotMarketWebSocketClient.cs

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SDKAdapter.WebSockets.Market
{
public class SpotMarketWebSocketClient
{
/// <summary>
/// 更新间隔(ms)
/// </summary>
protected int updateInterval = 3000;
/// <summary>
/// 交易对
/// </summary>
public string Symbol { get; private set; }
/// <summary>
/// 最新成交价
/// </summary>
public decimal NewestPrice { get; private set; }
/// <summary>r
/// 上一次价格更新时间
/// </summary>
public DateTime? LastUpdateTime { get; private set; }
public NLog.ILogger logger { get; private set; }
public SpotMarketWebSocketClient(string symbol, NLog.ILogger logger)
{
this.Symbol = symbol;
this.logger = logger;
}
public virtual void Start()
{
}
public virtual void Stop()
{
}
protected virtual void OnReceived(decimal newestPrice)
{
NewestPrice = newestPrice;
if (LastUpdateTime == null || (DateTime.Now - LastUpdateTime.Value).TotalMilliseconds >= updateInterval)
{
logger.Info($"NewestPrice:{newestPrice}");
LastUpdateTime = DateTime.Now;
}
}
}
}
Loading…
Cancel
Save