Below is a full list of all modules which are expected to be available to students on this programme. Please note that this is for information only and may be subject to change.
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. Students will take 4 modules each semester. Modules are assessed by a mixture of in-term assessment and final examinations, with examinations being held in January and May.
Financial Instruments and Markets
This module first introduces you to various types of financial instruments, such as bonds and equities, and the markets in which they are traded. We then explain in detail what financial derivatives are, and how they can be used for hedging and speculation. We also look at how investors can construct optimal portfolios of assets by balancing risk and return in an appropriate way. This module will give you the practical knowledge that is essential for a career in investment banking or financial markets.
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.
- 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
Programming in C++ for Finance
This module will provide you with the necessary skills and techniques needed to investigate a variety of practical problems in mathematical finance. It is based on C++, the programming language of choice for many practitioners in the finance industry. You will learn about the basic concepts of the procedural part of C++ (inherited from the earlier C language), before being introduced to the fundamental ideas of object-oriented programming. The module is very ‘hands on’, with weekly sessions in the computer laboratory where you can put your theoretical knowledge into practice with a series of interesting and useful assignments.
- Overview of technology in finance
- Introduction to the Microsoft Visual Studio C++ development environment
- Concepts in C++ such as data types, variables, arithmetic operations and arrays
- Procedural programming, including branching statements, loops and functions
- Introduction to object-oriented programming: Objects and classes
- Examples from finance including bond pricing, histogramming historical price data, option pricing and risk management within the Black-Scholes framework
This module provides an overview of techniques used in Artificial Intelligence including agent modelling, problem formulation, search, logic, probability and machine learning.
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.
Machine Learning with Python
This module will introduce you to some of the most widely-used techniques in machine learning (ML). After reviewing the necessary background mathematics, we will investigate various ML methods, such as linear regression, polynomial regression and classification with logistic regression. The module covers a very wide range of practical applications, with an emphasis on hands-on numerical work using Python. At the end of the module, you will be able to formalise a ML task, choose the appropriate method to process it numerically, implement the ML algorithm in Python, and assess the method’s performance.
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.
- 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)
Financial Data Analytics
This module will provide students with a general understanding of current applications of data analytics to finance and in particular to derivatives and investment banking. It will introduce a range of analytical tools such as volatility surface management, yield curve evolution and FX volatility/correlation management. It will also provide you with an overview of some standard tools in the field such as Python, R, Excel/VBA and the Power BI Excel functionality. Students are not expected to have any familiarity with coding or any of the topics above, as the module will develop these from scratch. It will provide you with the understanding of a field necessary to prepare for a career in finance in roles such as trading, structuring, management, risk management and quantitative positions in investment banks and hedge funds.
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.
- 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#
Advanced Machine Learning
This module builds on the earlier module "Machine Learning with Python", covering a number of advanced techniques in machine learning, such as dimensionality reduction, support vector machines, decision trees, random forests, and clustering. Although the underlying theoretical ideas are clearly explained, this module is very hands-on, and you will implement various applications using Python in the weekly coursework assignments.
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.
Cloud Computing has transformed how services and applications are delivered. Thanks to the rise of virtualisation technology and new programming paradigms, applications can quickly be delivered to a growing audience, without the need to physically own and configure the infrastructure. The Cloud Computing module will cover the main characteristics of Cloud Computing, including the enabling technologies, main software and service paradigms underpinning it, as well as related aspects, namely security, privacy and ethical concerns.
The Internet interconnects billions of machines, ranging from high end servers to limited capacity embedded sensing devices. Distributed systems are built to take advantage of multiple interconnected machines and achieve common goals with them. The module will cover the fundamental concepts and technical challenges of building distributed systems. The topics will include the characteristics of network communications for applications, application-level communication protocols, the concept of synchronization (implications, role of consistency modes and protocols), as well as the impact of data replication, and options for tolerating failures.
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
Programming languages used in our modules
- The compulsory modules Programming in C++ for Finance and Advanced Computing in Finance will teach you how to program in C++, assuming no prior knowledge of this language
- The elective modules Machine Learning with Python, Artifical Intelligence, Cloud Computing and Advanced Machine Learning all assume that you have a working knowledge of Python. If you do not already have some experience of programming in Python, then you can attend the module MTH766P (Programming in Python) on an unassessed basis. This module takes place in the first semester
- The elective module Functional Programming uses Haskell, although no prior knowledge of this language is required
- The elective module Distributed Systems assumes that you already have a working knowledge of Java
- The elective module Advanced Object-Oriented Programming teaches you advanced C++ programming techniques, building on what you learnt in Programming in C++ for Finance