public decimal GetQuoteRateForBaseAsset(string accountAssetId, string assetPairId, string legalEntity, bool useAsk) { var assetPair = _assetPairsCache.GetAssetPairById(assetPairId); // two step transform: base -> quote from QuoteCache, quote -> account from FxCache // if accountAssetId == assetPair.BaseAssetId, rate != 1, because trading and fx rates can be different var assetPairQuote = _quoteCacheService.GetQuote(assetPairId); var tradingRate = useAsk ? assetPairQuote.Ask : assetPairQuote.Bid; if (assetPair.QuoteAssetId == accountAssetId) { return(tradingRate); } var fxPair = _assetPairsCache.FindAssetPair(assetPair.QuoteAssetId, accountAssetId, legalEntity); var fxQuote = _fxRateCacheService.GetQuote(fxPair.Id); var rate = fxPair.BaseAssetId == assetPair.QuoteAssetId ? fxQuote.Ask * tradingRate : 1 / fxQuote.Bid * tradingRate; return(rate); }
public decimal GetQuoteRateForBaseAsset(string accountAssetId, string instrument) { var asset = _assetPairsCache.GetAssetPairById(instrument); var baseAssetId = asset.BaseAssetId; if (accountAssetId == baseAssetId) { return(1); } var inst = _assetPairsCache.FindAssetPair(baseAssetId, accountAssetId); var quote = _quoteCacheService.GetQuote(inst.Id); if (inst.BaseAssetId == baseAssetId) { return(quote.Ask); } return(1.0M / quote.Bid); }
public decimal GetQuoteRateForBaseAsset(string accountAssetId, string assetPairId, string legalEntity, bool metricIsPositive = true) { var assetPair = _assetPairsCache.GetAssetPairById(assetPairId); if (accountAssetId == assetPair.BaseAssetId) { return(1); } var assetPairSubst = _assetPairsCache.FindAssetPair(assetPair.BaseAssetId, accountAssetId, legalEntity); var rate = metricIsPositive ? assetPairSubst.BaseAssetId == assetPair.BaseAssetId ? _quoteCacheService.GetQuote(assetPairSubst.Id).Ask : 1 / _quoteCacheService.GetQuote(assetPairSubst.Id).Bid : assetPairSubst.BaseAssetId == assetPair.BaseAssetId ? _quoteCacheService.GetQuote(assetPairSubst.Id).Bid : 1 / _quoteCacheService.GetQuote(assetPairSubst.Id).Ask; return(rate); }