public async Task ManageCloseout(OpenOrderResult openingOrderSummary) { if (openingOrderSummary.OpenOrderRequest.Tracking.HasValue) { _sleepService.Sleep(openingOrderSummary.OpenOrderRequest.Tracking.Value); await CloseoutBet(openingOrderSummary); } else { return; } }
private async Task CloseoutBet(OpenOrderResult openingOrderSummary) { var marketId = openingOrderSummary.OpenOrderResponse.MarketId; var runnerId = openingOrderSummary.OpenOrderResponse.SelectionId; var betId = openingOrderSummary.OpenOrderResponse.BetId; var latestRunnerBook = await _runnerService.GetRunnerDetails(marketId, runnerId); var openingOrders = latestRunnerBook.Orders.Where(x => x.BetId == betId).ToList(); double closingPrice = 0; if (openingOrderSummary.OpenOrderRequest.TrackingTradeOffset.HasValue) { closingPrice = PriceLadderUtility.GetWinningPriceTarget(Side.BACK, openingOrderSummary.OpenOrderResponse.OrderTick.Price, openingOrderSummary.OpenOrderRequest.TrackingTradeOffset.Value); } else if (openingOrderSummary.OpenOrderResponse.Side == Side.BACK) { closingPrice = latestRunnerBook.ExchangePrices.AvailableToLay.Min(x => x.Price); } else if (openingOrderSummary.OpenOrderResponse.Side == Side.LAY) { closingPrice = latestRunnerBook.ExchangePrices.AvailableToBack.Max(x => x.Price); } else { throw new System.Exception("No closing side specified"); } var closeoutStake = _closingStakeCalculator.GetFullHedgeStake(openingOrders, closingPrice); var orderWrapper = new OrderWrapper(marketId, runnerId, closeoutStake.Key, new OrderTick(closingPrice, closeoutStake.Value), PersistenceType.LAPSE); var closeoutOrderReport = await _orderPlacer.PlaceOrder(orderWrapper); if (closeoutOrderReport.Status != ExecutionReportStatus.SUCCESS) { throw new System.Exception("Closeout bet not placed!"); } var closeoutBetId = closeoutOrderReport.InstructionReports.Single().BetId; _sleepService.Sleep(10000); await ManageCloseoutOrderMatching(marketId, runnerId, closeoutBetId); }
public Task ManageCloseout(OpenOrderResult openingOrderSummary) { throw new NotImplementedException(); }