Skip to content

Commit c2fdfb2

Browse files
authored
feat: global OrderProperties property in abstract Brokerage class to liquidate positions with specific properties (#8938)
fix: missed OrderStatus in ...OrderTestParameters classes feat: override ToString() in ...OrderTestParameters classes
1 parent 50f8633 commit c2fdfb2

10 files changed

+59
-3
lines changed

Tests/Brokerages/BrokerageTests.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,16 @@ protected void CancelOpenOrders()
279279
/// </summary>
280280
protected abstract SecurityType SecurityType { get; }
281281

282+
/// <summary>
283+
/// Global order properties used to manage and properly liquidate positions.
284+
/// </summary>
285+
/// <remarks>
286+
/// This property is initialized before/after each brokerage test. It is used to
287+
/// ensure that any pre-existing positions are liquidated correctly and that
288+
/// new orders are created with the necessary properties (e.g., specific Route,
289+
/// Account) to ensure proper execution during the test.
290+
protected virtual OrderProperties OrderProperties { get; }
291+
282292
/// <summary>
283293
/// Returns whether or not the brokers order methods implementation are async
284294
/// </summary>
@@ -775,10 +785,10 @@ protected static void ProcessFeed(IEnumerator<BaseData> enumerator, Cancellation
775785
}, cancellationToken.Token);
776786
}
777787

778-
private MarketOrder GetMarketOrder(Symbol symbol, decimal quantity)
788+
private Order GetMarketOrder(Symbol symbol, decimal quantity)
779789
{
780-
var properties = SymbolPropertiesDatabase.FromDataFolder().GetSymbolProperties(symbol.ID.Market, symbol, symbol.SecurityType, Brokerage?.AccountBaseCurrency ?? Currencies.USD);
781-
return new MarketOrder(symbol, quantity, DateTime.UtcNow) { Id = 1, PriceCurrency = properties.QuoteCurrency };
790+
var mkt = new MarketOrderTestParameters(symbol, OrderProperties);
791+
return quantity > 0 ? mkt.CreateLongOrder(quantity) : mkt.CreateShortOrder(quantity);
782792
}
783793
}
784794
}

Tests/Brokerages/LimitIfTouchedOrderTestParameters.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decima
8585
public override OrderStatus ExpectedStatus => OrderStatus.Submitted;
8686

8787
public override bool ExpectedCancellationResult => true;
88+
89+
public override string ToString()
90+
{
91+
return $"{OrderType.LimitIfTouched}: {SecurityType}, {Symbol}";
92+
}
8893
}
8994

9095
// to be used with brokerages which do not support UpdateOrder

Tests/Brokerages/LimitOrderTestParameters.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decima
7676
public override OrderStatus ExpectedStatus => OrderStatus.Submitted;
7777

7878
public override bool ExpectedCancellationResult => true;
79+
80+
public override string ToString()
81+
{
82+
return $"{OrderType.Limit}: {SecurityType}, {Symbol}";
83+
}
7984
}
8085

8186
// to be used with brokerages which do not support UpdateOrder

Tests/Brokerages/MarketOnCloseOrderTestParameters.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public override Order CreateShortOrder(decimal quantity)
4444
{
4545
return new MarketOnCloseOrder(Symbol, -Math.Abs(quantity), DateTime.UtcNow, properties: Properties)
4646
{
47+
Status = OrderStatus.New,
4748
OrderSubmissionData = OrderSubmissionData,
4849
PriceCurrency = GetSymbolProperties(Symbol).QuoteCurrency
4950
};
@@ -58,6 +59,7 @@ public override Order CreateLongOrder(decimal quantity)
5859
{
5960
return new MarketOnCloseOrder(Symbol, Math.Abs(quantity), DateTime.UtcNow, properties: Properties)
6061
{
62+
Status = OrderStatus.New,
6163
OrderSubmissionData = OrderSubmissionData,
6264
PriceCurrency = GetSymbolProperties(Symbol).QuoteCurrency
6365
};
@@ -79,4 +81,9 @@ public override Order CreateLongOrder(decimal quantity)
7981
/// Always returns <c>true</c> because market-on-close orders can be canceled before execution.
8082
/// </remarks>
8183
public override bool ExpectedCancellationResult => true;
84+
85+
public override string ToString()
86+
{
87+
return $"{OrderType.MarketOnClose}: {SecurityType}, {Symbol}";
88+
}
8289
}

Tests/Brokerages/MarketOnOpenOrderTestParameters.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public override Order CreateShortOrder(decimal quantity)
4444
{
4545
return new MarketOnOpenOrder(Symbol, -Math.Abs(quantity), DateTime.UtcNow, properties: Properties)
4646
{
47+
Status = OrderStatus.New,
4748
OrderSubmissionData = OrderSubmissionData,
4849
PriceCurrency = GetSymbolProperties(Symbol).QuoteCurrency
4950
};
@@ -58,6 +59,7 @@ public override Order CreateLongOrder(decimal quantity)
5859
{
5960
return new MarketOnOpenOrder(Symbol, Math.Abs(quantity), DateTime.UtcNow, properties: Properties)
6061
{
62+
Status = OrderStatus.New,
6163
OrderSubmissionData = OrderSubmissionData,
6264
PriceCurrency = GetSymbolProperties(Symbol).QuoteCurrency
6365
};
@@ -79,4 +81,9 @@ public override Order CreateLongOrder(decimal quantity)
7981
/// Always returns <c>true</c> because market-on-open orders can be canceled before execution.
8082
/// </remarks>
8183
public override bool ExpectedCancellationResult => true;
84+
85+
public override string ToString()
86+
{
87+
return $"{OrderType.MarketOnOpen}: {SecurityType}, {Symbol}";
88+
}
8289
}

Tests/Brokerages/MarketOrderTestParameters.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,10 @@ public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decima
5757
public override OrderStatus ExpectedStatus => OrderStatus.Filled;
5858

5959
public override bool ExpectedCancellationResult => false;
60+
61+
public override string ToString()
62+
{
63+
return $"{OrderType.Market}: {SecurityType}, {Symbol}";
64+
}
6065
}
6166
}

Tests/Brokerages/OrderTestParameters.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public MarketOrder CreateLongMarketOrder(decimal quantity)
4444
{
4545
return new MarketOrder(Symbol, Math.Abs(quantity), DateTime.Now, properties: Properties)
4646
{
47+
Status = OrderStatus.New,
4748
OrderSubmissionData = OrderSubmissionData,
4849
PriceCurrency = GetSymbolProperties(Symbol).QuoteCurrency
4950
};
@@ -52,6 +53,7 @@ public MarketOrder CreateShortMarketOrder(decimal quantity)
5253
{
5354
return new MarketOrder(Symbol, -Math.Abs(quantity), DateTime.Now, properties: Properties)
5455
{
56+
Status = OrderStatus.New,
5557
OrderSubmissionData = OrderSubmissionData,
5658
PriceCurrency = GetSymbolProperties(Symbol).QuoteCurrency
5759
};

Tests/Brokerages/StopLimitOrderTestParameters.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decima
7474
public override OrderStatus ExpectedStatus => OrderStatus.Submitted;
7575

7676
public override bool ExpectedCancellationResult => true;
77+
78+
public override string ToString()
79+
{
80+
return $"{OrderType.StopLimit}: {SecurityType}, {Symbol}";
81+
}
7782
}
7883

7984
// to be used with brokerages which do not support UpdateOrder

Tests/Brokerages/StopMarketOrderTestParameters.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decima
7272
public override OrderStatus ExpectedStatus => OrderStatus.Submitted;
7373

7474
public override bool ExpectedCancellationResult => true;
75+
76+
public override string ToString()
77+
{
78+
return $"{OrderType.StopMarket}: {SecurityType}, {Symbol}";
79+
}
7580
}
7681

7782
// to be used with brokerages which do not support UpdateOrder

Tests/Brokerages/TrailingStopOrderTestParameters.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,10 @@ public override Order CreateLongOrder(decimal quantity)
6161
public override OrderStatus ExpectedStatus => OrderStatus.Submitted;
6262

6363
public override bool ExpectedCancellationResult => false;
64+
65+
public override string ToString()
66+
{
67+
return $"{OrderType.TrailingStop}: {SecurityType}, {Symbol}";
68+
}
6469
}
6570
}

0 commit comments

Comments
 (0)