FE 587 - C/C++ Programming for Financial Engineering

Description

In recent years, quantitative analysis depends increasingly on computation. The use of computers became essential in carrying out complex financial decisions and handling vast amounts of financial data available.

For such complex information processing tasks, institutions need to develop their own proprietary software. Yet, such software is very rarely rewritten from scratch; rather it is built using existing components and continually adapted to changing requirements.

To be competitive, a financial engineer must be sufficiently literate in computer code and software engineering concepts: he or she must be able to understand, test, maintain and alter written code, and develop new applications based on reusable and flexible libraries.

The primary goal of this course is to provide a self contained introduction to computer programming. Our focus will be on algorithmic aspects of computer applications currently used primarily in the financial industry, and to prepare the student for the development of new applications.

Our treatment will be exclusively based on case studies and examples: after introducing a programming concept, its use will be illustrated in an example relevant for financial computation.

The student will be introduced to C/C++ programming language and an integrated development environment. The requirement will be a weekly homework that will involve writing C++ code, and the final project will also involve programming in the same environment.

Objectives

After succesful completion of the course, the students will

  • Posses a working knowledge of the C/C++ programming language; be able to use an Integrated Programming environment,

  • Demonstrate knowledge of issues relating to programming, especially in financial applications,

  • Be able to develop applications in C++ using processes and techniques commonly found in financial engineering,

  • Be able to apply object-oriented methods to produce reusable and flexible frameworks for computing applications,

Topics

  • Introduction to computers, programming and algorithms

  • Introduction to C/C++ Integrated Development Environments (IDE): Eclipse + MinGW tools

  • Basic I/O, variables, simple arithmetics, conditional statements,

    • Data types: int, long, unsigned, float, double, char, String, bool

    • Declarations, Constants and Enumeration

  • Loops and functions, Scope, header files, break, continue, Exception handling,

  • Function variables: scope, visibility and lifetime Call by value/call by reference

  • Arrays, strings and pointers Static versus dynamic memory allocation, multidimensional arrays

  • Introduction to object oriented programming (OOP) Taxonomies, inheritance, modularity and reusability

  • Introduction to advanced data structures and classes methods and attributes, public, private and protected, This pointer,

  • Principles of object oriented programming Polymorphism, virtual methods, friends.

  • Templates, Introduction to Standard Template Library

  • File structures, File I/O, fstream, read, write, close

Programming Examples and Exercises

  • random number generation; Box-Muller technique for generating normal variables;

  • Options and derivative pricing:

  • Black-Scholes framework; Binomial tree option pricing: 2-phase forward-backward time-stepping; impact of early exercise

  • Calculation of expectation values via Monte Carlo techniques; Rejection and Importance Sampling;

  • Simulation of normal and lognormal stochastic processes

  • Recursive estimation of time series; The Kalman filter and smoother (tentative)

  • Stochastic Volatility; estimation via Sequential Monte Carlo (tentative)

Administrative

Grading; In class and take home assignments; Final Project

Total Credits

3