docs: def ema_historical_return(prices, frequency=252, span=500):
      """
      Calculate the exponentially-weighted mean of (daily) historical returns, giving
      higher weight to more recent data.
  
      :param prices: adjusted closing prices of the asset, each row is a date
                     and each column is a ticker/id.
      :type prices: pd.DataFrame
      :param frequency: number of time periods in a year, defaults to 252 (the number
                        of trading days in a year)
      :type frequency: int, optional
      :param span: the time-span for the EMA, defaults to 500-day EMA.
      :type span: int, optional
      :return: annualised exponentially-weighted mean (daily) return of each asset
      :rtype: pd.Series
      """
      if not isinstance(prices, pd.DataFrame):
          warnings.warn("prices are not in a dataframe", RuntimeWarning)
          prices = pd.DataFrame(prices)
      daily_returns = daily_price_returns(prices)
      return daily_returns.ewm(span=span).mean().iloc[-1] * frequency