In finance, we are dealing with a trade-off between risk and return. One of the widely used criteria is Sharpe ratio, which is defined as follows:
The following program would maximize the Sharpe ratio by changing the weights of the stocks in the portfolio. The whole program could be divided into several parts. The input area is very simple, just several tickers in addition to the beginning and ending dates. Then, we define four functions, convert daily returns into annual ones, estimate a portfolio variance, estimate the Sharpe ratio, and estimate the last (that is, nth) weight when n-1 weights are estimated from our optimization procedure:
from matplotlib.finance import quotes_historical_yahoo_ochl as getData import numpy as np import pandas as pd import scipy as sp from scipy.optimize import fmin
Code for input area:
ticker=('IBM','WMT','C') # tickers begdate=(1990,1,1) # beginning date enddate=(2012,12,31) # ending date rf=0.0003 ...