mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-02 10:27:09 +08:00
TST: Read more risk expected values from the answer spreadsheet.
Convert test_risk from hardcoded values to reading algorithm returns, volatility, and sharpe answers from the spreadsheet.
This commit is contained in:
@@ -24,7 +24,10 @@ import requests
|
||||
def col_letter_to_index(col_letter):
|
||||
# Only supports single letter,
|
||||
# but answer key doesn't need multi-letter, yet.
|
||||
return ord(col_letter) - 65
|
||||
index = 0
|
||||
for i, char in enumerate(col_letter):
|
||||
index += ((ord(char) - 65) + (26 * i))
|
||||
return index
|
||||
|
||||
DIR = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
@@ -150,6 +153,27 @@ class AnswerKey(object):
|
||||
'year': DataIndex('s_p', 'W', 19, 19),
|
||||
}
|
||||
|
||||
ALGORITHM_PERIOD_RETURNS = {
|
||||
'Monthly': DataIndex('Sim', 'V', 23, 34),
|
||||
'3-Month': DataIndex('Sim', 'W', 25, 34),
|
||||
'6-month': DataIndex('Sim', 'X', 28, 34),
|
||||
'year': DataIndex('Sim', 'Y', 34, 34),
|
||||
}
|
||||
|
||||
ALGORITHM_PERIOD_VOLATILITY = {
|
||||
'Monthly': DataIndex('Sim', 'Z', 23, 34),
|
||||
'3-Month': DataIndex('Sim', 'AA', 25, 34),
|
||||
'6-month': DataIndex('Sim', 'AB', 28, 34),
|
||||
'year': DataIndex('Sim', 'AC', 34, 34),
|
||||
}
|
||||
|
||||
ALGORITHM_PERIOD_SHARPE = {
|
||||
'Monthly': DataIndex('Sim', 'AD', 23, 34),
|
||||
'3-Month': DataIndex('Sim', 'AE', 25, 34),
|
||||
'6-month': DataIndex('Sim', 'AF', 28, 34),
|
||||
'year': DataIndex('Sim', 'AG', 34, 34),
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.workbook = xlrd.open_workbook(ANSWER_KEY_PATH)
|
||||
|
||||
|
||||
+54
-81
@@ -161,107 +161,74 @@ class TestRisk(unittest.TestCase):
|
||||
answer_key_year_periods)
|
||||
|
||||
def test_algorithm_returns_06(self):
|
||||
self.assertEqual([round(x.algorithm_period_returns, 3)
|
||||
answer_key_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_RETURNS['Monthly'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_period_returns, 3)
|
||||
for x in self.metrics_06.month_periods],
|
||||
[0.101,
|
||||
-0.062,
|
||||
-0.041,
|
||||
0.092,
|
||||
0.135,
|
||||
-0.25,
|
||||
0.076,
|
||||
-0.003,
|
||||
-0.024,
|
||||
0.072,
|
||||
0.063,
|
||||
-0.071])
|
||||
answer_key_month_periods)
|
||||
|
||||
self.assertEqual([round(x.algorithm_period_returns, 3)
|
||||
answer_key_three_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_RETURNS['3-Month'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_period_returns, 3)
|
||||
for x in self.metrics_06.three_month_periods],
|
||||
[-0.009,
|
||||
-0.017,
|
||||
0.188,
|
||||
-0.071,
|
||||
-0.085,
|
||||
-0.196,
|
||||
0.047,
|
||||
0.043,
|
||||
0.112,
|
||||
0.058])
|
||||
answer_key_three_month_periods)
|
||||
|
||||
self.assertEqual([round(x.algorithm_period_returns, 3)
|
||||
answer_key_six_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_RETURNS['6-month'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_period_returns, 3)
|
||||
for x in self.metrics_06.six_month_periods],
|
||||
[-0.08,
|
||||
-0.101,
|
||||
-0.044,
|
||||
-0.027,
|
||||
-0.045,
|
||||
-0.106,
|
||||
0.108])
|
||||
answer_key_six_month_periods)
|
||||
|
||||
self.assertEqual([round(x.algorithm_period_returns, 3)
|
||||
answer_key_year_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_RETURNS['year'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_period_returns, 3)
|
||||
for x in self.metrics_06.year_periods],
|
||||
[0.02])
|
||||
answer_key_year_periods)
|
||||
|
||||
def test_algorithm_volatility_06(self):
|
||||
self.assertEqual([round(x.algorithm_volatility, 3)
|
||||
answer_key_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_VOLATILITY['Monthly'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_volatility, 3)
|
||||
for x in self.metrics_06.month_periods],
|
||||
[0.137,
|
||||
0.12,
|
||||
0.13,
|
||||
0.142,
|
||||
0.128,
|
||||
0.14,
|
||||
0.141,
|
||||
0.118,
|
||||
0.143,
|
||||
0.144,
|
||||
0.117,
|
||||
0.135])
|
||||
answer_key_month_periods)
|
||||
|
||||
self.assertEqual([round(x.algorithm_volatility, 3)
|
||||
answer_key_three_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_VOLATILITY['3-Month'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_volatility, 3)
|
||||
for x in self.metrics_06.three_month_periods],
|
||||
[0.222,
|
||||
0.224,
|
||||
0.229,
|
||||
0.243,
|
||||
0.243,
|
||||
0.235,
|
||||
0.23,
|
||||
0.231,
|
||||
0.231,
|
||||
0.227])
|
||||
answer_key_three_month_periods)
|
||||
|
||||
self.assertEqual([round(x.algorithm_volatility, 3)
|
||||
answer_key_six_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_VOLATILITY['6-month'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_volatility, 3)
|
||||
for x in self.metrics_06.six_month_periods],
|
||||
[0.328,
|
||||
0.329,
|
||||
0.329,
|
||||
0.333,
|
||||
0.334,
|
||||
0.329,
|
||||
0.321])
|
||||
answer_key_six_month_periods)
|
||||
|
||||
self.assertEqual([round(x.algorithm_volatility, 3)
|
||||
answer_key_year_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_VOLATILITY['year'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.algorithm_volatility, 3)
|
||||
for x in self.metrics_06.year_periods],
|
||||
[0.458])
|
||||
answer_key_year_periods)
|
||||
|
||||
def test_algorithm_sharpe_06(self):
|
||||
self.assertEqual([round(x.sharpe, 3)
|
||||
answer_key_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_SHARPE['Monthly'],
|
||||
decimal=3)
|
||||
self.assertEqual([np.round(x.sharpe, 3)
|
||||
for x in self.metrics_06.month_periods],
|
||||
[0.711,
|
||||
-0.541,
|
||||
-0.348,
|
||||
0.625,
|
||||
1.017,
|
||||
-1.809,
|
||||
0.508,
|
||||
-0.062,
|
||||
-0.193,
|
||||
0.467,
|
||||
0.502,
|
||||
-0.557])
|
||||
answer_key_month_periods)
|
||||
|
||||
answer_key_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_SHARPE['Monthly'],
|
||||
decimal=3)
|
||||
self.assertEqual([round(x.sharpe, 3)
|
||||
for x in self.metrics_06.three_month_periods],
|
||||
[-0.094,
|
||||
@@ -275,6 +242,9 @@ class TestRisk(unittest.TestCase):
|
||||
0.432,
|
||||
0.2])
|
||||
|
||||
answer_key_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_SHARPE['Monthly'],
|
||||
decimal=3)
|
||||
self.assertEqual([round(x.sharpe, 3)
|
||||
for x in self.metrics_06.six_month_periods],
|
||||
[-0.322,
|
||||
@@ -285,6 +255,9 @@ class TestRisk(unittest.TestCase):
|
||||
-0.398,
|
||||
0.257])
|
||||
|
||||
answer_key_month_periods = ANSWER_KEY.get_values(
|
||||
AnswerKey.ALGORITHM_PERIOD_SHARPE['Monthly'],
|
||||
decimal=3)
|
||||
self.assertEqual([round(x.sharpe, 3)
|
||||
for x in self.metrics_06.year_periods],
|
||||
[-0.066])
|
||||
|
||||
Reference in New Issue
Block a user