Skip to content

Commit 4cb0508

Browse files
Vikram Narayantwiecki
authored andcommitted
BUG: fix annualization of alpha (#60)
1 parent 92011b7 commit 4cb0508

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

empyrical/stats.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,10 +1283,18 @@ def alpha_aligned(returns,
12831283
adj_factor_returns = _adjust_returns(factor_returns, risk_free)
12841284
alpha_series = adj_returns - (_beta * adj_factor_returns)
12851285

1286-
out = np.multiply(
1287-
nanmean(alpha_series, axis=0, out=out),
1288-
ann_factor,
1289-
out=out,
1286+
out = np.subtract(
1287+
np.power(
1288+
np.add(
1289+
nanmean(alpha_series, axis=0, out=out),
1290+
1,
1291+
out=out
1292+
),
1293+
ann_factor,
1294+
out=out
1295+
),
1296+
1,
1297+
out=out
12901298
)
12911299

12921300
if allocated_output and isinstance(returns, pd.DataFrame):

empyrical/tests/test_stats.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ def test_excess_sharpe_trans(self, returns, add_noise, translation):
733733
@parameterized.expand([
734734
(empty_returns, simple_benchmark, (np.nan, np.nan)),
735735
(one_return, one_return, (np.nan, np.nan)),
736-
(mixed_returns, negative_returns[1:], (-8.306666666666668,
736+
(mixed_returns, negative_returns[1:], (-0.9997853834885004,
737737
-0.71296296296296313)),
738738
(mixed_returns, mixed_returns, (0.0, 1.0)),
739739
(mixed_returns, -mixed_returns, (0.0, -1.0)),
@@ -801,6 +801,7 @@ def test_alpha_beta_translation(self, mean_returns, translation):
801801
benchmark = pd.Series(
802802
bench,
803803
index=pd.date_range('2000-1-30', periods=1000, freq='D'))
804+
804805
# Translate returns and generate alphas and betas.
805806
returns_depressed = returns-translation
806807
returns_raised = returns+translation
@@ -814,11 +815,13 @@ def test_alpha_beta_translation(self, mean_returns, translation):
814815
# Alpha should change proportionally to how much returns were
815816
# translated.
816817
assert_almost_equal(
817-
(alpha_standard - alpha_depressed)/252,
818+
((alpha_standard + 1) ** (1/252)) -
819+
((alpha_depressed + 1) ** (1/252)),
818820
translation,
819821
DECIMAL_PLACES)
820822
assert_almost_equal(
821-
(alpha_raised - alpha_standard)/252,
823+
((alpha_raised + 1) ** (1/252)) -
824+
((alpha_standard + 1) ** (1/252)),
822825
translation,
823826
DECIMAL_PLACES)
824827
# Beta remains constant.
@@ -1108,8 +1111,8 @@ def test_down_capture(self, returns, factor_returns, expected):
11081111
[(np.nan, np.nan)] * len(simple_benchmark)),
11091112
(one_return, one_return, 1, [(np.nan, np.nan)]),
11101113
(mixed_returns, negative_returns,
1111-
6, [(-3.81286957, -0.7826087), (-4.03558719, -0.76156584),
1112-
(-2.66915888, -0.61682243), (-7.8987541, -0.41311475)]),
1114+
6, [(-0.97854954, -0.7826087), (-0.9828927, -0.76156584),
1115+
(-0.93166924, -0.61682243), (-0.99967288, -0.41311475)]),
11131116
(mixed_returns, mixed_returns,
11141117
6, [(0.0, 1.0), (0.0, 1.0), (0.0, 1.0), (0.0, 1.0)]),
11151118
(mixed_returns, -mixed_returns,
@@ -1209,7 +1212,7 @@ def test_roll_up_capture(self, returns, factor_returns, window, expected):
12091212
(empty_returns, simple_benchmark, (np.nan, np.nan)),
12101213
(one_return, one_return, (np.nan, np.nan)),
12111214
(mixed_returns[1:], negative_returns[1:],
1212-
(-8.306666666666668, -0.71296296296296313)),
1215+
(-0.9997853834885004, -0.71296296296296313)),
12131216
(mixed_returns, mixed_returns, (0.0, 1.0)),
12141217
(mixed_returns, -mixed_returns, (0.0, -1.0))
12151218
])
@@ -1231,7 +1234,7 @@ def test_down_alpha_beta(self, returns, benchmark, expected):
12311234
(empty_returns, simple_benchmark, (np.nan, np.nan)),
12321235
(one_return, one_return, (np.nan, np.nan)),
12331236
(mixed_returns[1:], positive_returns[1:],
1234-
(0.3599999999999995, 0.4285714285)),
1237+
(0.432961242076658, 0.4285714285)),
12351238
(mixed_returns, mixed_returns, (0.0, 1.0)),
12361239
(mixed_returns, -mixed_returns, (0.0, -1.0))
12371240
])

0 commit comments

Comments
 (0)