Skip to content

Commit a509e98

Browse files
committed
- annual semideviation metrics is added to Portfolio
- howto notebook edited
1 parent 0290323 commit a509e98

File tree

3 files changed

+1036
-17
lines changed

3 files changed

+1036
-17
lines changed

notebooks/howto.ipynb

Lines changed: 1028 additions & 13 deletions
Large diffs are not rendered by default.

okama/assets.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def __repr__(self):
126126
'currency': self.currency.ticker,
127127
'first date': self.first_date.strftime("%Y-%m"),
128128
'last_date': self.last_date.strftime("%Y-%m"),
129-
'period length': self.period_length,
129+
'period length (Y)': self.period_length,
130130
'inflation': self.inflation if hasattr(self, 'inflation') else 'None',
131131
}
132132
return repr(pd.Series(dic))
@@ -566,7 +566,7 @@ def __repr__(self):
566566
'currency': self.currency,
567567
'first date': self.first_date.strftime("%Y-%m"),
568568
'last_date': self.last_date.strftime("%Y-%m"),
569-
'period length': self.period_length
569+
'period length (Y)': self.period_length
570570
}
571571
return repr(pd.Series(dic))
572572

@@ -689,9 +689,13 @@ def risk_annual(self) -> float:
689689
return Float.annualize_risk(self.risk_monthly, self.mean_return_monthly)
690690

691691
@property
692-
def semideviation(self) -> float:
692+
def semideviation_monthly(self) -> float:
693693
return Frame.get_semideviation(self.returns_ts)
694694

695+
@property
696+
def semideviation_annual(self) -> float:
697+
return Frame.get_semideviation(self.returns_ts) * 12 ** 0.5
698+
695699
def get_var_historic(self, level=5) -> float:
696700
rolling = self.returns_ts.rolling(12).apply(Frame.get_cagr)
697701
return Frame.get_var_historic(rolling, level)

tests/test_assets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def test_risk(self):
6363
assert self.asset_list.risk_annual.sum() == approx(0.2192108407516287, rel=1e-2)
6464

6565
def test_semideviation(self):
66-
assert self.asset_list.semideviation.sum() == approx(0.01811879168832453, rel=1e-2)
66+
assert self.asset_list.semideviation_monthly.sum() == approx(0.01811879168832453, rel=1e-2)
6767

6868
def test_get_var(self):
6969
assert self.asset_list.get_var_historic(level=5).sum() == approx(0.05299999999999999, rel=1e-2)

0 commit comments

Comments
 (0)