Exercise 1.
Computational Finance with C++ Coursework
Due: 5/06/2019
The aim of this exercise is to construct a portfolio optimization solver and perform backtesting to assess the performance the Markowitz model.
You are given a file containing returns from 83 of the FTSE 100 companies. The data is contained in a file called “assets_returns.csv”.
You are also given three files to help you read the data. The two files csv.h and csv.cpp contains a function that read files in the csv format. An example of how to use this function is given in read_data.cpp.
For the given dataset, compute the solutions using a rolling in-sample window of 100 returns observations. Set the in-sample window on the first 100 time periods, then select the portfolio by solving the Markowitz model for a range of target returns. Then evaluate the performance of each portfolio on the following 12 (out-of-sample) periods. Then update the in-sample window, with the inclusion of the previous 12 out-of-sample periods and the exclusion of the first 12 periods of the previous in- sample window. Then rebalance the portfolio by solving the model again, and repeat until the end of the dataset (see Figure below).
The three parts are parameter estimation, portfolio selection, and backtesting. These three steps are described in more detail below.
(A) Parameter Estimation: For the 83 companies you are given returns for 700 days. You will use the data in a rolling fashion described above. The first part will be used to perform parameter estimation. You will need to provide functions to estimate the mean and covariance matrix. The mean return for asset i can
1
in sample
100 days
out of sample
12 days
in sample
12 days
100 days
12 days
time
time
out of sample
Figure 1: Rolling back-testing procedure. be estimated as follows:
1 n r ̄= r.
i n i,k k=1
where ri,k is the return of asset i on day k, and n is the number of days used in the in-sample window for parameter estimation (in this case 100).
The (i,j)-th entry of the covariance matrix can be calculated with the help of the following formula:
1 n
Σ =
ij n−1
(r −r ̄)(r −r ̄). i,k i j,k j
k=1
The estimated covariance matrix will be denoted by Σ and the estimate returns
by r ̄.
(B) Portfolio Optimization: It was shown in the lecture that the optimal portfolio
weights (w) can be obtained by solving the following system of linear equations, Σ − r ̄ − e w 0
⊤
Where λ and μ are the Lagrange multipliers, and r ̄P is the target return, e represents a vector of ones.
Denote the system of linear equations as Qx = b. Then the following algorithm (called the conjugate gradient method) can be used to solve it.
A typical tolerance ε is 10e − 6.
− r ̄ 0 0 λ = − r ̄ P . −e⊤ 0 0 μ −1
2
Algorithm 1: Conjugate Gradient Method – Quadratic Programs
Input : Initial point x0, matrix Q, right hand side vector b, and solution
tolerance ε. 0. Initialize:
s0 =b−Qx0, p0 =s0. 1. For k = 0, 1, . . . , until s⊤k sk ≤ ε do:
α k = s ⊤k s k pTk Qpk
xk+1 =xk +αkpk sk+1 =sk −αkQpk
βk = s⊤k+1sk+1 s ⊤k s k
pk+1 = sk+1 + βkpk
(C) Backtesting is the process of testing a trading strategy on relevant historical data
to ensure its viability before the trader risks any actual capital. In the final part
of the coursework you will evaluate the performance of your portfolio. Construct
a number of portfolios with different target returns using the in-sample dataset.
Then compute the average out of sample return, and covariance of the asset. To
be precise, let w ̄ denote the optimal portfolio, r ̄ denote the average return over
the out-of-sample period, and Σ denote the out of sample covariance matrix. ⊤⊤⊤
The r ̄ w, and w Σw are the actual average returns and covariance of the portfolio.
Evaluation: Write a report describing the classes you developed to solve the problem described above. Your report should contain the following sections:
1. Software Structure: Describe the classes you developed and how they are linked. For this purpose you can use simple diagrams like the ones we used in class.
2. Evaluation: Describe the performance of the Markowitz model for the different target returns. You should compute the returns for 20 portfolios with different returns (from 0.0% to 10%). Use figures and tables to illustrate your findings.
3
3. Appendix: In the Appendix you should include your code. Please make sure it is well documented.
4