# Modules

### Programme Structure

Our course finder pages contain all the most up-to-date information about the Financial Computing MSc, including details of the programme structure, compulsory and elective modules and study options.

Click here to see the full MSc Financial Computing programme structure

Below is a full list of all modules which are expected to be available to students on this programme across the semesters. Please note that this is for information only and may be subject to change. Click the link above for accurate information about which of these modules are compulsory and elective for each semester of your MSc programme.

Modules with codes beginning MTH are taught by the School of Mathematical Sciences (SMS), providing a solid understanding of the principles of mathematical finance. Modules with codes beginning ECS are taught by the School of Electronic Engineering and Computer Science (EECS), and focus on key aspects of technological implementation. Modules are assessed by a mixture of in-term assessment and final examinations, with examinations being held between late April and early June.

### Module outlines

### MTH773P Advanced Computing in Finance

This module covers the advanced programming techniques in C++ that are widely used by professional software engineers and quantitative analysts & developers. The most important of these techniques is object-oriented programming, embracing the concepts of encapsulation, inheritance and polymorphism. We then use these techniques to price a wide range of financial derivatives numerically, using several different pricing models and numerical methods. On completion of this module, you will have acquired the key skills needed to apply for your first role as a junior ‘quant’ or software developer in a financial institution.

Topics include:

- Advanced programming in C++: Classes and objects, dynamic memory allocation, templates, the C++ standard library, strings, container classes, smart pointers, design patterns
- Stochastic models for asset prices (GBM, local volatility, stochastic volatility, jump diffusion)
- Financial derivatives, including options on shares (e.g. European, American, digital, barrier, Asian, lookback, compound, chooser)
- Implied volatility and the construction of the volatility smile
- Fixed income and rates (bonds and yield-to-maturity, discount factor curve bootstrapping, stochastic interest rate models)
- Numerical methods (interpolation, numerical quadrature, non-linear solvers, binomial trees (Cox-Ross-Rubinstein), Monte Carlo methods, finite-difference methods for PDEs)

### ECS769P Advanced Object-Oriented Programming

The module will introduce concepts associated with advanced object-oriented programming concepts, such as inheritance and polymorphism, creating templates, advanced working with exception handling, stream input/output management, associative containers, algorithms, stacks, queues and binary trees, different search and sort methods, namespaces, advanced string class methods, and working with libraries, e.g. boost and STL. It also explores some of the contexts in which these techniques are useful.

### ECS739P Big Data Processing

Big Data Processing covers the new large-scale programming models that allow to easily create algorithms that process massive amounts of information with a cluster of computer nodes. These platforms hide the complexity of coordinating complex parallel computations across the cooperating nodes, instead providing to developers a high-level programming model.

The module is based on the MapReduce programming model. Lectures explain how multiple data analysis algorithms can be expressed under this model, and executed automatically over clusters of machines. The module also covers the internal mechanisms that a MapReduce framework uses to coordinate and execute the job among the infrastructure. Finally, additional related topics in the area of Big Data, such as alternative large-scale processing platforms, NoSQL data stores, and Cloud Computing execution infrastructure are presented. In addition to the lectures, weekly lab sessions and coursework exercises present multiple applications where real world datasets are analysed using platforms such as Hadoop.

### ECS784P Data Analytics

This module will introduce you to a range of topics in data analysis and machine learning, using the Python programming language. Topics include:

-- Introduction to Data Analysis

-- Basic Python programming

-- Python libraries for data science (NumPy, matplotlib, pandas, etc.)

-- Advanced data manipulation and visualisation

-- Scikit-Learn for machine learning

-- Statistical approaches to machine learning

### MTH778P Financial Computing Project and Dissertation

The project component of the MSc programme will give you the opportunity to undertake some significant and advanced study in an area of interest, under the guidance of an expert in that field. Many projects involve a substantial amount of programming and analysis. Your project will be assessed by a written dissertation (of up to 60 pages) which you will submit in early September.

Possible project topics may include:

- The application of a 3-factor HJM model for pricing inflation-linked bonds
- Credit valuation adjustment (CVA) for interest rate swaps: Investigation of wrong-way risk using Monte Carlo / OpenCL
- The Heston model and its numerical implementation on a GPU using CUDA C/C++
- Jump-diffusion models for equity prices
- The LIBOR market model for interest rate derivatives
- Option pricing using finite-difference methods on CPUs and GPUs
- Parallelism in the Alternate Direction Implicit (ADI) method for solving PDEs for stochastic volatility models
- Pricing passport options
- The pricing and risk-management of basket credit derivatives (NTDs and CDOs) using Gaussian copula models
- The SABR stochastic volatility model

### MTH771P Foundations of Mathematical Modelling in Finance

This module introduces you to all of the fundamental concepts needed for your future studies in financial mathematics. After reviewing some key ideas from probability theory, we give an overview of some of the most important financial instruments, including shares, forward contracts and options. We next explain how derivative securities can be priced using the principle of no arbitrage. Various models for pricing options are then considered in detail, including the discrete-time binomial model and the continuous-time Black-Scholes model.

Topics include:

- Review of key concepts in probability theory
- Introduction to financial markets
- Pricing derivatives by no-arbitrage arguments
- Discrete-time option pricing models
- Introduction to continuous-time stochastic processes and the Black-Scholes model

### ECS713P Functional Programming

Recent approaches to systems programming frequently involve functional programming either overtly in the sense that they use modern functional programming languages for rapid prototyping, or more covertly in that they use techniques developed in the functional setting as a way of lending greater structure and clarity to code. This module gives a structured introduction to programming in the modern industrial functional language Haskell, and to techniques such as map-reduce and monadic programming.

### ECS793P Introduction to Object-Oriented Programming

The core of the module is concepts and techniques of object-oriented programming in general and the use of Java in particular. It will consider issues in class and interface design such as immutability, composition versus inheritance, minimising dependency and generalisation. The module will also examine a number of Design Patterns. Exceptions, type variables, iterators and other advanced aspects of the core Java language will be covered. Java's Collections Framework will be considered in detail as an example of a coherent set of Java classes designed to work together, and for its use of generic typing. The more general aim is to consider the requirements for creating understandable, maintainable, and robust classes that can be easily reused by others in a team. There will also be some coverage of software engineering principles: analysis and specification of user requirements, object-oriented design, testing and debugging, refactoring. "Agile" software engineering techniques will be compared with top-down design using specifications.

### ECS708P Machine Learning

This course covers methods for machine learning from signals and data, including statistical pattern recognition methods, neural networks, and clustering. The aim of the course is to give you an understanding of machine learning methods, including pattern recognition, clustering and neural networks, and to allow you to apply such methods in a range of areas. By the end of the course you will be able to: Recall a range of machine learning techniques and algorithms, including neural networks and statistical methods; Use concepts from probability theory in machine learning; Derive and analyse properties of machine learning methods; Discuss the relative merits of different machine learning techniques and approaches and apply machine learning methods to the analysis of signals and data.

### ECS786P Parallel Computing

The module will introduce concepts associated with high performance computing, such as parallel processing, hardware acceleration, GPU (Graphics Processing Unit) programming and FPGA (Field Programmable Gate Array) programming.

### MTH774P Portfolio Theory & Risk Management

A very important general problem in finance is to balance investment risk and return. In this module you will acquire skills and techniques to apply modern risk measures and portfolio management tools. Mathematically this involves the maximization of the expectation of suitable utility functions which characterizes the optimum portfolio. You will learn about the theoretical background of optimization schemes and be able to implement them to solve practical investment problems.

### MTH772P Stochastic Calculus and Black-Scholes Theory

This module enables you to acquire a deeper understanding of the role of Ito stochastic calculus in mathematical finance, extending the material taught in MTH771P. We begin with some theoretical matters that build on Brownian motion, including concepts such as the Ito integral and Ito processes, and we discuss Ito’s lemma and its use in solving stochastic differential equations. We then turn to applications in finance, showing how the no-arbitrage principle can be used to derive the famous Black-Scholes formula for European call options. We further develop the concepts of risk-neutrality and market completeness. Finally, we apply the methods of stochastic calculus to price different kinds of financial derivative, including exotic and American-style options.

Topics include:

- Overview of continuous-time stochastic processes, with a focus on Brownian motion
- Construction of the Ito integral and Ito processes
- Ito’s lemma, and its use in solving stochastic differential equations
- Review of the Black-Scholes formula for European call options, and the BS partial differential equation
- Fundamental theorems of asset pricing
- Constructing risk-neutral measures in markets with one or many underlying assets
- Pricing exotic and American options, term structure models, as time allows

### MTH789P Trading and Risk Systems Development

This module introduces you to some of the key technologies that are widely used for developing software applications in the financial markets and banking sectors. In particular, we focus on three programming environments/languages (Excel, VBA and C++) which are often used in conjunction to build complete trading and risk management systems. It is a highly practical module, focusing on current industry practice, and therefore you will be well equipped to apply for a programming role in a financial institution.

Topics include:

- Overview of typical requirements for trading and risk management systems
- Introduction to Microsoft Excel, and its use as a ‘front end’ for applications
- Fundamentals of programming in VBA (Microsoft Visual Basic for Applications)
- Manipulating Excel from VBA, the Excel object model
- Review of C++, generation of dynamically-linked libraries (DLLs) used as ‘back ends’ containing computation analytics
- Complete system development (Excel/VBA/C++) of a derivatives pricing tool
- Review of other technologies used in practice, including Java, COM, Python, .NET, C#, F#

### MTH739N Topics in Scientific Computing

This module covers the use of computers for solving applied mathematical problems in general, and problems in network science in particular. Its aim is to provide students with computational tools to solve problems they are likely to encounter in networks (search algorithms, generate network ensembles, ...) and in more generic applied mathematics problems (numerical solution of ordinary differential equations, random number generation) as well as to provide them with a sound understanding of a programming language used in applied sciences.