Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def win_rate(returns, aggregate=None, compounded=True):
""" calculates the win ratio for a period """
def _win_rate(series):
try:
return len(series[series > 0]) / len(series[series != 0])
except Exception:
return 0.
returns = _utils._prepare_returns(returns)
if aggregate:
returns = _utils.aggregate_returns(returns, aggregate, compounded)
if isinstance(returns, _pd.DataFrame):
_df = {}
for col in returns.columns:
_df[col] = _win_rate(returns[col])
return _pd.Series(_df)
return _win_rate(returns)
def expected_return(returns, aggregate=None, compounded=True):
"""
returns the expected return for a given period
by calculating the geometric holding period return
"""
returns = _utils._prepare_returns(returns)
returns = _utils.aggregate_returns(returns, aggregate, compounded)
return _np.product(1 + returns) ** (1 / len(returns)) - 1
def avg_loss(returns, aggregate=None, compounded=True):
"""
calculates the average low if
return/trade return for a period
"""
returns = _utils._prepare_returns(returns)
if aggregate:
returns = _utils.aggregate_returns(returns, aggregate, compounded)
return returns[returns < 0].dropna().mean()
def compare(returns, benchmark, aggregate=None, compounded=True,
round_vals=None):
"""
compare returns to benchmark on a
day/week/month/quarter/year basis
"""
returns = _utils._prepare_returns(returns)
benchmark = _utils._prepare_benchmark(benchmark, returns.index)
data = _pd.DataFrame(data={
'Benchmark': _utils.aggregate_returns(
benchmark, aggregate, compounded) * 100,
'Returns': _utils.aggregate_returns(
returns, aggregate, compounded) * 100
})
data['Multiplier'] = data['Returns'] / data['Benchmark']
data['Won'] = _np.where(data['Returns'] >= data['Benchmark'], '+', '-')
if round_vals is not None:
return _np.round(data, round_vals)
return data
def best(returns, aggregate=None, compounded=True):
""" returns the best day/month/week/quarter/year's return """
returns = _utils._prepare_returns(returns)
return _utils.aggregate_returns(returns, aggregate, compounded).max()