Computational Finance with C++
Posted 一吟流曲年殇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Computational Finance with C++相关的知识,希望对你有一定的参考价值。
Computational Finance with C++
Coursework
Handed out: 17/05/2021
Due: 1pm – 7/06/2021
Exercise 1.
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 insample
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
1
time
time
100 days 12 days
100 days 12 days 12 days
out of
sample
in
sample
out of
sample
in
sample
Figure 1: Rolling back-testing procedure.
to estimate the mean and covariance matrix. The mean return for asset i can
be estimated as follows:
r¯i =
1
n
Xn
k=1
ri,k .
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:
Σij =
1
n − 1
Xn
k=1
(ri,k − r¯i)(rj,k − r¯j ).
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,
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.
2
Algorithm 1: Conjugate Gradient Method – Quadratic Programs
Input : Initial point x0, matrix Q, right hand side vector b, and solution
tolerance .
Initialize:
s0 = b − Qx0, p0 = s0.
(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:- 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. - 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 - Appendix: In the Appendix you should include your code. Please make sure it
is well documented.
WX:codehelp
以上是关于Computational Finance with C++的主要内容,如果未能解决你的问题,请参考以下文章
CSC1002 – Computational Laboratory
ELEE 5400/440 - Computational Intelligence Techniques
UBGMW9-15-3 Computational Civil Engineering