public async Task <GenericActionResult> PostNewUnrealizedPnlSerie(BacktestUnrealizedPnlSerie pnlSerie, CancellationToken ct = default(CancellationToken)) { try { ct.ThrowIfCancellationRequested(); if (pnlSerie == null) { throw new ArgumentNullException(nameof(pnlSerie)); } logger.Info($"About to send POST request to {controllerEndpoint}/api/unrpnls"); return(await controllerEndpoint.AppendPathSegment("/api/unrpnls").PostJsonAsync(pnlSerie, ct).ReceiveJson <GenericActionResult>()); } catch (OperationCanceledException) { string err = "Not posting new unrealized PnL serie: operation cancelled"; logger.Error(err); return(new GenericActionResult(false, err)); } catch (ArgumentNullException ex) { string err = $"Not posting new unrealized PnL serie: missing or invalid parameter {ex.ParamName}"; logger.Error(err); return(new GenericActionResult(false, err)); } catch (Exception ex) { string err = "Failed to post new unrealized PnL serie"; logger.Error(err, ex); return(new GenericActionResult(false, $"{err}: {ex.Message}")); } }
public async Task TestPostNewUnrealizedPnLSerie() { string controllerEndpoint = "https://localhost:44379/"; UnrealizedPnlSeriesConnector connector = UnrealizedPnlSeriesConnector.GetConnector(controllerEndpoint); try { string jobGroupId = Guid.NewGuid().ToString(); string tradeDescription = "Trade 1"; var serie = new BacktestUnrealizedPnlSerie() { JobGroupId = jobGroupId, Points = new List <BacktestUnrealizedPnlPoint>() { new BacktestUnrealizedPnlPoint() { TimeInSeconds = 0, UnrealizedPnlInPips = 1.5 }, new BacktestUnrealizedPnlPoint() { TimeInSeconds = 1, UnrealizedPnlInPips = 2.5 }, new BacktestUnrealizedPnlPoint() { TimeInSeconds = 2, UnrealizedPnlInPips = 3.5 }, new BacktestUnrealizedPnlPoint() { TimeInSeconds = 3, UnrealizedPnlInPips = 4.5 }, new BacktestUnrealizedPnlPoint() { TimeInSeconds = 4, UnrealizedPnlInPips = 5.5 }, }, TradeDescription = tradeDescription }; var result = await connector.PostNewUnrealizedPnlSerie(serie); Assert.IsTrue(result.Success, result.Message); } catch (Exception ex) { Assert.Fail(ex.Message); } }
internal async Task <GenericActionResult> HandleNewUnrealizedPnlSerie(BacktestUnrealizedPnlSerie pnlSerie) { try { if (pnlSerie == null) { throw new ArgumentNullException(nameof(pnlSerie)); } if (pnlSerie.Points.IsNullOrEmpty()) { return(new GenericActionResult(false, "Unrealized PnL serie is empty")); } logger.Info($"Received new unrealized PnL serie of {pnlSerie.Points.Count} points for job group {pnlSerie.JobGroupId} (trade {pnlSerie.TradeDescription})"); var result = await actioner.Insert(pnlSerie); if (!result.Success) { return(result); } else { return(new GenericActionResult(true, $"Successfully added new unrealized PnL serie for job group {pnlSerie.JobGroupId}")); } } catch (ArgumentNullException ex) { string err = $"Not processing unrealized PnL serie: missing or invalid parameter {ex.ParamName}"; logger.Error(err); return(new GenericActionResult(false, $"{err}: {ex.Message}")); } catch (Exception ex) { string err = "Failed to process unrealized PnL serie"; logger.Error(err); return(new GenericActionResult(false, $"{err}: {ex.Message}")); } }
public async Task <GenericActionResult> Post([FromBody] BacktestUnrealizedPnlSerie pnlSerie) { return(await utils.HandleNewUnrealizedPnlSerie(pnlSerie)); }
public static BacktestUnrealizedPnlSerieModel ToBacktestUnrealizedPnlSerieModel(this BacktestUnrealizedPnlSerie serie, DateTimeOffset?timestamp = null) { if (serie == null) { return(null); } return(new BacktestUnrealizedPnlSerieModel() { Points = serie.Points.ToBacktestUnrealizedPnlPointModels(), Timestamp = timestamp, TradeCloseOrigin = serie.TradeCloseOrigin, TradeDescription = serie.TradeDescription }); }