Utilities¶
The module empyrical.utils
contains various helper functions, e.g. to source risk factor and
return data using pandas-datareader and `yfinance.
-
empyrical.utils.
data_path
(name)¶
-
empyrical.utils.
default_returns_func
(symbol, start=None, end=None)¶ Gets returns for a symbol. Queries Yahoo Finance. Attempts to cache SPY.
- Parameters
- symbolstr
Ticker symbol, e.g. APPL.
- startdate, optional
Earliest date to fetch data for. Defaults to earliest date available.
- enddate, optional
Latest date to fetch data for. Defaults to latest date available.
- Returns
- pd.Series
- Daily returns for the symbol.
See full explanation in tears.create_full_tear_sheet (returns).
-
empyrical.utils.
down
(returns, factor_returns, **kwargs)¶ Calculates a given statistic filtering only negative factor return periods.
- Parameters
- returnspd.Series or np.ndarray
Daily returns of the strategy, noncumulative. - See full explanation in
cum_returns()
.- factor_returns (optional): float / series
Benchmark return to compare returns against.
- function:
the function to run for each rolling window.
- (other keywords): other keywords that are required to be passed to the
function in the ‘function’ argument may also be passed in.
- Returns
- Same as the return of the ‘function’
-
empyrical.utils.
ensure_directory
(path)¶ Ensure that a directory named “path” exists.
-
empyrical.utils.
get_fama_french
()¶ Retrieve Fama-French factors via pandas-datareader Returns ——- pandas.DataFrame
Percent change of Fama-French factors
-
empyrical.utils.
get_returns_cached
(filepath, update_func, latest_dt, **kwargs)¶ Get returns from a cached file if the cache is recent enough, otherwise, try to retrieve via a provided update function and update the cache file. Parameters ———- filepath : str
Path to cached csv file
- update_funcfunction
Function to call in case cache is not up-to-date.
- latest_dtpd.Timestamp (tz=UTC)
Latest datetime required in csv file.
- **kwargsKeyword arguments
Optional keyword arguments will be passed to update_func()
- pandas.DataFrame
DataFrame containing returns
-
empyrical.utils.
get_symbol_returns_from_yahoo
(symbol, start=None, end=None)¶ Wrapper for pandas.io.data.get_data_yahoo(). Retrieves prices for symbol from yahoo and computes returns based on adjusted closing prices.
- Parameters
- symbolstr
Yahoo symbol name to load, e.g. ‘SPY’
- startpandas.Timestamp compatible, optional
Start date of time period to retrieve
- endpandas.Timestamp compatible, optional
End date of time period to retrieve
- Returns
- pandas.DataFrame
Returns of symbol in requested period.
-
empyrical.utils.
get_treasury_yield
(start=None, end=None, period='3MO')¶ Load treasury yields from FRED.
- Parameters
- startdate, optional
Earliest date to fetch data for. Defaults to earliest date available.
- enddate, optional
Latest date to fetch data for. Defaults to latest date available.
- period{‘1MO’, ‘3MO’, ‘6MO’, 1’, ‘5’, ‘10’}, optional
Which maturity to use.
- Returns
- ——-
- pd.Series
Annual treasury yield for every day.
-
empyrical.utils.
get_utc_timestamp
(dt)¶ Returns the Timestamp/DatetimeIndex with either localized or converted to UTC.
- Parameters
- dtTimestamp/DatetimeIndex
the date(s) to be converted
- Returns
- same type as input
date(s) converted to UTC
-
empyrical.utils.
load_portfolio_risk_factors
(filepath_prefix=None, start=None, end=None)¶ Load risk factors Mkt-Rf, SMB, HML, Rf, and UMD. Data is stored in HDF5 file. If the data is more than 2 days old, redownload from Dartmouth. Returns ——- five_factors : pd.DataFrame
Risk factors timeseries.
-
empyrical.utils.
roll
(*args, **kwargs)¶ Calculates a given statistic across a rolling time period.
- Parameters
- returnspd.Series or np.ndarray
Daily returns of the strategy, noncumulative. - See full explanation in
cum_returns()
.- factor_returns (optional): float / series
Benchmark return to compare returns against.
- function:
the function to run for each rolling window.
- window (keyword): int
the number of periods included in each calculation.
- (other keywords): other keywords that are required to be passed to the
function in the ‘function’ argument may also be passed in.
- Returns
- np.ndarray, pd.Series
depends on input type ndarray(s) ==> ndarray Series(s) ==> pd.Series
A Series or ndarray of the results of the stat across the rolling window.
-
empyrical.utils.
rolling_window
(array, length, mutable=False)¶ Restride an array of shape
(X_0, … X_N)
into an array of shape
(length, X_0 - length + 1, … X_N)
where each slice at index i along the first axis is equivalent to
result[i] = array[length * i:length * (i + 1)]
- Parameters
- arraynp.ndarray
The base array.
- lengthint
Length of the synthetic first axis to generate.
- mutablebool, optional
Return a mutable array? The returned array shares the same memory as the input array. This means that writes into the returned array affect
array
. The returned array also uses strides to map the same values to multiple indices. Writes to a single index may appear to change many values in the returned array.
- Returns
- outnp.ndarray
-
empyrical.utils.
up
(returns, factor_returns, **kwargs)¶ Calculates a given statistic filtering only positive factor return periods.
- Parameters
- returnspd.Series or np.ndarray
Daily returns of the strategy, noncumulative. - See full explanation in
cum_returns()
.- factor_returns (optional): float / series
Benchmark return to compare returns against.
- function:
the function to run for each rolling window.
- (other keywords): other keywords that are required to be passed to the
function in the ‘function’ argument may also be passed in.
- Returns
- Same as the return of the function