From 7efe808880d46b6cc8d948a863626f4849e23242 Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Mon, 9 May 2022 07:03:17 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=90=AF=20=E6=9A=82=E5=81=9C?=
=?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Binance.SDK.Test/Binance.SDK.Test.csproj | 12 ----
Binance.SDK.Test/Program.cs | 27 ---------
Binance.SDK/BinanceContractTest.cs | 14 -----
Binance.TradeRobot.API.sln | 16 ++----
.../Binance.TradeRobot.API.csproj | 1 -
Binance.TradeRobot.API/appsettings.json | 4 +-
.../Binance.TradeRobot.Business.csproj | 1 -
.../Business/ExchangeBusiness.cs | 2 +-
.../Business/RobotBusiness.cs | 7 ++-
.../Business/SingalBusiness.cs | 26 +++++----
.../TradeBusiness/D21TradeBusiness.cs | 35 +++++++-----
.../Extensions/RobotExtension.cs | 6 +-
Binance.TradeRobot.Business/GlobalContext.cs | 14 +++++
Binance.TradeRobot.Model/Base/Enums.cs | 6 +-
.../SDKAdapter.csproj | 6 +-
.../Market/SpotMarketWebSocketClient.cs | 57 +++++++++++++++++++
16 files changed, 132 insertions(+), 102 deletions(-)
delete mode 100644 Binance.SDK.Test/Binance.SDK.Test.csproj
delete mode 100644 Binance.SDK.Test/Program.cs
delete mode 100644 Binance.SDK/BinanceContractTest.cs
create mode 100644 Binance.TradeRobot.Business/GlobalContext.cs
rename Binance.SDK/Binance.SDK.csproj => SDKAdapter/SDKAdapter.csproj (60%)
create mode 100644 SDKAdapter/WebSockets/Market/SpotMarketWebSocketClient.cs
diff --git a/Binance.SDK.Test/Binance.SDK.Test.csproj b/Binance.SDK.Test/Binance.SDK.Test.csproj
deleted file mode 100644
index 00f65d9..0000000
--- a/Binance.SDK.Test/Binance.SDK.Test.csproj
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- Exe
- netcoreapp3.1
-
-
-
-
-
-
-
diff --git a/Binance.SDK.Test/Program.cs b/Binance.SDK.Test/Program.cs
deleted file mode 100644
index e7af04f..0000000
--- a/Binance.SDK.Test/Program.cs
+++ /dev/null
@@ -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);
- }
- }
-}
diff --git a/Binance.SDK/BinanceContractTest.cs b/Binance.SDK/BinanceContractTest.cs
deleted file mode 100644
index 41041f9..0000000
--- a/Binance.SDK/BinanceContractTest.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Binance.Net.Clients;
-using Binance.Net.Objects;
-using CryptoExchange.Net.Authentication;
-
-namespace Binance.SDK
-{
- public class BinanceContractTest
- {
- public BinanceContractTest()
- {
-
- }
- }
-}
diff --git a/Binance.TradeRobot.API.sln b/Binance.TradeRobot.API.sln
index f94c304..6994f53 100644
--- a/Binance.TradeRobot.API.sln
+++ b/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
diff --git a/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj b/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj
index 2a3ee39..4bb766b 100644
--- a/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj
+++ b/Binance.TradeRobot.API/Binance.TradeRobot.API.csproj
@@ -25,7 +25,6 @@
-
diff --git a/Binance.TradeRobot.API/appsettings.json b/Binance.TradeRobot.API/appsettings.json
index b1baca5..7f68d13 100644
--- a/Binance.TradeRobot.API/appsettings.json
+++ b/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",
diff --git a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj
index 81f65bd..2050c2c 100644
--- a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj
+++ b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj
@@ -18,7 +18,6 @@
-
diff --git a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
index adce801..f6de8f4 100644
--- a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
+++ b/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
diff --git a/Binance.TradeRobot.Business/Business/RobotBusiness.cs b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
index f7e4357..9602550 100644
--- a/Binance.TradeRobot.Business/Business/RobotBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
@@ -48,11 +48,15 @@ namespace Binance.TradeRobot.Business
public void StartRobot(long robotId)
{
+ fsql.Update(robotId).Set(r => r.State, Enums.RobotState.Runing).ExecuteAffrows();
+ //监听K线和订单
}
public void StopRobot(long robotId)
{
+ fsql.Update(robotId).Set(r => r.State, Enums.RobotState.Stop).ExecuteAffrows();
+ //取消监听K线和订单
}
@@ -113,6 +117,7 @@ namespace Binance.TradeRobot.Business
///
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,
diff --git a/Binance.TradeRobot.Business/Business/SingalBusiness.cs b/Binance.TradeRobot.Business/Business/SingalBusiness.cs
index 9a8b0fd..a0f0631 100644
--- a/Binance.TradeRobot.Business/Business/SingalBusiness.cs
+++ b/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;
+ }
}
}
}
diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs
index 9c87080..a8f361f 100644
--- a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs
+++ b/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 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(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(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)
+ {
+
+ }
}
}
}
diff --git a/Binance.TradeRobot.Business/Extensions/RobotExtension.cs b/Binance.TradeRobot.Business/Extensions/RobotExtension.cs
index f4ff5fe..bf82484 100644
--- a/Binance.TradeRobot.Business/Extensions/RobotExtension.cs
+++ b/Binance.TradeRobot.Business/Extensions/RobotExtension.cs
@@ -7,9 +7,9 @@ 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.动量趋势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}
};
///
diff --git a/Binance.TradeRobot.Business/GlobalContext.cs b/Binance.TradeRobot.Business/GlobalContext.cs
new file mode 100644
index 0000000..5c66ea7
--- /dev/null
+++ b/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()
+ {
+
+ }
+ }
+}
diff --git a/Binance.TradeRobot.Model/Base/Enums.cs b/Binance.TradeRobot.Model/Base/Enums.cs
index 7a75bc4..c947a3e 100644
--- a/Binance.TradeRobot.Model/Base/Enums.cs
+++ b/Binance.TradeRobot.Model/Base/Enums.cs
@@ -69,10 +69,10 @@ namespace Binance.TradeRobot.Model.Base
///
public enum TradePolicy
{
- 动量趋势v2 = 0,
- 动量趋势v21 = 1,
+ D2 = 0,
+ D21 = 1,
- 金字塔 = 11
+ Pyramid = 11
}
///
diff --git a/Binance.SDK/Binance.SDK.csproj b/SDKAdapter/SDKAdapter.csproj
similarity index 60%
rename from Binance.SDK/Binance.SDK.csproj
rename to SDKAdapter/SDKAdapter.csproj
index 175f351..ca327b0 100644
--- a/Binance.SDK/Binance.SDK.csproj
+++ b/SDKAdapter/SDKAdapter.csproj
@@ -6,7 +6,11 @@
-
+
+
+
+
+
diff --git a/SDKAdapter/WebSockets/Market/SpotMarketWebSocketClient.cs b/SDKAdapter/WebSockets/Market/SpotMarketWebSocketClient.cs
new file mode 100644
index 0000000..b33a71b
--- /dev/null
+++ b/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
+ {
+ ///
+ /// 更新间隔(ms)
+ ///
+ protected int updateInterval = 3000;
+
+ ///
+ /// 交易对
+ ///
+ public string Symbol { get; private set; }
+
+ ///
+ /// 最新成交价
+ ///
+ public decimal NewestPrice { get; private set; }
+
+ /// r
+ /// 上一次价格更新时间
+ ///
+ 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;
+ }
+ }
+ }
+}