Constructing an optimal portfolio

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.

Since 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 [24]:
   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 ...

Get Mastering pandas for Finance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.