Skip to content

Commit de6c6f2

Browse files
committed
Use try out pattern
1 parent 475bb24 commit de6c6f2

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

Engine/TransactionHandlers/BrokerageTransactionHandler.cs

+15-17
Original file line numberDiff line numberDiff line change
@@ -844,8 +844,7 @@ private OrderResponse HandleSubmitOrderRequest(SubmitOrderRequest request)
844844
}
845845

846846
// check to see if we have enough money to place the order
847-
var validationResult = ValidateSufficientBuyingPowerForOrders(order, request, orders, securities);
848-
if (validationResult != null)
847+
if (!HasSufficientBuyingPowerForOrders(order, request, out var validationResult, orders, securities))
849848
{
850849
return validationResult;
851850
}
@@ -945,8 +944,7 @@ private OrderResponse HandleUpdateOrderRequest(UpdateOrderRequest request)
945944
{
946945
var updatedOrder = order.Clone();
947946
updatedOrder.ApplyUpdateOrderRequest(request);
948-
var validationResult = ValidateSufficientBuyingPowerForOrders(updatedOrder, request);
949-
if (validationResult != null)
947+
if (!HasSufficientBuyingPowerForOrders(updatedOrder, request, out var validationResult))
950948
{
951949
return validationResult;
952950
}
@@ -1055,8 +1053,9 @@ private OrderResponse HandleCancelOrderRequest(CancelOrderRequest request)
10551053
/// Returns an error response if validation fails or an exception occurs.
10561054
/// Returns null if validation passes.
10571055
/// </summary>
1058-
private OrderResponse ValidateSufficientBuyingPowerForOrders(Order order, OrderRequest request, List<Order> orders = null, Dictionary<Order, Security> securities = null)
1056+
private bool HasSufficientBuyingPowerForOrders(Order order, OrderRequest request, out OrderResponse response, List<Order> orders = null, Dictionary<Order, Security> securities = null)
10591057
{
1058+
response = null;
10601059
HasSufficientBuyingPowerForOrderResult hasSufficientBuyingPowerResult;
10611060
try
10621061
{
@@ -1066,35 +1065,34 @@ private OrderResponse ValidateSufficientBuyingPowerForOrders(Order order, OrderR
10661065
{
10671066
Log.Error(err);
10681067
_algorithm.Error($"Order Error: id: {order.Id.ToStringInvariant()}, Error executing margin models: {err.Message}");
1069-
HandleOrderEvent(new OrderEvent(order,
1070-
_algorithm.UtcTime,
1071-
OrderFee.Zero,
1072-
"Error executing margin models"));
1073-
return OrderResponse.Error(request, OrderResponseErrorCode.ProcessingError, "An error occurred while checking sufficient buying power for the orders.");
1068+
HandleOrderEvent(new OrderEvent(order, _algorithm.UtcTime, OrderFee.Zero, "Error executing margin models"));
1069+
1070+
response = OrderResponse.Error(request, OrderResponseErrorCode.ProcessingError, "An error occurred while checking sufficient buying power for the orders.");
1071+
return false;
10741072
}
10751073

10761074
if (!hasSufficientBuyingPowerResult.IsSufficient)
10771075
{
10781076
var errorMessage = securities != null
10791077
? securities.GetErrorMessage(hasSufficientBuyingPowerResult)
10801078
: $"Brokerage failed to update order with id: {order.Id.ToStringInvariant()}, Symbol: {order.Symbol.Value}, Insufficient buying power to complete order, Reason: {hasSufficientBuyingPowerResult.Reason}.";
1079+
10811080
_algorithm.Error(errorMessage);
1081+
10821082
if (request is UpdateOrderRequest)
10831083
{
1084-
HandleOrderEvent(new OrderEvent(order,
1085-
_algorithm.UtcTime,
1086-
OrderFee.Zero,
1087-
"Brokerage failed to update order"));
1088-
return OrderResponse.Error(request, OrderResponseErrorCode.BrokerageFailedToUpdateOrder, errorMessage);
1084+
HandleOrderEvent(new OrderEvent(order, _algorithm.UtcTime, OrderFee.Zero, errorMessage));
1085+
response = OrderResponse.Error(request, OrderResponseErrorCode.BrokerageFailedToUpdateOrder, errorMessage);
10891086
}
10901087
else
10911088
{
10921089
InvalidateOrders(orders, errorMessage);
1093-
return OrderResponse.Error(request, OrderResponseErrorCode.InsufficientBuyingPower, errorMessage);
1090+
response = OrderResponse.Error(request, OrderResponseErrorCode.InsufficientBuyingPower, errorMessage);
10941091
}
1092+
return false;
10951093
}
10961094

1097-
return null;
1095+
return true;
10981096
}
10991097

11001098
private void HandleOrderEvents(List<OrderEvent> orderEvents)

0 commit comments

Comments
 (0)