public VarlikResult Save(UserTransactionLogDto userCoinTransactionLogDto) { if (userCoinTransactionLogDto == null) { var result = new VarlikResult(); result.Status = ResultStatus.MissingRequiredParamater; return(result); } var saveResult = _userCoinTransactionLogOperation.Save(userCoinTransactionLogDto); if (saveResult.IsSuccess) { var listR = GetLastTwoTransactionsByIdCoinType(userCoinTransactionLogDto.IdCoinType); if (listR.IsSuccess && listR.Data.Count >= 2) { PriceDto priceDto = new PriceDto(); priceDto.IdCoinType = userCoinTransactionLogDto.IdCoinType; priceDto.CoinUnitPrice = listR.Data[0].CoinUnitPrice; if (listR.Data[0].CoinUnitPrice > listR.Data[1].CoinUnitPrice) { priceDto.IsIncreasing = true; } else { priceDto.IsIncreasing = false; } CoinPricePublisher coinPricePublisher = new CoinPricePublisher(); coinPricePublisher.PublishPrice(priceDto); } } return(saveResult); }
public async Task Update(PriceDto dto) { using (var context = new DataContext()) { var updatePrice = context.Prices.FirstOrDefault(x => x.Id == dto.Id); if (updatePrice == null) { throw new Exception("The Price to modify was not found"); } else { if (updatePrice.ErasedState) { throw new Exception("The Price is eliminated"); } updatePrice.NominalPrice = dto.NominalPrice; updatePrice.PromotionalPrice = dto.PromotionalPrice; updatePrice.DiscountPercentage = dto.DiscountPercentage; await _priceRepository.Update(updatePrice); } } }
public override PriceDto GenerateNextQuote(PriceDto previousPrice) { var pow = (decimal)Math.Pow(10, CurrencyPair.RatePrecision); var movement = 5 / pow; decimal newMid; if (_isIncreasing) { newMid = previousPrice.Mid + movement; if (newMid > _max) { _isIncreasing = false; } } else { newMid = previousPrice.Mid - movement; if (newMid < _min) { _isIncreasing = true; } } return(new PriceDto { Symbol = previousPrice.Symbol, SpotDate = DateTime.UtcNow.AddDays(2).Date.ToWeekday(), Mid = newMid, Ask = newMid + 5 / pow, Bid = newMid - 5 / pow, CreationTimestamp = Stopwatch.GetTimestamp() }); }
public async Task Update(Guid id, PriceDto priceDto) { var price = await _priceRepository.GetById(id); if (price == null) { throw new KeyNotFoundException($"Price with id: {id} not found."); } var product = await _productRepository.GetById(priceDto.ProductId); if (product == null) { throw new KeyNotFoundException($"Product with id: {priceDto.ProductId} not found."); } price.Value = priceDto.Value; price.ProductId = priceDto.ProductId; price.Product = product; price.DateTime = priceDto.DateTime; price.LastModificationBy = priceDto.LastModificationBy; await _priceRepository.Update(price); await _priceRepository.CommitAsync(); }
private CreditAccountStateDto CloseAccount(CreditAccountDto account, CreditAccountStateDto latestCreditAccountState) { var accountCurrency = account.Currency; account.IsClosed = true; var updateCreditAccountCommand = new UpdateModelCommand <CreditAccountDto>() { ModelDto = account }; _creditAccountCommandRepository.Execute(updateCreditAccountCommand); var zeroPrice = new PriceDto() { Currency = accountCurrency, Value = 0m }; var closingCreditAccountState = new CreditAccountStateDto() { CreditAccount = account, FinesForOverdue = zeroPrice, InterestCounted = zeroPrice, MainDebtRemain = zeroPrice, RemainDebt = zeroPrice, Month = latestCreditAccountState.Month + 1, TotalInterestSumNotPaid = zeroPrice }; var newCreditAccountStateCommand = new CreateModelCommand <CreditAccountStateDto>() { ModelDto = closingCreditAccountState }; _creditAccountStateCommandRepository.Execute(newCreditAccountStateCommand); return(closingCreditAccountState); }
public async Task <ICollection <PriceDto> > GetAdjustedPrices(LoanDto dto, CancellationToken cancellationToken) { var dtos = new List <PriceDto>(); var llpas = _ctx.Llpas.ToList(); var validLlpas = GetValidLlpas(dto, llpas); var priceAdjustment = validLlpas.Sum(s => s.PriceAdjustment); var priceCeiling = validLlpas.Count > 0 ? validLlpas.Min(m => m.PriceCeiling ?? decimal.MaxValue) : decimal.MaxValue; var priceFloor = validLlpas.Count > 0 ? validLlpas.Max(m => m.PriceFloor ?? decimal.MinValue) : decimal.MinValue; foreach (var price in Prices) { var adjustedPrice = price.Price + priceAdjustment; var priceDto = new PriceDto { Days = price.Days, Rate = price.Rate, Price = price.Price, AdjustedPrice = adjustedPrice, IsValid = adjustedPrice >= priceFloor && adjustedPrice <= priceCeiling }; dtos.Add(priceDto); } await Task.CompletedTask; return(dtos); }
public async Task Publish(PriceDto price) { var context = _contextHolder.PricingHubClient; if (context == null) { return; } _totalUpdatesPublished++; var groupName = string.Format(PricingHub.PriceStreamGroupPattern, price.Symbol); try { await context.Group(groupName).OnNewPrice(price); if (Log.IsDebugEnabled) { Log.DebugFormat("Published price to group {0}: {1}", groupName, price); } } catch (Exception e) { Log.Error(string.Format("An error occurred while publishing price to group {0}: {1}", groupName, price), e); } }
public List <PriceDto> GetPriceList() { using (SqlConnection connection = new SqlConnection(Config.ConnectionString)) { try { connection.Open(); SqlCommand cmd = new SqlCommand("usp_get_price_list", connection) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter("@mode", true)); List <PriceDto> priceList = new List <PriceDto>(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { PriceDto price = new PriceDto(); price.ID = (int)reader["MaMP"]; price.Price = (decimal)reader["MucPhi"]; priceList.Add(price); } } return(priceList); } catch (Exception e) { return(null); } } }
public async Task Delete(PriceDto dto) { var price = await _priceRepository.GetById(dto.Id); if (price != null) { var delete = await _priceRepository.GetById(price.Id); if (delete.ErasedState) { delete.ErasedState = false; await _priceRepository.Update(delete); } else { delete.ErasedState = true; await _priceRepository.Update(delete); } } else { throw new Exception("This Price not exist"); } }
public void GetDataSets_DoesntOverrideExistingObjectsWithNulls_IfTheyAreNotInSpecificRepositories() { //Arrange:QueryDef IEnumerable <AnalysisType> analysisTypes = new AnalysisType[] { AnalysisType.Prices }; AnalysisDataQueryDefinition queryDef = new AnalysisDataQueryDefinition(UTDefaulter.DEFAULT_ASSET_ID, UTDefaulter.DEFAULT_TIMEFRAME_ID) { AnalysisTypes = analysisTypes }; //Arrange:Quotations Mock <IQuotationRepository> quotationRepository = new Mock <IQuotationRepository>(); IEnumerable <QuotationDto> quotationDtos = new QuotationDto[] { utf.getQuotationDto(1), utf.getQuotationDto(2), utf.getQuotationDto(3), utf.getQuotationDto(4) }; quotationRepository.Setup(q => q.GetQuotations(queryDef)).Returns(quotationDtos); //Arrange:Prices Mock <IPriceRepository> priceRepository = new Mock <IPriceRepository>(); IEnumerable <PriceDto> priceDtos = new PriceDto[] { utf.getPriceDto(1), utf.getPriceDto(2), utf.getPriceDto(3), utf.getPriceDto(4) }; priceRepository.Setup(p => p.GetPrices(queryDef)).Returns(priceDtos); //Act IDataSetService service = new DataSetService(); service.InjectQuotationRepository(quotationRepository.Object); service.InjectPriceRepository(priceRepository.Object); var dataSets = service.GetDataSets(queryDef); if (dataSets == null) { throw new Exception("Collection should not be null"); } DataSet baseDataSet = dataSets.SingleOrDefault(ds => ds.IndexNumber == 2); if (baseDataSet == null) { throw new Exception("Base data set shouldn't be null"); } Price basePrice = (baseDataSet == null ? null : baseDataSet.GetPrice()); if (basePrice == null) { throw new Exception("Base price shouldn't be null"); } priceRepository.Setup(q => q.GetPrices(queryDef)).Returns(new PriceDto[] { }); service.InjectPriceRepository(priceRepository.Object); dataSets = service.GetDataSets(queryDef); DataSet comparedDataSet = dataSets.SingleOrDefault(ds => ds.IndexNumber == 2); Price comparedPrice = (comparedDataSet == null ? null : comparedDataSet.GetPrice()); //Assert var areTheSameObject = (basePrice == comparedPrice); Assert.IsTrue(areTheSameObject); }
public void Should_UpdatePriceLevel_When_Price_Crosses_PriceLevel() { var mockHttpClient = new Mock <IHttpPriceLevelRepository>(); var mockLogger = new Mock <ILogger <PriceTradeExecutor> >(); var mockCache = new Mock <ICacheManager>(); var mockTradeProfile = new Mock <ITradeProfileFactory>(); var p = new TradeParameters() { BuySell = "" }; var trans = new TradeTransaction(p) { Closed = false }; //mockTradeProfile.Setup(a=>a.GetTradeGenerationService(It.IsAny<string>()).Generate(It.IsAny<PriceDto>(),It.IsAny<string>())).Returns(trans); var priceLevels = new List <PriceLevelDto>() { new PriceLevelDto() { BuySell = "BUY", AskPrice = 1.3000m }, new PriceLevelDto() { BuySell = "SELL", BidPrice = 1.2000m } }; var lastPrice = new PriceDto() { Ask = 1.3001m, Bid = 1.1999m }; mockCache.Setup(x => x.GetAsync <List <PriceLevelDto> >("price-levels")).ReturnsAsync(priceLevels); mockCache.Setup(x => x.GetAsync <PriceDto>("price")) .ReturnsAsync(lastPrice); var mockPublisher = new Mock <IPriceTradePublisher>(); var subject = new PriceTradeExecutor(mockLogger.Object, mockCache.Object, mockPublisher.Object); var price = new PriceDto() { Ask = 1.2999m, Bid = 1.2001m }; subject.Execute(price, 0.0000m); mockHttpClient.Verify(a => a.UpdatePriceLevel(It.IsAny <PriceLevelDto>()), Times.Exactly(2)); }
public void OnPrice(PriceDto priceDto) { _eventLoopScheduler.Schedule(() => { _priceCache[priceDto.Symbol] = priceDto; var currencyPairTracker = GetTrackerFor(priceDto.Symbol); currencyPairTracker.OnPrice(_priceCache, false); }); }
public static Price CreateFromDto(Tarrif tarrif, PriceDto request) { var newInstance = new Price(); newInstance.AgeFrom = request.AgeFrom; newInstance.AgeTo = request.AgeTo; newInstance.Rate = request.Rate; newInstance.Tarrif = tarrif; return(newInstance); }
public IPrice Create(PriceDto priceDto, ICurrencyPair currencyPair) { var bid = new ExecutablePrice(Direction.SELL, priceDto.Bid, _executionRepository); var ask = new ExecutablePrice(Direction.BUY, priceDto.Ask, _executionRepository); var price = new Price(bid, ask, priceDto.SpotDate, currencyPair, priceDto.CreationTimestamp); _priceLatencyRecorder.OnReceived(price); return(price); }
public void PublishPrice(PriceDto priceDto) { var jsonValue = JsonConvert.SerializeObject(priceDto, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var hub = GlobalHost.ConnectionManager.GetHubContext <CoinPriceHub>(); ((IClientProxy)hub.Clients.Group("price")).Invoke("getPrice", jsonValue).Wait(); }
public async Task <ActionResult <PriceDto> > GetAsync(string id) { PriceDto price = await _coinService.GetByIdAsync <PriceDto>(id); if (price == null) { return(NotFound()); } return(Ok(price)); }
public async Task Create(PriceDto dto) { var price = new Domain.Entities.Price { NominalPrice = dto.NominalPrice, PromotionalPrice = dto.PromotionalPrice, DiscountPercentage = dto.DiscountPercentage, ErasedState = false }; await _priceRepository.Create(price); }
public void Should_Iterate_EachPrice_ThroughModel() { var subject = GetSubjectUnderTest(); var price = new PriceDto() { Bid = 1.25m, Ask = 1.30m }; subject.UpdateTradeLocked(price); Assert.IsTrue(true); }
public void GameStorage_Init_Successfull() { var storage = SerializeHelper.DeserializeFromFile <GameStorage>(@"E:\git\Splendor\Core\Cards.xml"); var test = storage.Save(); var price = new PriceDto { Gems = new List <GemCountDto> { new GemCountDto(Gem.Blue, 1) } }; var test2 = SerializeHelper.Serialize(price); var priceDto = SerializeHelper.Deserialize <PriceDto>(test2); }
public TradeTransaction Generate(PriceDto price, string buySell) { var tradeParams = new TradeParameters() { RiskRewardProfile = nameof(TradeProfileRiskThreeTimesEqual), SpreadAsPips = 10, RiskReward = 3, TradeCounter = 3, EntryPrice = 1.3m, BuySell = buySell, Market = price.Market }; return(new TradeTransaction(tradeParams)); }
private void PopulateLastValueCache() { foreach (var currencyPairInfo in _currencyPairRepository.GetAllCurrencyPairs()) { var mid = _currencyPairRepository.GetSampleRate(currencyPairInfo.CurrencyPair.Symbol); var initialQuote = new PriceDto { Symbol = currencyPairInfo.CurrencyPair.Symbol, Mid = mid }; _priceLastValueCache.StoreLastValue(currencyPairInfo.GenerateNextQuote(initialQuote)); } }
public void GetDataSets_ReturnsCollectionWithAllGivenAnalysisTypes() { //Arrange:QueryDef IEnumerable <AnalysisType> analysisTypes = new AnalysisType[] { AnalysisType.Prices }; AnalysisDataQueryDefinition queryDef = new AnalysisDataQueryDefinition(UTDefaulter.DEFAULT_ASSET_ID, UTDefaulter.DEFAULT_TIMEFRAME_ID) { AnalysisTypes = analysisTypes }; //Arrange:Quotations Mock <IQuotationRepository> quotationRepository = new Mock <IQuotationRepository>(); IEnumerable <QuotationDto> quotationDtos = utf.getDefaultQuotationDtosCollection(); quotationRepository.Setup(q => q.GetQuotations(queryDef)).Returns(quotationDtos); //Arrange:Prices Mock <IPriceRepository> priceRepository = new Mock <IPriceRepository>(); IEnumerable <PriceDto> priceDtos = new PriceDto[] { utf.getPriceDto(1), utf.getPriceDto(2), utf.getPriceDto(3), utf.getPriceDto(4) }; priceRepository.Setup(p => p.GetPrices(queryDef)).Returns(priceDtos); //Act IDataSetService service = new DataSetService(); service.InjectQuotationRepository(quotationRepository.Object); service.InjectPriceRepository(priceRepository.Object); var dataSets = service.GetDataSets(queryDef); //Assert DataSet ds1 = utf.getDataSet(1); ds1.SetQuotation(utf.getQuotation(ds1)).SetPrice(utf.getPrice(ds1)); DataSet ds2 = utf.getDataSet(2); ds2.SetQuotation(utf.getQuotation(ds2)).SetPrice(utf.getPrice(ds2)); DataSet ds3 = utf.getDataSet(3); ds3.SetQuotation(utf.getQuotation(ds3)).SetPrice(utf.getPrice(ds3)); DataSet ds4 = utf.getDataSet(4); ds4.SetQuotation(utf.getQuotation(ds4)).SetPrice(utf.getPrice(ds4)); IEnumerable <DataSet> expectedDataSets = new DataSet[] { ds1, ds2, ds3, ds4 }; var areEqual = expectedDataSets.HasEqualItems(dataSets); Assert.IsTrue(areEqual); }
public async Task GivenBackgroundTaskIsEitherRunningOrNot_WhenGettingPrice_ThenGetsPriceFromProvider(bool isRunning) { // Arrange var dto = new PriceDto(); _priceHubPoolMock.Setup(m => m.IsRunning(CryptoCurrency, Currency)).Returns(isRunning); _cryptoProviderMock.Setup(m => m.GetPrice(CryptoCurrency, Currency)).Returns(Task.FromResult(dto)); // Act var result = await _controller.GetPrice(CryptoCurrency, Currency); // Assert result.Should().NotBeNull(); var okResult = (OkObjectResult)result; okResult.Value.Should().BeSameAs(dto); }
public void Start() { var subscription = Observable.Interval(TimeSpan.FromSeconds(10)).Subscribe( x => { var price = new PriceDto { QuoteId = x, Ask = new Random().Next(0, 10), Bid = new Random().Next(0, 8), Mid = new Random().Next(0, 6), ValueDate = DateTime.UtcNow, Symbol = "USDGBP" }; this._pricePublisher.Publish(price); }); }
public void GetDataSets_UseAlwaysExistingInstancesOfObjects_EvenIfThereIsAnotherOneInRepository() { //Arrange:QueryDef IEnumerable <AnalysisType> analysisTypes = new AnalysisType[] { AnalysisType.Prices }; AnalysisDataQueryDefinition queryDef = new AnalysisDataQueryDefinition(1, 1) { AnalysisTypes = analysisTypes }; //Arrange:Quotations Mock <IQuotationRepository> quotationRepository = new Mock <IQuotationRepository>(); IEnumerable <QuotationDto> quotationDtos = new QuotationDto[] { utf.getQuotationDto(1), utf.getQuotationDto(2), utf.getQuotationDto(3), utf.getQuotationDto(4) }; quotationRepository.Setup(q => q.GetQuotations(queryDef)).Returns(quotationDtos); //Arrange:Prices Mock <IPriceRepository> priceRepository = new Mock <IPriceRepository>(); IEnumerable <PriceDto> priceDtos = new PriceDto[] { utf.getPriceDto(1), utf.getPriceDto(2), utf.getPriceDto(3), utf.getPriceDto(4) }; priceRepository.Setup(p => p.GetPrices(queryDef)).Returns(priceDtos); //Act IDataSetService service = new DataSetService(); service.InjectQuotationRepository(quotationRepository.Object); service.InjectPriceRepository(priceRepository.Object); var dataSets = service.GetDataSets(queryDef); DataSet baseDataSet = dataSets.SingleOrDefault(ds => ds.IndexNumber == 2); Quotation stubQuotation = utf.getQuotation(2); stubQuotation.Open = stubQuotation.Open + 3; IEnumerable <Quotation> quotations = new Quotation[] { utf.getQuotation(1), stubQuotation, utf.getQuotation(3), utf.getQuotation(4) }; quotationRepository.Setup(q => q.GetQuotations(queryDef)).Returns(quotationDtos); service.InjectQuotationRepository(quotationRepository.Object); dataSets = service.GetDataSets(queryDef); DataSet comparedDataSet = dataSets.SingleOrDefault(ds => ds.IndexNumber == 2); //Assert var areTheSameObject = (baseDataSet.GetQuotation() == comparedDataSet.GetQuotation()); Assert.IsTrue(areTheSameObject); }
public async Task AddPrice(PriceDto priceData, int lotId) { using (var db = new BuckwheatContext()) { Lot lot = await db.Lots.FirstOrDefaultAsync(x => x.Id == lotId); if (lot == null) { throw new ArgumentException($"Lot with id {lotId} was not found in the database."); } Price price = mapper.Map <PriceDto, Price>(priceData); price.Lot = lot; await db.Prices.AddAsync(price); await db.SaveChangesAsync(); } }
public async Task SubscribePriceStream(PriceSubscriptionRequestDto request) { _contextHolder.PricingHubClient = Clients; Console.WriteLine("Received subscription request {0} from connection {1}", request, Context.ConnectionId); // add client to this group var groupName = string.Format(PriceStreamGroupPattern, request.CurrencyPair); await Groups.Add(Context.ConnectionId, groupName); Console.WriteLine("Connection {0} added to group '{1}'", Context.ConnectionId, groupName); // send current price to client var firstPrice = new PriceDto { Symbol = "TEST" }; await Clients.Caller.OnNewPrice(firstPrice); Console.WriteLine("Snapshot published to {0}: {1}", Context.ConnectionId, firstPrice); }
public void OnPrice(IDictionary <string, PriceDto> priceCache, bool wasTraded) { var isLong = _baseTradedAmount >= 0; var isUsdBased = CurrencyPair.StartsWith("USD"); PriceDto monitoredPrice, crossedPrice = null; if (!priceCache.TryGetValue(CurrencyPair, out monitoredPrice) || (!isUsdBased && !priceCache.TryGetValue(CrossedPair, out crossedPrice))) { return; } _baseSpot = isLong ? _counterTradedAmount / monitoredPrice.Bid : _counterTradedAmount / monitoredPrice.Ask; var basePnl = _baseTradedAmount - _baseSpot; decimal usdPnl; if (isUsdBased) { usdPnl = basePnl; } else { usdPnl = isLong ? basePnl * crossedPrice.Bid : basePnl * crossedPrice.Ask; } _currentPosition = new CurrencyPairPositionReport { Symbol = CurrencyPair, BaseTradedAmount = _baseTradedAmount, BasePnl = basePnl, UsdPnl = usdPnl, WasTraded = wasTraded }; }
public void GetDataSetsWithInitialCollection_ReturnsProperlyFilledAndIndexedArray_IfNullArrayWasPassedAndSomeDataWereAppended() { //Arrange IEnumerable <AnalysisType> analysisTypes = new AnalysisType[] { AnalysisType.Quotations, AnalysisType.Prices }; AnalysisDataQueryDefinition queryDef = new AnalysisDataQueryDefinition(UTDefaulter.DEFAULT_ASSET_ID, UTDefaulter.DEFAULT_TIMEFRAME_ID) { AnalysisTypes = analysisTypes }; Mock <IQuotationRepository> quotationRepository = new Mock <IQuotationRepository>(); Mock <IPriceRepository> priceRepository = new Mock <IPriceRepository>(); //Act IDataSetService service = new DataSetService(); IEnumerable <QuotationDto> quotationDtos = new QuotationDto[] { utf.getQuotationDto(101), utf.getQuotationDto(102), utf.getQuotationDto(103) }; quotationRepository.Setup(q => q.GetQuotations(queryDef)).Returns(quotationDtos); IEnumerable <PriceDto> priceDtos = new PriceDto[] { utf.getPriceDto(101), utf.getPriceDto(102), utf.getPriceDto(103) }; priceRepository.Setup(q => q.GetPrices(queryDef)).Returns(priceDtos); service.InjectQuotationRepository(quotationRepository.Object); service.InjectPriceRepository(priceRepository.Object); DataSet[] result = service.GetDataSets(queryDef, new List <DataSet>()).ToArray(); //Assert DataSet[] expectedDataSets = new DataSet[104]; DataSet ds101 = utf.getDataSet(101); ds101.SetQuotation(utf.getQuotation(ds101)).SetPrice(utf.getPrice(ds101)); DataSet ds102 = utf.getDataSet(102); ds102.SetQuotation(utf.getQuotation(ds102)).SetPrice(utf.getPrice(ds102)); DataSet ds103 = utf.getDataSet(103); ds103.SetQuotation(utf.getQuotation(ds103)).SetPrice(utf.getPrice(ds103)); expectedDataSets[101] = ds101; expectedDataSets[102] = ds102; expectedDataSets[103] = ds103; var areEqual = expectedDataSets.HasEqualItemsInTheSameOrder(result); Assert.IsTrue(areEqual); }
public IHttpActionResult UpdatePrice(int id, PriceDto priceDto) { if (!ModelState.IsValid) { return(BadRequest()); } var priceInDb = _context.Productz.SingleOrDefault(p => p.Id == id); if (priceInDb == null) { return(NotFound()); } Mapper.Map(priceDto, priceInDb); var product = Mapper.Map <PriceDto, Price>(priceDto); _context.SaveChanges(); priceDto.Id = product.Id; return(Created(new Uri(Request.RequestUri + "/" + product.Id), priceDto)); }