Exemple #1
0
        /// <summary>
        /// Вычисление текущего состояния активов
        /// </summary>
        /// <returns></returns>
        private async Task CalcCurrentStateOnPosition()
        {
            DateTime fromDate = DateTime.Parse("2020-08-01T00:00:00").ToUniversalTime();
            DateTime toDate   = DateTime.UtcNow;

            foreach (var tradePosition in _tradePositions)
            {
                if (tradePosition.IsStateChanged)
                {
                    //список всех оперций по позиции
                    var operations =
                        await _context.OperationsAsync(fromDate, toDate, tradePosition.Figi, _accountId);

                    //узнаем тип последней операции (Buy или Sell)
                    var lastOperationList = operations.OrderByDescending(x => x.Date).ToList();
                    var lastOperation     = lastOperationList.FirstOrDefault();
                    tradePosition.PrevOperationType = lastOperation != null && lastOperation.OperationType == ExtendedOperationType.Buy
                        ? OperationType.Buy
                        : OperationType.Sell;

                    await CalcLastPrice(tradePosition);
                }
                else
                {
                    await CalcLastPrice(tradePosition);
                }
            }
        }
        public async Task OperationsIntervalTest()
        {
            _handler.Expect(HttpMethod.Get, $"{BaseUri}operations")
            .WithQueryString(new Dictionary <string, string>
            {
                ["figi"]            = Figi,
                ["from"]            = "2019-08-19",
                ["interval"]        = "1day",
                ["brokerAccountId"] = BrokerAccountId
            })
            .WithoutContent()
            .RespondJsonFromFile("operations-interval-response");

            var operations = await _context.OperationsAsync(DateTime.Parse("2019-08-19T18:38:33.1316420Z"),
                                                            Interval.Day, Figi, BrokerAccountId);

            var expected = new List <Operation>
            {
                new Operation(
                    "12345687",
                    OperationStatus.Done,
                    new List <Trade>
                {
                    new Trade("12345687", DateTime.Parse("2019-08-19T18:38:33.131642Z").ToUniversalTime(),
                              100.3m, 15)
                },
                    new MoneyAmount(Currency.Rub, 21),
                    Currency.Rub,
                    1504.5m,
                    100.3m,
                    15,
                    quantityExecuted: 15,
                    Figi,
                    InstrumentType.Stock,
                    true,
                    DateTime.Parse("2019-08-19T18:38:33.131642Z").ToUniversalTime(),
                    ExtendedOperationType.Buy)
            };

            operations.Should().BeEquivalentTo(expected);
        }