Distance Learning - Advanced C# for Computational Finance and Derivatives' Pricing - (code DL-CS)
The goal of this distance learning course is to apply the C# object-oriented language and the libraries in the .NET framework to the design and implementation of flexible and robust applications. The focus of the course is on using object-oriented and generic programming models in combination with useful libraries to help the quant developer produce running code for a range of pricing applications for equities and interest rate products. We also discuss how to implement the Gamma (GOF) design patterns in C# and we have seen a many-fold productivity improvement because the .NET libraries support them or can be easily adapted to support them.
Why C#? In our experience we have seen that C# and the .NET libraries are suitable for high-performance desktop applications. First, developer productivity levels are higher in C# when compared with C++, second code performance is excellent and finally the features in the language and the libraries in the .NET framework allow us to develop customizable finance applications.
Overview of Course
This distance learning course discusses the object-oriented and generic programming techniques in C#, using the .NET libraries and integrating them with design patterns to create finance applications. Major topics are:
- Using the .NET framework for finance applications
- Derivatives modelling for equities and fixed income products
- Classes, composition and inheritance
- Interfaces and component programming in C#
- Design patterns and customizable applications
- Creating Excel-based C# applications
- Interfacing with legacy systems
- Finite difference, PDE and Monte Carlo models in C#
- Networking and Interoperability
Benefits
- Advanced object-oriented, generic and functional programming
- Functionality to support application development A-Z
- Applications to computational finance
- Increased developer productivity
- Next generation design patterns in .NET
- Monte Carlo, PDE and fixed-income applications
Coursecontents updated May 2015
Course Contents
Part I: Essential C#
Overview of the .NET framework
- Type Safety and Memory Management
- Classes and Interfaces
- Namespaces and their use in .NET
- Common Language Runtime (CLR)
Object-Oriented Programming in C#
- Classes, fields and methods
- Pass-by-value and pass-by-reference
- Constructors and object initializers
- Structs
- Properties
Advanced Classes
- Inheritance
- Polymorphism and casting
- Virtual function members
- Abstract classes and abstract methods
- Boxing and unboxing
Interfaces and Components
- Interfaces and contracts
- Implementing interfaces; the different scenarios
- Should we use an abstract class or an interface?
- Why interfaces are essential for applications
Delegates
- Motivation: function pointers and callbacks
- Delegate types and delegate instances
- Writing plug-in methods with delegates
- Multi-cast delegates
- Delegates versus interfaces
Events
- Broadcasts and notification patterns
- Event accessors and modifiers
- Events and Windows programming
- Anonymous methods
Generics in C#
- Generic types
- Generic methods and parameters
- Generic delegates
- Genric containers for finance
Advanced Generics
- Generic constraints
- Subclassing of generic types
- Self-referencing generic declarations
- Generic events
Application in .NET, Part 1
- One-factor Monte Carlo option pricing
- Scoping the system
- System and component interfaces
- System Decomposition
Application in .NET, Part 2
- Choosing between interfaces and delegates
- Implementing classes
- Design and system patterns (Builder, Mediator)
- Creating a single-threaded solution
- Multi-threaded solution
Part II: Core Libraries and their Applications in Finance
Fundamental Data Structures
- Strings and text handling
- Dates and Times; time zone
- Financial dates: day-count convention
- Formatting and parsing
- Regular expressions
Collections
- Defining and iterating in containers
- The Array Class
- Linked lists
- Hash tables and sorted dictionaries
Creating your own Containers
- Combining inheritance and generics
- Composition as an alternative to inheritance
- Data structures: vectors and numeric matrices
- Multi-dimensional data structures
- Applications to finance
Streams and I/O
- Stream architecture
- Stream class' members
- File, memory and pipe streams
- Stream adapters
Serialization
- Serialization engines
- Data contract serializer
- Binary serializer
- XML serializer
- Creating and applying serializers
Design by Contract
- Background (Eiffel Programming language)
- Supplier and client: rights and responsibilities
- What is reliable and correct software?
- Correctness and Hoare triples
- Preconditions, postconditions and assertions
- Imperative and declarative statements
Code Contracts in .NET
- Overview of Code Contract
- The binary rewriter
- The Contract class
- Implementing contract by design
- Contracts on interfaces and abstract classes
- Dealing with contract failure
Disposal and Garbage Collection(GC)
- IDisposable, Dispose and Close
- Finalisers
- Automatic garbage collection
- GC internals
- Memory leaks
Part III: Design and Integration Techniques
Threads and Parallel Programming
- Introduction to multi-threading concepts
- Thread class
- Synchronisation
- Asynchronous delegates
- Locking
- Thread safety
Assemblies
- No more DLL hell!
- The structure of an assembly
- Private and shared assemblies
- Global Assembly Cache (GAC)
- Assemblies and their importance for component design
Reflection and Metadata
- What is reflection and why is it useful?
- Reflection applied to types
- Reflection applied to assemblies
- Reflection and member invocation
- Application configuration
- Dynamic code generation
Part IV: Creating Computational Finance Applications
Introduction to Excel and C# Integration
- From VBA to C#
- The Excel Object Model
- Using C# to access Excel
Advanced Excel and C# Applications
- Creating stand-alone Excel applications
- COM Add-ins
- Worksheet functions and Automation Add-ins
- Formulae in C#
- Two-way Data Interoperability (NumericMatrix/Range)
- Regex library
Excel Configuration
- Data access with XML, CSV and relational databases
- Multi-threading and Excel
- Using regular expressions and formulae
C# and Design Patterns
- Why design patterns and which ones to use
- Implementing patterns in C#
- Ready-made patterns in C#
- Applications in finance
Major Patterns
- Builder and Factory Method
- Adapter, Bridge
- Visitor, Strategy, Template Method
- Producer-Consumer Pattern and data feeds
PDE/FDM Option Solver
- Class diagram
- Migrating C++ application to C#
- Presentation in Excel
- Early exercise features
Excel-based Fixed Income Application
- Creating a structured product in C#
- Class design
- Bootstrapping and yield curves
- Linear and cubic spline interpolation
- Worksheet functions
- Add-ins
Integration with Legacy Code
- Calling native DLLs
- Marshalling classes and structs
- Callbacks from unmanaged code
- Shared memory issues
- Version control
Part V: Interoperability and Interfacing
Assemblies
- What are assemblies?
- Modules
- Assemblies versus regular .DLLs
- Assemblies for reuse, versioning, deployment and security
- Assembly contents: Metadata, Resources, code and manifest
- Private and shared assemblies
- Creating and using assembly DLLs
- Assemblies and namespaces
- Shared Assemblies and Versioning
Interfacing C++ and C#
- An introduction to C++/CLI
- Interoperability scenarios
- Using C# functionality from C++
- Wrapping C++ classes in C#
- Examples from Boost statistics library and Winforms
Part IV
The Monte Carlo Method in C#
Finite Difference Method for SDE
Examples
-
Short-rate
-
Heston
-
Jump models
Monte Carlo Engine in C#
Finite Difference Method (FDM)
-
One-factor models
-
Plain and barrier options
-
Early exercise features
-
The Crank Nicolson method
-
Comparing FDM with trinomial method
Alternating Direction Explicit (ADE) Method
-
Background and motivation
-
ADE for one-factor models
-
ADE for nonlinear pricing models
-
Advantages of ADE
Two-Factor Model
-
ADI and Splitting Methods
-
Craig-Sneyd method
-
Mixed derivatives and Janenko method
-
ADE for two-factor problems
Overview of Bond and Fixed Income Pricing
-
Bond Pricing: Design, Implementation and Excel Interfacing
-
Overview of bonds and kinds of bonds
-
Bond price and bond yield
-
Convexity
-
(Macauley) duration
-
Accrued interest and dirty price
-
Day count conventions
Short-term Interest Rate Futures and Options
-
Introduction (short term interest rate futures and option description )
-
Organizing and manage futures data and code
-
Conventions for Liffe Futures
-
Pricing Option
-
Working Example: portfolio of options
Interest Rate Models
Prerequisites
This is not a beginners course and we assume that the student has a working knowledge of C++ or Java, for example. No prior knowledge of C# is needed. We also assume that you are involved in derivative pricing application development or plan to move into this area.
If you have any queries, please do not hesitate to contact
Who should attend?We have created this course for those working with applications for a range of derivatives pricing models, for example quant analysts, developers and model validators. The course is also of interest to VBA, Java and C++ developers who wish to learn C# and apply it in their daily work.
Course FormThe books provided with this course:
- C# for Financial Markets by Daniel J. Duffy and Andrea Germani
- C# 5.0 in a Nutshell, by Joseph and Ben Albahari
Duration, price, date, locations and registration
Course duration: |
Distance learning.
You study in your own pace. Under normal circumstances, this should take you between 1 and 1.5 years to complete. |
Dates and location: |
(click on dates to print registration form) |
Date(s) |
Location |
Price |
Language |
Any time
|
Distance Learning |
€ 3500.-- ex. VAT
€ 4235.-- inc. 21% VAT |
English |
Click here to register.
Attention
This distance learning course can start at any moment. We offer company-wide discount schemes for groups.
|