/// <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); }