Browse Source

1.增加缓存类

2.添加交易所账户同时添加一次APIKey
master
shanji 3 years ago
parent
commit
9ef347c5cc
  1. 1
      Binance.TradeRobot.API/Binance.TradeRobot.API.csproj
  2. 1
      Binance.TradeRobot.API/Startup.cs
  3. 33
      Binance.TradeRobot.Business/BaseBusiness.cs
  4. 1
      Binance.TradeRobot.Business/Binance.TradeRobot.Business.csproj
  5. 34
      Binance.TradeRobot.Business/Exchange/ExchangeBusiness.cs
  6. 3
      Binance.TradeRobot.Business/User/UserBusiness.cs
  7. 4
      Binance.TradeRobot.Model/Dto/Request/Exchange/AddExchangeAccountRequest.cs

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

@ -15,6 +15,7 @@
<PackageReference Include="FreeSql.Provider.SqlServer" Version="3.0.100" /> <PackageReference Include="FreeSql.Provider.SqlServer" Version="3.0.100" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.22" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.22" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.22" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.22" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.22" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.22" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.22" />
<PackageReference Include="NLog" Version="4.7.13" /> <PackageReference Include="NLog" Version="4.7.13" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />

1
Binance.TradeRobot.API/Startup.cs

@ -32,6 +32,7 @@ namespace Binance.TradeRobot.API
// This method gets called by the runtime. Use this method to add services to the container. // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
services.AddMemoryCache();
services.AddSingleton<NLogManager>(); services.AddSingleton<NLogManager>();
services.AddSingleton<RestApiService>(); services.AddSingleton<RestApiService>();

33
Binance.TradeRobot.Business/BaseBusiness.cs

@ -1,4 +1,9 @@
using Yitter.IdGenerator; using Binance.Net.Clients;
using Binance.Net.Objects;
using CryptoExchange.Net.Authentication;
using Microsoft.Extensions.Caching.Memory;
using System;
using Yitter.IdGenerator;
namespace Binance.TradeRobot.Business namespace Binance.TradeRobot.Business
{ {
@ -7,11 +12,35 @@ namespace Binance.TradeRobot.Business
protected IFreeSql fsql; protected IFreeSql fsql;
protected NLogManager logManager; protected NLogManager logManager;
protected IIdGenerator idGenerator; protected IIdGenerator idGenerator;
public BaseBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator) protected IMemoryCache memoryCache;
private TimeSpan expirationTimeSpan;
public BaseBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache)
{ {
this.fsql = fsql; this.fsql = fsql;
this.logManager = logManager; this.logManager = logManager;
this.idGenerator = idGenerator; this.idGenerator = idGenerator;
expirationTimeSpan = TimeSpan.FromDays(1);
}
protected BinanceClient GetBinanceClient(string apiKey, string secret)
{
if (!memoryCache.TryGetValue(apiKey, out BinanceClient binanceClient))
{
var apiClientOption = new BinanceApiClientOptions()
{
BaseAddress = "https://fapi.binance.com",
ApiCredentials = new ApiCredentials(apiKey, secret)
};
binanceClient = new BinanceClient(new BinanceClientOptions()
{
UsdFuturesApiOptions = apiClientOption,
SpotApiOptions = apiClientOption
});
memoryCache.Set(apiKey, binanceClient, expirationTimeSpan);
}
return binanceClient;
} }
} }
} }

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

@ -10,6 +10,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="FreeSql" Version="3.0.100" /> <PackageReference Include="FreeSql" Version="3.0.100" />
<PackageReference Include="FreeSql.Provider.SqlServer" Version="3.0.100" /> <PackageReference Include="FreeSql.Provider.SqlServer" Version="3.0.100" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.22" />
<PackageReference Include="NLog" Version="4.7.13" /> <PackageReference Include="NLog" Version="4.7.13" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.12" /> <PackageReference Include="Yitter.IdGenerator" Version="1.0.12" />
</ItemGroup> </ItemGroup>

34
Binance.TradeRobot.Business/Exchange/ExchangeBusiness.cs

@ -3,6 +3,7 @@ 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;
using Binance.TradeRobot.Model.Dto; using Binance.TradeRobot.Model.Dto;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -16,7 +17,7 @@ namespace Binance.TradeRobot.Business.Exchange
[BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)] [BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)]
public class ExchangeBusiness : BaseBusiness public class ExchangeBusiness : BaseBusiness
{ {
public ExchangeBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator) : base(fsql, logManager, idGenerator) { } public ExchangeBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IMemoryCache memoryCache) : base(fsql, logManager, idGenerator, memoryCache) { }
public void AddExchangeAccount(AddExchangeAccountRequest addExchangeAccountRequest) public void AddExchangeAccount(AddExchangeAccountRequest addExchangeAccountRequest)
{ {
@ -32,7 +33,12 @@ namespace Binance.TradeRobot.Business.Exchange
if (addExchangeAccountRequest.TradePolicy == Enums.TradePolicy.v2) if (addExchangeAccountRequest.TradePolicy == Enums.TradePolicy.v2)
exchangeAccount.BusinessType = Enums.BusinessType.Spot_Margin; exchangeAccount.BusinessType = Enums.BusinessType.Spot_Margin;
fsql.Insert(exchangeAccount).ExecuteAffrows(); fsql.Transaction(() =>
{
fsql.Insert(exchangeAccount).ExecuteAffrows();
});
} }
public void AddExchangeAPIKey(AddExchangeAPIKeyRequest addExchangeAPIKeyRequest) public void AddExchangeAPIKey(AddExchangeAPIKeyRequest addExchangeAPIKeyRequest)
@ -71,8 +77,10 @@ namespace Binance.TradeRobot.Business.Exchange
foreach (var exchangeAccount in exchangeAccountList) foreach (var exchangeAccount in exchangeAccountList)
{ {
var currentExchangeAccountAPIKeyList = exchangeAPIKeyList.Where(k => k.AccountId == exchangeAccount.Id); var currentExchangeAccountAPIKeyList = exchangeAPIKeyList.Where(k => k.AccountId == exchangeAccount.Id);
if (currentExchangeAccountAPIKeyList.Count() > 0) if (currentExchangeAccountAPIKeyList.Count() == 0)
exchangeAccount.ExchangeAPIKeyList.AddRange(currentExchangeAccountAPIKeyList); continue;
exchangeAccount.ExchangeAPIKeyList.AddRange(currentExchangeAccountAPIKeyList);
var ewh = new ManualResetEvent(false); var ewh = new ManualResetEvent(false);
waitList.Add(ewh); waitList.Add(ewh);
Task.Factory.StartNew(() => GetExchangeAssets(exchangeAccount, ewh)); Task.Factory.StartNew(() => GetExchangeAssets(exchangeAccount, ewh));
@ -85,7 +93,23 @@ namespace Binance.TradeRobot.Business.Exchange
{ {
try try
{ {
var binanceClient = GetBinanceClient(exchangeAccount.ExchangeAPIKeyList[0].APIKey, exchangeAccount.ExchangeAPIKeyList[0].SecretKey);
if (exchangeAccount.BusinessType == Enums.BusinessType.UPrep)
{
var result = binanceClient.UsdFuturesApi.Account.GetBalancesAsync().Result;
if (result.Success)
{
exchangeAccount.UPrepUSDT = result.Data.FirstOrDefault(b => b.Asset == "USDT")?.WalletBalance ?? 0;
}
}
else if (exchangeAccount.BusinessType == Enums.BusinessType.Spot)
{
}
else if (exchangeAccount.BusinessType == Enums.BusinessType.Spot_Margin)
{
}
} }
catch (Exception ex) catch (Exception ex)
{ {

3
Binance.TradeRobot.Business/User/UserBusiness.cs

@ -4,6 +4,7 @@ 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;
using Binance.TradeRobot.Model.Dto; using Binance.TradeRobot.Model.Dto;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
@ -22,7 +23,7 @@ namespace Binance.TradeRobot.Business
{ {
private IConfiguration configuration; private IConfiguration configuration;
public UserBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IConfiguration configuration) : base(fsql, logManager, idGenerator) public UserBusiness(IFreeSql fsql, NLogManager logManager, IIdGenerator idGenerator, IConfiguration configuration, IMemoryCache memoryCache) : base(fsql, logManager, idGenerator, memoryCache)
{ {
this.configuration = configuration; this.configuration = configuration;
} }

4
Binance.TradeRobot.Model/Dto/Request/Exchange/AddExchangeAccountRequest.cs

@ -12,5 +12,9 @@ namespace Binance.TradeRobot.Model.Dto
/// 交易策略 /// 交易策略
/// </summary> /// </summary>
public Enums.TradePolicy TradePolicy { get; set; } public Enums.TradePolicy TradePolicy { get; set; }
public string APIKey { get; set; }
public string SecretKey { get; set; }
} }
} }

Loading…
Cancel
Save