pyliut / CSMOM_HT22

Oxford Alpha Fund Quantitative Strategies - cross-sectional momentum team
2 stars 1 forks source link

Key metrics for strategy performance #6

Open pyliut opened 2 years ago

pyliut commented 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)
pyliut commented 2 years ago

Updated MAR calculation and added Sortino ratio. Sortino is useful since we don't really want to penalise upside vol (e.g. spikes upwards)