Open pyliut opened 2 years ago
Annualised Sharpe Ratio:
def calc_sharpe(rets, periods_per_year = 12): sharpe = ((1+rets.mean())**12-1)/ ( rets.std() * np.sqrt(periods_per_year) ) return sharpe
Annualised Sortino Ratio:
def calc_sortino(rets, periods_per_year = 12): sortino = ((1+rets.mean())**12-1)/(rets[rets<0].std() * np.sqrt(periods_per_year) ) return sortino
Mean Annual Return:
def calc_mar(rets, periods_per_year = 12): mar = ((1+rets.mean())**12-1) return mar
Maximum Drawdown:
def calc_mdd(returns): #returns = 1D array or pandas series cum_rets = (1 + returns).cumprod() max_cumret = cum_rets.cummax() #max previous cumret dd = 1 - cum_rets/max_cumret #all drawdowns return np.max(dd), np.argmax(dd)
Updated MAR calculation and added Sortino ratio. Sortino is useful since we don't really want to penalise upside vol (e.g. spikes upwards)
Annualised Sharpe Ratio:
Annualised Sortino Ratio:
Mean Annual Return:
Maximum Drawdown: