예제 #1
0
        public async Task <(bool, string)> PostNewTradeGenericMetric2Serie(BacktestTradeGenericMetric2Serie tradeGenericMetric2Serie, CancellationToken ct = default(CancellationToken))
        {
            try
            {
                ct.ThrowIfCancellationRequested();

                if (tradeGenericMetric2Serie == null)
                {
                    throw new ArgumentNullException(nameof(tradeGenericMetric2Serie));
                }

                logger.Info($"About to send POST request to {controllerEndpoint}/api/tradegenericmetric2s");

                return(await controllerEndpoint.AppendPathSegment("/api/tradegenericmetric2s").PostJsonAsync(tradeGenericMetric2Serie, ct).ReceiveJson <(bool, string)>());
            }
            catch (OperationCanceledException)
            {
                string err = "Not posting new trade generic metric2 serie: operation cancelled";
                logger.Error(err);
                return(false, err);
            }
            catch (ArgumentNullException ex)
            {
                string err = $"Not posting new trade generic metric2 serie: missing or invalid parameter {ex.ParamName}";
                logger.Error(err);
                return(false, err);
            }
            catch (Exception ex)
            {
                string err = "Failed to post new trade generic metric2 serie";
                logger.Error(err, ex);
                return(false, $"{err}: {ex.Message}");
            }
        }
        public async Task TestPostNewTradeGenericMetric2Serie()
        {
            string controllerEndpoint = "https://localhost:44379/";

            TradeGenericMetric2SeriesConnector connector = TradeGenericMetric2SeriesConnector.GetConnector(controllerEndpoint);

            try
            {
                string jobGroupId       = Guid.NewGuid().ToString();
                string tradeDescription = "Trade 1";

                var serie = new BacktestTradeGenericMetric2Serie()
                {
                    JobGroupId = jobGroupId,
                    Points     = new List <BacktestTradeGenericMetric2Point>()
                    {
                        new BacktestTradeGenericMetric2Point()
                        {
                            TimeInSeconds = 0, GenericMetric2Value = 1.5
                        },
                        new BacktestTradeGenericMetric2Point()
                        {
                            TimeInSeconds = 1, GenericMetric2Value = 2.5
                        },
                        new BacktestTradeGenericMetric2Point()
                        {
                            TimeInSeconds = 2, GenericMetric2Value = 3.5
                        },
                        new BacktestTradeGenericMetric2Point()
                        {
                            TimeInSeconds = 3, GenericMetric2Value = 4.5
                        },
                        new BacktestTradeGenericMetric2Point()
                        {
                            TimeInSeconds = 4, GenericMetric2Value = 5.5
                        },
                    },
                    TradeDescription = tradeDescription
                };

                var result = await connector.PostNewTradeGenericMetric2Serie(serie);

                Assert.IsTrue(result.Item1, result.Item2);
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
예제 #3
0
        internal async Task <(bool, string)> HandleNewTradeGenericMetric2Serie(BacktestTradeGenericMetric2Serie tradeGenericMetric2Serie)
        {
            try
            {
                if (tradeGenericMetric2Serie == null)
                {
                    throw new ArgumentNullException(nameof(tradeGenericMetric2Serie));
                }

                if (tradeGenericMetric2Serie.Points.IsNullOrEmpty())
                {
                    return(false, "Unrealized PnL serie is empty");
                }

                logger.Info($"Received new unrealized PnL serie of {tradeGenericMetric2Serie.Points.Count} points for job group {tradeGenericMetric2Serie.JobGroupId} (trade {tradeGenericMetric2Serie.TradeDescription})");

                // 1. Save in database
                var result = await actioner.Insert(tradeGenericMetric2Serie);

                if (!result.Item1)
                {
                    return(result);
                }
                else
                {
                    return(true, $"Successfully added new unrealized PnL serie for job group {tradeGenericMetric2Serie.JobGroupId}");
                }
            }
            catch (ArgumentNullException ex)
            {
                string err = $"Not processing unrealized PnL serie: missing or invalid parameter {ex.ParamName}";
                logger.Error(err);
                return(false, $"{err}: {ex.Message}");
            }
            catch (Exception ex)
            {
                string err = "Failed to process unrealized PnL serie";
                logger.Error(err);
                return(false, $"{err}: {ex.Message}");
            }
        }
예제 #4
0
 public async Task <(bool, string)> Post([FromBody] BacktestTradeGenericMetric2Serie tradeGenericMetric2Serie)
 {
     return(await utils.HandleNewTradeGenericMetric2Serie(tradeGenericMetric2Serie));
 }