public static decimal GetProceed(this IFiatConversion fiatConversion, ITrade trade)
        {
            if (trade is LaunchpadTrade)
            {
                // we go through BNB
                var bnbValue = fiatConversion.TryGetExactPriceInFiat(trade.Quote, trade.Time);
                if (bnbValue.HasValue)
                {
                    return(trade.GetQuoteQuantity() * bnbValue.Value);
                }
            }

            if (trade.IsBuyer)
            {
                // we are buying baseCcy
                var result = fiatConversion.TryGetExactPriceInFiat(trade.Base, trade.Time);
                if (result.HasValue)
                {
                    return(trade.Quantity * result.Value);
                }
            }

            var tryGetExactPriceInFiat = fiatConversion.TryGetExactPriceInFiat(trade.Quote, trade.Time);

            if (tryGetExactPriceInFiat.HasValue)
            {
                return(trade.GetQuoteQuantity() * tryGetExactPriceInFiat.Value);
            }

            if (trade is DelistingTrade)
            {
                // for delisting trade we are trying up to 7 days after
                for (int i = 1; i <= 7; i++)
                {
                    var resultViaBase = fiatConversion.TryGetExactPriceInFiat(trade.Base, trade.Time.AddDays(i));
                    if (resultViaBase.HasValue)
                    {
                        return(trade.Quantity * resultViaBase.Value);
                    }

                    var resultViaQuote = fiatConversion.TryGetExactPriceInFiat(trade.Quote, trade.Time.AddDays(i));

                    if (resultViaQuote.HasValue)
                    {
                        return(trade.GetQuoteQuantity() * resultViaQuote.Value);
                    }

                    var baseViaBtc = fiatConversion.TryGetExactPriceInBtc(trade.Base, trade.Time.AddDays(i));
                    if (baseViaBtc.HasValue)
                    {
                        return(trade.Quantity * baseViaBtc.Value * fiatConversion.GetExactPriceInFiat("BTC", trade.Time.AddDays(i)));
                    }

                    var quoteViaBtc = fiatConversion.TryGetExactPriceInBtc(trade.Quote, trade.Time.AddDays(i));
                    if (quoteViaBtc.HasValue)
                    {
                        return(trade.GetQuoteQuantity() * quoteViaBtc.Value * fiatConversion.GetExactPriceInFiat("BTC", trade.Time.AddDays(i)));
                    }
                }
            }

            throw new Exception($"Unable to price {trade.GetSymbol()} for date {trade.Time} {trade.GetTimeReadable():dd/MM/yyyy}");
        }