We are now able to create a function to use
fmin() to determine the set of weights that maximize the Sharpe ratio for a given set of returns representing the stocks in our portfolio.
fmin() finds a minimum of the applied function, and the efficient portfolio exists at the maximized Sharpe ratio, we need to provide a function that, in essence, returns the negative of the Sharpe ratio, hence allowing
fmin() to find a minimum:
In : def negative_sharpe_ratio_n_minus_1_stock(weights, returns, risk_free_rate): """ Given n-1 weights, return a negative sharpe ratio """ weights2 = sp.append(weights, 1-np.sum(weights)) return -sharpe_ratio(returns, weights2, risk_free_rate)
Our final function is given ...