# Portfolio Optimization

Lets suppose you wish to invest your money in a number of companies (say 4). You’ve got a certain amount of money, but you’re not quite sure in what ratios you must invest.

For example, if you choose to invest a total amount of $100,000 in four different companies, namely, Apple (AAPL), Google (GOOG), IBM (IBM) and Microsoft (MSFT). Firstly, you must have a method to analyse historic data of these companies within a certain time period, lets say 1st January, 2011 to 31st December, 2011. You think of it as a long term investment. You purchase stocks, hold them for the entire year and sell them on the end date. Before you even think of trying to mathematically predict the portfolio performance, you need to train your Algorithms with computations on historic data.

We start with creating permutations of the various ratios that we can divide (0, 1) into. For simplicity, I chose 10% as the increment-decrement value. For each ratio allocation, we wish to calculate the *daily_returns* of your portfolio. With the *daily_returns* for the time period obtained, we then wish to calculate the overall *cumulative_return*. But we **DO NOT** take *cumulative_return* as our criteria for the optimized portfolio.

Now comes the part when we decide what allocation can be taken as the Optimized one. We denote a quantity that I’m going to describe now as **‘Sharpe ratio’**. Sharpe ratio tell you how much returns can we obtain for a certain amount of risk that we take while investing. So, higher the *sharpe_ratio*, higher are the returns for a certain investment risk. Now how do we quantify risk? For simplicity (and a good approximation), we take it as the mathematical standard deviation of *daily_returns*. It is also sometimes called the *volatility*. Once we have the *sharpe_ratios* for all the combinations of allocations, we think of the Optimized portfolio as the one which outputs the maximum Sharpe ratio.

There shouldn’t be much difficulty in coding a solution for the above problem. Try playing around with the **QSTK** modules and try to get familiar with the variety of modules that numpy includes. **Numpy** and **scipy** along with **matplotlib** (for plotting) and **pandas** (for providing high performance data structures) is a very powerful tool.

You can find my code in my **github** repository for Computational-Finance here. Suggestions are invited and please contact me in case of issues regarding the same. In further edits, I’ll try putting together the analysis with a couple of plots.

Good night for now!