Beispiel #1
0
        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
            });
        }