From ca99fa1297d9601932d0d97ac72594eeba7af63b Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Sun, 15 May 2022 05:45:49 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/ExchangeAccountController.cs | 4 +-
.../Controllers/SingalController.cs | 2 +-
.../Binance.TradeRobot.Business.xml | 13 ++-
.../Business/ExchangeBusiness.cs | 8 +-
.../Business/RobotBusiness.cs | 94 +++++++++----------
.../Business/SingalBusiness.cs | 12 ++-
.../TradeBusiness/D21TradeBusiness.cs | 6 +-
.../Business/TradeBusiness/ITradeBusiness.cs | 11 ++-
.../Base/MappingProfiles.cs | 10 +-
.../Binance.TradeRobot.Model.xml | 5 -
.../Db/Exchange/SymbolInfo.cs | 2 +-
Binance.TradeRobot.Model/Db/Robot/Robot.cs | 20 ++--
SDKAdapter/APIClient/BaseAPIClient.cs | 25 +++++
SDKAdapter/APIClient/BinanceAPIClient.cs | 32 +++++++
SDKTestConsole/Program.cs | 43 ++++++---
15 files changed, 186 insertions(+), 101 deletions(-)
diff --git a/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs b/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
index 8caef1a..ca10274 100644
--- a/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
+++ b/Binance.TradeRobot.API/Controllers/ExchangeAccountController.cs
@@ -1,4 +1,4 @@
-using Binance.TradeRobot.Business.Exchange;
+using Binance.TradeRobot.Business;
using Binance.TradeRobot.Model.Base;
using Binance.TradeRobot.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
@@ -44,7 +44,7 @@ namespace Binance.TradeRobot.API.Controllers
///
///
[HttpGet("{exchange}")]
- public IList GetSymbolList(Enums.Exchange exchange)
+ public IList GetSymbolList([FromRoute] Enums.Exchange exchange)
{
return exchangeBusiness.GetSymbolList(exchange);
}
diff --git a/Binance.TradeRobot.API/Controllers/SingalController.cs b/Binance.TradeRobot.API/Controllers/SingalController.cs
index 36b46a5..28b6386 100644
--- a/Binance.TradeRobot.API/Controllers/SingalController.cs
+++ b/Binance.TradeRobot.API/Controllers/SingalController.cs
@@ -1,4 +1,4 @@
-using Binance.TradeRobot.Business.Business;
+using Binance.TradeRobot.Business;
using Binance.TradeRobot.Model.Dto;
using Microsoft.AspNetCore.Mvc;
diff --git a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
index f9c37ab..e1c6af7 100644
--- a/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
+++ b/Binance.TradeRobot.Business/Binance.TradeRobot.Business.xml
@@ -4,7 +4,7 @@
Binance.TradeRobot.Business
-
+
获取APIKey未使用交易所账户列表
@@ -66,7 +66,7 @@
现货策略
-
+
趋势变化
@@ -74,8 +74,9 @@
+
-
+
多交叉
@@ -84,8 +85,9 @@
是否为补救信号
+
-
+
空交叉
@@ -93,7 +95,8 @@
- 是否为补救信号
+ 是否为补救信号'
+
diff --git a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
index 7360e7c..1d91ee3 100644
--- a/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/ExchangeBusiness.cs
@@ -16,7 +16,7 @@ using System.Threading;
using System.Threading.Tasks;
using Yitter.IdGenerator;
-namespace Binance.TradeRobot.Business.Exchange
+namespace Binance.TradeRobot.Business
{
[BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)]
public class ExchangeBusiness : BaseBusiness
@@ -74,6 +74,12 @@ namespace Binance.TradeRobot.Business.Exchange
return fsql.Select().Where(s => s.ExchangeId == exchange).ToList();
}
+ public SymbolInfoResponse GetSymbol(Enums.Exchange exchange, string symbol)
+ {
+ return fsql.Select().Where(s => s.ExchangeId == exchange && s.Symbol == symbol).ToOne();
+ }
+
+
public void AddExchangeAccount(AddExchangeAccountRequest addExchangeAccountRequest)
{
if (addExchangeAccountRequest.Id == 0 ||
diff --git a/Binance.TradeRobot.Business/Business/RobotBusiness.cs b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
index 20ac87d..d76282c 100644
--- a/Binance.TradeRobot.Business/Business/RobotBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/RobotBusiness.cs
@@ -199,56 +199,57 @@ namespace Binance.TradeRobot.Business
bool isLoadRecentTradeProfit = true,
bool isLoadAPIKey = false)
{
- var robotList = fsql.Select().InnerJoin((r, s, ra, d, e) => r.Id == ra.RobotId)
- .InnerJoin((r, s, ra, d, e) => r.Symbol == s.Symbol && r.ExchangeId == s.ExchangeId)
- .InnerJoin((r, s, ra, d, e) => r.Id == d.RobotId)
- .InnerJoin((r, s, ra, d, e) => r.Id == e.RobotId)
- .WhereIf(robotState != null, (r, s, ra, d, e) => r.State == robotState)
- .WhereIf(signalPeriod != null, (r, s, ra, d, e) => d.PeriodicSignal == signalPeriod)
- .WhereIf(!string.IsNullOrEmpty(symbol), (r, s, ra, d, e) => r.Symbol == symbol)
- .Where((r, s, ra, d, e) => r.TradePolicy == Enums.TradePolicy.D21)
- .ToList((r, s, ra, d, e) => new Robot()
- {
- Id = r.Id,
- BusinessType = r.BusinessType,
- ExchangeId = r.ExchangeId,
- Symbol = r.Symbol,
- State = r.State,
- RunningTime = r.RunningTime,
- CreateTime = r.CreateTime,
- TradePolicy = r.TradePolicy,
+ var robotList = fsql.Select().InnerJoin((r, ra, d, e) => r.Id == ra.RobotId)
+ .InnerJoin((r, ra, d, e) => r.Id == d.RobotId)
+ .InnerJoin((r, ra, d, e) => r.Id == e.RobotId)
+ .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.D21)
+ .ToList((r, ra, d, e) => new Robot
+ {
+ Id = r.Id,
+ BusinessType = r.BusinessType,
+ ExchangeId = r.ExchangeId,
+ Symbol = r.Symbol,
+ State = r.State,
+ RunningTime = r.RunningTime,
+ CreateTime = r.CreateTime,
+ TradePolicy = r.TradePolicy,
- SymbolId = s.Id,
- SymbolSaleQuantityAccuracy = s.SaleQuantityAccuracy,
+ //SymbolId = s.Id,
+ //SymbolSaleQuantityAccuracy = s.SaleQuantityAccuracy,
- RobotAccountId = ra.Id,
- ClosePositionCount = ra.ClosePositionCount,
- WinCount = ra.WinCount,
- LoanAmount = ra.LoanAmount,
- SoptCurrentcyAmount = ra.SoptCurrentcyAmount,
- SpotCurrencyQuantity = ra.SpotCurrencyQuantity,
- TotalProfit = ra.TotalProfit,
+ RobotAccountId = ra.Id,
+ ClosePositionCount = ra.ClosePositionCount,
+ WinCount = ra.WinCount,
+ LoanAmount = ra.LoanAmount,
+ SoptCurrentcyAmount = ra.SoptCurrentcyAmount,
+ SpotCurrencyQuantity = ra.SpotCurrencyQuantity,
+ TotalProfit = ra.TotalProfit,
+
+ ExchangeAccountId = e.AccountId,
+ ExchangeAPIKey = e.APIKey,
+ ExchangeSecretKey = e.SecretKey,
+
+ D21ExecutionMode = d.ExecutionMode,
+ D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase,
+ D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal,
+ D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio,
+ D21PeriodicSignal = d.PeriodicSignal,
+ D21PolicyId = d.Id,
+ D21Position = d.Position,
+ D21Assets = d.Assets,
+ D21Level1PositionStopLossRatio = d.Level1PositionStopLossRatio,
+ D21Level1PriceStopLossRatio = d.Level1PriceStopLossRatio,
+ D21Level2PositionStopLossRatio = d.Level2PositionStopLossRatio,
+ D21Level2PriceStopLossRatio = d.Level2PriceStopLossRatio,
+ D21MaxExchangeLoanRatio = d.MaxExchangeLoanRatio,
+ D21MaxSystemLoanRatio = d.MaxSystemLoanRatio,
+ D21CreateTime = d.CreateTime
+ }).Map>();
- ExchangeAccountId = e.AccountId,
- ExchangeAPIKey = e.APIKey,
- ExchangeSecretKey = e.SecretKey,
- D21ExecutionMode = d.ExecutionMode,
- D21IsEnabledIncreasePurchase = d.IsEnabledIncreasePurchase,
- D21IsEnableRemedyForErrorCrossSignal = d.IsEnableRemedyForErrorCrossSignal,
- D21MaxFollowPurchaseRatio = d.MaxFollowPurchaseRatio,
- D21PeriodicSignal = d.PeriodicSignal,
- D21PolicyId = d.Id,
- D21Position = d.Position,
- D21Assets = d.Assets,
- D21Level1PositionStopLossRatio = d.Level1PositionStopLossRatio,
- D21Level1PriceStopLossRatio = d.Level1PriceStopLossRatio,
- D21Level2PositionStopLossRatio = d.Level2PositionStopLossRatio,
- D21Level2PriceStopLossRatio = d.Level2PriceStopLossRatio,
- D21MaxExchangeLoanRatio = d.MaxExchangeLoanRatio,
- D21MaxSystemLoanRatio = d.MaxSystemLoanRatio,
- D21CreateTime = d.CreateTime
- }).Map>();
if (isLoadRecentTradeProfit)
{
//统计近期订单利润
@@ -259,7 +260,6 @@ namespace Binance.TradeRobot.Business
foreach (var r in robotList)
r.ExchangeAPIKey = null;
}
-
return robotList;
}
}
diff --git a/Binance.TradeRobot.Business/Business/SingalBusiness.cs b/Binance.TradeRobot.Business/Business/SingalBusiness.cs
index 8c24e5e..6b8bc5a 100644
--- a/Binance.TradeRobot.Business/Business/SingalBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/SingalBusiness.cs
@@ -1,5 +1,6 @@
using Binance.TradeRobot.Common.DI;
using Binance.TradeRobot.Model.Base;
+using Binance.TradeRobot.Model.Db;
using Binance.TradeRobot.Model.Dto;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
@@ -8,12 +9,13 @@ using System.Linq;
using System.Threading.Tasks;
using Yitter.IdGenerator;
-namespace Binance.TradeRobot.Business.Business
+namespace Binance.TradeRobot.Business
{
[BatchRegistration(ServiceLifetime.Singleton, RegistrationType.Self)]
public class SingalBusiness : BaseBusiness
{
private RobotBusiness robotBusiness;
+ private ExchangeBusiness exchangeBusiness;
private IEnumerable tradeBusinessList;
public SingalBusiness(IFreeSql fsql,
@@ -21,9 +23,11 @@ namespace Binance.TradeRobot.Business.Business
IIdGenerator idGenerator,
IMemoryCache memoryCache,
RobotBusiness robotBusiness,
+ ExchangeBusiness exchangeBusiness,
IEnumerable tradeBusinessList) : base(fsql, logManager, idGenerator, memoryCache)
{
this.robotBusiness = robotBusiness;
+ this.exchangeBusiness = exchangeBusiness;
this.tradeBusinessList = tradeBusinessList;
}
@@ -34,7 +38,9 @@ namespace Binance.TradeRobot.Business.Business
if (robotList == null || robotList.Count() == 0)
throw new BusinessException("未找到符合条件的机器人");
- //var robot = robotList.FirstOrDefault();
+ var symbolInfo = exchangeBusiness.GetSymbol(robotList[0].ExchangeId, robotList[0].Symbol);
+ if (symbolInfo == null)
+ throw new BusinessException($"未找到交易对{robotList[0].Symbol}({robotList[0].ExchangeId})");
var d21TradeBusiness = tradeBusinessList.FirstOrDefault(t => t.TradePolicy == Enums.TradePolicy.D21);
foreach (var robot in robotList)
@@ -43,7 +49,7 @@ namespace Binance.TradeRobot.Business.Business
{
case Enums.SingalType.小趋势看空:
case Enums.SingalType.小趋势看多:
- Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot));
+ Task.Factory.StartNew(() => d21TradeBusiness.TrendChanged(d21SingalRequest, robot, symbolInfo));
break;
case Enums.SingalType.多交叉:
diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs
index 3953ae1..1a47caa 100644
--- a/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/TradeBusiness/D21TradeBusiness.cs
@@ -41,7 +41,7 @@ namespace Binance.TradeRobot.Business
};
}
- public void TrendChanged(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse
+ public void TrendChanged(T singalRequest, T1 robot, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse
{
try
{
@@ -67,7 +67,7 @@ namespace Binance.TradeRobot.Business
}
}
- public void LongCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse
+ public void LongCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse
{
string step = string.Empty;
var logList = new List();
@@ -247,7 +247,7 @@ namespace Binance.TradeRobot.Business
}
}
- public void ShortCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse
+ public void ShortCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse
{
}
diff --git a/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs b/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs
index 1cf147a..f09128e 100644
--- a/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs
+++ b/Binance.TradeRobot.Business/Business/TradeBusiness/ITradeBusiness.cs
@@ -14,7 +14,8 @@ namespace Binance.TradeRobot.Business
///
///
///
- void TrendChanged(T singalRequest, T1 robot) where T : BaseSingalRequest where T1 : RobotResponse;
+ ///
+ void TrendChanged(T singalRequest, T1 robot, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse;
///
/// 多交叉
@@ -24,7 +25,8 @@ namespace Binance.TradeRobot.Business
///
///
/// 是否为补救信号
- void LongCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse;
+ ///
+ void LongCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse;
///
/// 空交叉
@@ -33,7 +35,8 @@ namespace Binance.TradeRobot.Business
///
///
///
- /// 是否为补救信号
- void ShortCross(T singalRequest, T1 robot, bool isRemedy) where T : BaseSingalRequest where T1 : RobotResponse;
+ /// 是否为补救信号'
+ ///
+ void ShortCross(T singalRequest, T1 robot, bool isRemedy, SymbolInfoResponse symbolInfo) where T : BaseSingalRequest where T1 : RobotResponse;
}
}
diff --git a/Binance.TradeRobot.Model/Base/MappingProfiles.cs b/Binance.TradeRobot.Model/Base/MappingProfiles.cs
index 1167d20..684e838 100644
--- a/Binance.TradeRobot.Model/Base/MappingProfiles.cs
+++ b/Binance.TradeRobot.Model/Base/MappingProfiles.cs
@@ -26,11 +26,11 @@ namespace Binance.TradeRobot.Model.Base
.ForPath(t => t.RobotAccount.WinCount, opt => opt.MapFrom(f => f.WinCount))
.ForPath(t => t.ExchangeAPIKey.AccountId, opt => opt.MapFrom(f => f.ExchangeAccountId))
.ForPath(t => t.ExchangeAPIKey.APIKey, opt => opt.MapFrom(f => f.ExchangeAPIKey))
- .ForPath(t => t.ExchangeAPIKey.SecretKey, opt => opt.MapFrom(f => f.ExchangeSecretKey))
- .ForPath(t => t.SymbolInfo.Id, opt => opt.MapFrom(f => f.SymbolId))
- .ForPath(t => t.SymbolInfo.Symbol, opt => opt.MapFrom(f => f.Symbol))
- .ForPath(t => t.SymbolInfo.SaleQuantityAccuracy, opt => opt.MapFrom(f => f.SymbolSaleQuantityAccuracy))
- .ForPath(t => t.SymbolInfo.ExchangeId, opt => opt.MapFrom(f => f.ExchangeId));
+ .ForPath(t => t.ExchangeAPIKey.SecretKey, opt => opt.MapFrom(f => f.ExchangeSecretKey));
+ //.ForPath(t => t.SymbolInfo.Id, opt => opt.MapFrom(f => f.SymbolId))
+ //.ForPath(t => t.SymbolInfo.Symbol, opt => opt.MapFrom(f => f.Symbol))
+ //.ForPath(t => t.SymbolInfo.SaleQuantityAccuracy, opt => opt.MapFrom(f => f.SymbolSaleQuantityAccuracy))
+ //.ForPath(t => t.SymbolInfo.ExchangeId, opt => opt.MapFrom(f => f.ExchangeId));
CreateMap().IncludeBase()
.ForPath(t => t.D21Policy.Id, opt => opt.MapFrom(f => f.D21PolicyId))
.ForPath(t => t.D21Policy.RobotId, opt => opt.MapFrom(f => f.Id))
diff --git a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
index 6904c88..4af71c6 100644
--- a/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
+++ b/Binance.TradeRobot.Model/Binance.TradeRobot.Model.xml
@@ -344,11 +344,6 @@
运行时长(s)
-
-
- 卖币精度
-
-
平仓次数
diff --git a/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs b/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs
index 22e25df..26a9605 100644
--- a/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs
+++ b/Binance.TradeRobot.Model/Db/Exchange/SymbolInfo.cs
@@ -15,7 +15,7 @@ namespace Binance.TradeRobot.Model.Db
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
- [Column(DbType = "int", MapType = typeof(int))]
+ [Column(MapType = typeof(int), DbType = "int")]
public Enums.Exchange ExchangeId { get; set; }
///
diff --git a/Binance.TradeRobot.Model/Db/Robot/Robot.cs b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
index 76cf1d8..bfa2d91 100644
--- a/Binance.TradeRobot.Model/Db/Robot/Robot.cs
+++ b/Binance.TradeRobot.Model/Db/Robot/Robot.cs
@@ -36,16 +36,16 @@ namespace Binance.TradeRobot.Model.Db
[Column(MapType = typeof(int), DbType = "int")]
public Enums.Exchange ExchangeId { get; set; }
- #region Symbol Extension
- ///
- /// 卖币精度
- ///
- [Column(IsIgnore = true)]
- public long SymbolId { get; set; }
-
- [Column(IsIgnore = true)]
- public int SymbolSaleQuantityAccuracy { get; set; }
- #endregion
+ //#region Symbol Extension
+ //[Column(IsIgnore = true)]
+ //public long SymbolId { get; set; }
+
+ /////
+ ///// 卖币精度
+ /////
+ //[Column(IsIgnore = true)]
+ //public int SymbolSaleQuantityAccuracy { get; set; }
+ //#endregion
#region RobotAccount Extension
diff --git a/SDKAdapter/APIClient/BaseAPIClient.cs b/SDKAdapter/APIClient/BaseAPIClient.cs
index c9c55e2..8dce4ee 100644
--- a/SDKAdapter/APIClient/BaseAPIClient.cs
+++ b/SDKAdapter/APIClient/BaseAPIClient.cs
@@ -67,5 +67,30 @@ namespace SDKAdapter.APIClient
{
throw new NotImplementedException();
}
+
+ ///
+ /// 逐仓杠杆下单接口
+ ///
+ /// 交易对
+ /// 交易方向
+ /// 订单类型
+ /// 基础币数量,卖单必传
+ /// 报价币金额,市价买单必传
+ /// 下单价格,市价不传
+ /// 止损价格,与STOP_LOSS,STOP_LOSS_LIMIT一起使用
+ /// 客户端订单Id
+ /// 交易所订单Id
+ ///
+ public virtual long IsolatedMarginPlaceOrder(string symbol,
+ Enums.TradeDirection tradeDirection,
+ Enums.OrderType orderType,
+ decimal? quantity,
+ decimal? quoteAmount,
+ decimal? price,
+ decimal? stopPrice,
+ string newClientOrderId)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/SDKAdapter/APIClient/BinanceAPIClient.cs b/SDKAdapter/APIClient/BinanceAPIClient.cs
index c8dc2e3..faa36ad 100644
--- a/SDKAdapter/APIClient/BinanceAPIClient.cs
+++ b/SDKAdapter/APIClient/BinanceAPIClient.cs
@@ -1,5 +1,6 @@
using Binance.Net.Clients;
using Binance.Net.Objects;
+using Binance.TradeRobot.Model.Base;
using CryptoExchange.Net.Authentication;
using SDKAdapter.Model;
using System;
@@ -102,5 +103,36 @@ namespace SDKAdapter.APIClient
}
}
+
+ public override long IsolatedMarginPlaceOrder(string symbol,
+ Enums.TradeDirection tradeDirection,
+ Enums.OrderType orderType,
+ decimal? quantity,
+ decimal? quoteAmount,
+ decimal? price,
+ decimal? stopPrice,
+ string newClientOrderId)
+ {
+ var binanceOrderSite = (Binance.Net.Enums.OrderSide)(int)tradeDirection;
+ var binanceOrderType = (Binance.Net.Enums.SpotOrderType)(int)orderType;
+ Binance.Net.Enums.TimeInForce? timeInForce = null;
+ if (orderType == Enums.OrderType.STOP_LOSS_LIMIT)
+ timeInForce = Binance.Net.Enums.TimeInForce.GoodTillCanceled;
+
+ var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync(symbol,
+ binanceOrderSite,
+ binanceOrderType,
+ quantity,
+ quoteAmount,
+ newClientOrderId,
+ price: price,
+ timeInForce: timeInForce,
+ stopPrice: stopPrice,
+ isIsolated: true,
+ orderResponseType: Binance.Net.Enums.OrderResponseType.Acknowledge).Result;
+ if (!r.Success)
+ throw new Exception($"下单失败 {orderType} {tradeDirection} {r.Error?.Message}");
+ return r.Data.Id;
+ }
}
}
diff --git a/SDKTestConsole/Program.cs b/SDKTestConsole/Program.cs
index e8a3ba3..35a7178 100644
--- a/SDKTestConsole/Program.cs
+++ b/SDKTestConsole/Program.cs
@@ -55,7 +55,7 @@ namespace SDKTestConsole
//var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT",
// Binance.Net.Enums.OrderSide.Buy,
// Binance.Net.Enums.SpotOrderType.Market,
- // quoteQuantity: 20M, //报价币金额
+ // quoteQuantity: 30M, //报价币金额
// //quantity: 100M,
// //timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled,
// //stopPrice: 1899M,
@@ -78,19 +78,34 @@ namespace SDKTestConsole
//止损卖币
- //var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT",
- // Binance.Net.Enums.OrderSide.Sell,
- // Binance.Net.Enums.SpotOrderType.StopLossLimit,
- // quantity: 0.00008040M,
- // price: 1899M,
- // //quoteQuantity: 20M, //报价币金额
- // //quantity: 100M,
- // timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled,
- // stopPrice: 1899M,
- // isIsolated: true,
- // orderResponseType: Binance.Net.Enums.OrderResponseType.Full).Result;
- //var s = JsonConvert.SerializeObject(r);
- //Console.WriteLine(s);
+ var r = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT",
+ Binance.Net.Enums.OrderSide.Sell,
+ Binance.Net.Enums.SpotOrderType.StopLossLimit,
+ quantity: 0.0149M,
+ price: 1699M,
+ //quoteQuantity: 20M, //报价币金额
+ //quantity: 100M,
+ timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled,
+ stopPrice: 1699M,
+ isIsolated: true,
+ orderResponseType: Binance.Net.Enums.OrderResponseType.Full).Result;
+
+ var s = JsonConvert.SerializeObject(r);
+ Console.WriteLine(s);
+
+ var r1 = binanceClient.SpotApi.Trading.PlaceMarginOrderAsync("ETHUSDT",
+ Binance.Net.Enums.OrderSide.Sell,
+ Binance.Net.Enums.SpotOrderType.StopLossLimit,
+ quantity: 0.0149M,
+ price: 1699M,
+ //quoteQuantity: 20M, //报价币金额
+ //quantity: 100M,
+ timeInForce: Binance.Net.Enums.TimeInForce.GoodTillCanceled,
+ stopPrice: 1699M,
+ isIsolated: true,
+ orderResponseType: Binance.Net.Enums.OrderResponseType.Full).Result;
+ var s1 = JsonConvert.SerializeObject(r1);
+ Console.WriteLine(s1);
Console.ReadKey();
}
}