Add user to position + fix few things
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using Managing.Application.Trading;
|
||||
using Managing.Application.Trading.Commands;
|
||||
using Managing.Domain.Trades;
|
||||
using Managing.Domain.Users;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
using static Managing.Common.Enums;
|
||||
@@ -23,7 +24,9 @@ public class PositionTests : BaseTests
|
||||
Ticker.BTC,
|
||||
PositionInitiator.User,
|
||||
DateTime.UtcNow,
|
||||
isForPaperTrading: false);
|
||||
_account.User,
|
||||
isForPaperTrading: false,
|
||||
signalIdentifier: new Guid().ToString());
|
||||
var handler = new OpenPositionCommandHandler(
|
||||
_exchangeService,
|
||||
_accountService.Object,
|
||||
@@ -41,8 +44,8 @@ public class PositionTests : BaseTests
|
||||
// _ = new GetAccountPositioqwnInfoListOutputDTO().DecodeOutput(hexPositions).d
|
||||
//
|
||||
var openTrade = await _exchangeService.GetTrade(_account, "", Ticker.BTC);
|
||||
var position = new Position("", TradeDirection.Long, Ticker.BTC, MoneyManagement, PositionInitiator.User,
|
||||
DateTime.UtcNow)
|
||||
var position = new Position("", "", TradeDirection.Long, Ticker.BTC, MoneyManagement, PositionInitiator.User,
|
||||
DateTime.UtcNow, new User())
|
||||
{
|
||||
Open = openTrade
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Managing.Domain.Trades;
|
||||
using Managing.Domain.Users;
|
||||
using Xunit;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
@@ -9,7 +10,8 @@ namespace Managing.Application.Tests
|
||||
[Theory]
|
||||
[InlineData(1, 100, 110, 10)]
|
||||
[InlineData(2, 100, 110, 20)]
|
||||
public void Should_Return_Correct_ProfitAndLoss_Amount(decimal quantity, decimal price, decimal exitPrice, decimal expectedResult)
|
||||
public void Should_Return_Correct_ProfitAndLoss_Amount(decimal quantity, decimal price, decimal exitPrice,
|
||||
decimal expectedResult)
|
||||
{
|
||||
// Arrange
|
||||
var init = new List<Tuple<decimal, decimal>>();
|
||||
@@ -42,7 +44,8 @@ namespace Managing.Application.Tests
|
||||
position.ProfitAndLoss = new ProfitAndLoss(orders, position.OriginDirection);
|
||||
|
||||
// Trigger Stop Loss
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price, position.OriginDirection);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price,
|
||||
position.OriginDirection);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(20, position.ProfitAndLoss.Realized);
|
||||
@@ -65,7 +68,8 @@ namespace Managing.Application.Tests
|
||||
position.ProfitAndLoss = new ProfitAndLoss(orders, position.OriginDirection);
|
||||
|
||||
// Trigger Stop Loss
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price, position.OriginDirection);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price,
|
||||
position.OriginDirection);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(3.97005582759999752M, position.ProfitAndLoss.Realized);
|
||||
@@ -127,8 +131,10 @@ namespace Managing.Application.Tests
|
||||
|
||||
// Act
|
||||
position.ProfitAndLoss = new ProfitAndLoss(orders, position.OriginDirection);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit1.Quantity, position.TakeProfit1.Price, TradeDirection.Short);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price, TradeDirection.Short);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit1.Quantity, position.TakeProfit1.Price,
|
||||
TradeDirection.Short);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price,
|
||||
TradeDirection.Short);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(20, position.ProfitAndLoss.Realized);
|
||||
@@ -151,7 +157,8 @@ namespace Managing.Application.Tests
|
||||
position.ProfitAndLoss = new ProfitAndLoss(orders, position.OriginDirection);
|
||||
|
||||
// Trigger Stop Loss
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.TakeProfit2.Price, TradeDirection.Short);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.TakeProfit2.Price,
|
||||
TradeDirection.Short);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(120, position.ProfitAndLoss.Realized);
|
||||
@@ -174,7 +181,8 @@ namespace Managing.Application.Tests
|
||||
position.ProfitAndLoss = new ProfitAndLoss(orders, position.OriginDirection);
|
||||
|
||||
// Trigger Stop Loss
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price, TradeDirection.Long);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.StopLoss.Price,
|
||||
TradeDirection.Long);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(20, position.ProfitAndLoss.Realized);
|
||||
@@ -197,7 +205,8 @@ namespace Managing.Application.Tests
|
||||
position.ProfitAndLoss = new ProfitAndLoss(orders, position.OriginDirection);
|
||||
|
||||
// Trigger Stop Loss
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.TakeProfit2.Price, TradeDirection.Long);
|
||||
position.ProfitAndLoss.AddFill(-position.TakeProfit2.Quantity, position.TakeProfit2.Price,
|
||||
TradeDirection.Long);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(120, position.ProfitAndLoss.Realized);
|
||||
@@ -205,47 +214,54 @@ namespace Managing.Application.Tests
|
||||
|
||||
private static Position GetFakeShortPosition()
|
||||
{
|
||||
return new Position("FakeAccount", TradeDirection.Short, Ticker.BTC, null, PositionInitiator.PaperTrading, DateTime.UtcNow)
|
||||
return new Position("", "FakeAccount", TradeDirection.Short, Ticker.BTC, null,
|
||||
PositionInitiator.PaperTrading, DateTime.UtcNow, new User())
|
||||
{
|
||||
Open = new Trade(DateTime.Now, TradeDirection.Short, TradeStatus.Filled,
|
||||
TradeType.Market, Ticker.ADA, 10, 100, 1, "OpenOrderId", ""),
|
||||
TradeType.Market, Ticker.ADA, 10, 100, 1, "OpenOrderId", ""),
|
||||
StopLoss = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.PendingOpen,
|
||||
TradeType.StopMarket, Ticker.ADA, 10, 110, 1, "StopLossOrderId", ""),
|
||||
TradeType.StopMarket, Ticker.ADA, 10, 110, 1, "StopLossOrderId", ""),
|
||||
TakeProfit1 = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.PendingOpen,
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 6, 90, 1, "TakeProfit1OrderId", ""),
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 6, 90, 1, "TakeProfit1OrderId", ""),
|
||||
TakeProfit2 = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.PendingOpen,
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 4, 85, 1, "TakeProfit1OrderId", "")
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 4, 85, 1, "TakeProfit1OrderId", "")
|
||||
};
|
||||
}
|
||||
|
||||
private static Position GetSolanaLongPosition()
|
||||
{
|
||||
return new Position("FakeAccount", TradeDirection.Long, Ticker.BTC, null, PositionInitiator.PaperTrading, DateTime.UtcNow)
|
||||
return new Position("", "FakeAccount", TradeDirection.Long, Ticker.BTC, null,
|
||||
PositionInitiator.PaperTrading, DateTime.UtcNow, new User())
|
||||
{
|
||||
Open = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.Filled,
|
||||
TradeType.Market, Ticker.ADA, (decimal)6.0800904000245037980887037491, (decimal)81.6200, 1, "OpenOrderId", ""),
|
||||
TradeType.Market, Ticker.ADA, (decimal)6.0800904000245037980887037491, (decimal)81.6200, 1,
|
||||
"OpenOrderId", ""),
|
||||
StopLoss = new Trade(DateTime.Now, TradeDirection.Short, TradeStatus.PendingOpen,
|
||||
TradeType.StopMarket, Ticker.ADA, (decimal)3.6480542400147022788532222495, (decimal)79.987600, 1, "StopLossOrderId", ""),
|
||||
TradeType.StopMarket, Ticker.ADA, (decimal)3.6480542400147022788532222495, (decimal)79.987600, 1,
|
||||
"StopLossOrderId", ""),
|
||||
TakeProfit1 = new Trade(DateTime.Now, TradeDirection.Short, TradeStatus.PendingOpen,
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, (decimal)2.4320361600098015192354814996, (decimal)85.701000, 1, "TakeProfit1OrderId", ""),
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, (decimal)2.4320361600098015192354814996, (decimal)85.701000,
|
||||
1, "TakeProfit1OrderId", ""),
|
||||
TakeProfit2 = new Trade(DateTime.Now, TradeDirection.Short, TradeStatus.PendingOpen,
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, (decimal)3.6480542400147022788532222495, (decimal)89.782000, 1, "TakeProfit1OrderId", "")
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, (decimal)3.6480542400147022788532222495, (decimal)89.782000,
|
||||
1, "TakeProfit1OrderId", "")
|
||||
};
|
||||
}
|
||||
|
||||
private static Position GetFakeLongPosition()
|
||||
{
|
||||
return new Position("FakeAccount", TradeDirection.Long, Ticker.BTC, null, PositionInitiator.PaperTrading, DateTime.UtcNow)
|
||||
return new Position("", "FakeAccount", TradeDirection.Long, Ticker.BTC, null,
|
||||
PositionInitiator.PaperTrading, DateTime.UtcNow, new User())
|
||||
{
|
||||
Open = new Trade(DateTime.Now, TradeDirection.Short, TradeStatus.Filled,
|
||||
TradeType.Market, Ticker.ADA, 10, 100, 1, "OpenOrderId", ""),
|
||||
TradeType.Market, Ticker.ADA, 10, 100, 1, "OpenOrderId", ""),
|
||||
StopLoss = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.PendingOpen,
|
||||
TradeType.StopMarket, Ticker.ADA, 10, 90, 1, "StopLossOrderId", ""),
|
||||
TradeType.StopMarket, Ticker.ADA, 10, 90, 1, "StopLossOrderId", ""),
|
||||
TakeProfit1 = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.PendingOpen,
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 6, 110, 1, "TakeProfit1OrderId", ""),
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 6, 110, 1, "TakeProfit1OrderId", ""),
|
||||
TakeProfit2 = new Trade(DateTime.Now, TradeDirection.Long, TradeStatus.PendingOpen,
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 4, 115, 1, "TakeProfit1OrderId", "")
|
||||
TradeType.TakeProfitLimit, Ticker.ADA, 4, 115, 1, "TakeProfit1OrderId", "")
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user