• C++ Programming for Financial Engineering
    Highly recommended by thousands of MFE students. Covers essential C++ topics with applications to financial engineering. Learn more Join!
    Python for Finance with Intro to Data Science
    Gain practical understanding of Python to read, understand, and write professional Python code for your first day on the job. Learn more Join!
    An Intuition-Based Options Primer for FE
    Ideal for entry level positions interviews and graduate studies, specializing in options trading arbitrage and options valuation models. Learn more Join!

How to prepare for Financial Engineering programs, Part 1

Joy Pathak

Swaptionz
Joined
8/20/09
Messages
1,330
Points
73
I have received several emails from students about to start the program, regarding MFE preparation, so I figured I would talk about how I have been preparing for the onslaught of what Masters in Financial Engineering is all about.
I decided to make the switch to finance at the end of 2009 during my PhD studies at University of Wisconsin-Madison. I came back to my undergrad university in Canada as it would be a lot cheaper to study here rather than pay out of state fees in USA , to do some refresher courses to prepare myself for the program. I initially had 8 months to prepare, but then I chose to start in the Summer semester and I had only 4 months to prepare. I am going to make a list of things I have been doing to prepare. I will categorize them in terms of math, finance, and programming.

1) Finance Preparation:
I have absolutely no exposure to finance in terms of courses. I was always interested in capital markets and would often read articles on Financial Times, and Yahoo Finance. In my second year of engineering I had even opened an account on Investopedia and tried to learn about trading stocks in a simulated environment. I mostly made my trades by reading news and making speculations, as I did not know much about the quantitative side of trading at the time.

The first thing I knew I had to do once I made the switch was learn the basics... the language of finance so I can have conversations with people in the field without looking stupid. I wanted to take a corporate finance/financial accounting course but unfortunately the classes were full at the university and I could not take any. Without having a corporate finance course it would be really hard to show my credibility to potential employers and graduate schools about my knowledge of Finance. I had gone through MIT Courseware to learn as much as I can. I decided that the only way to prove my knowledge of finance to graduate schools and potential employers would be to publish a paper in corporate finance. Now I assume, when I say "finance" I do not mean Financial Engineering but the basics of Finance related to investments and Corporate decisions. I am sure you all know, publishing a paper is not the easiest thing. The preparation time, the data collection, the literature review, writing it out etc itself takes months. I have done quite a bit of research previously in engineering with published results, and knew what I had to do so I was able to fast-track. I mentioned on my applications that I am working on a research paper related to Capital Structure in Emerging Economies.

I picked up a book on Corporate Finance and started reading through it. Once I got a decent understanding I went and talked to one of the professors at my university and she right away was more than happy to advise me on a potential topic that I came up with. She even went ahead and registered my in an “independent study” course in finance so that I could get a grade for the paper.

After four months of study, and researching basically night and day I am happy to say I am almost done the paper. It is in the final stages of edit and is going to be sent for journal review soon. I will have it up on SSRN soon. The title is “What determines the Capital Structure of Listed firms in India: Some empirical Evidence from the Indian Capital Markets”. I am debating on which journal to send it to.

I also registered to audit a Derivatives and Risk Management course which basically went through the similar concepts as in Hull's book. The professor was excellent and I had a really good time in the course further fortifying my love for finance. Another way to build your basic finance knowledge is to do CFA Level 1. I was strapped for funds and could not find the dedicated 250 hours for it so I did not register for it.

Items I used:
In addition, I went through almost 35 research papers as I cited in my paper on the topic of Capital Structure. I know way too much about Capital Structure than any MFE student should. I did absolutely love studying the subject as it is VERY interesting.

The above two books I mentioned are what I used to build my base knowledge in Finance and Financial engineering. I am going to go through the Hull book one more time before I start my program May 24th.

2) Math Preparation :
This part did not scare me as much considering I was coming off from an mathematical background and I have always been very good at picking up new mathematical concepts with ease. The problem was all the math courses I had taken were in my 2nd year which included Differential Equations, Vector Calculus, Linear Algebra, Statistics, etc and I did not exactly have everything sitting on the back of my hand. Other than differentiating and integrating I had not used many of the other subjects in my courses in my 3rd and 4th year and my PhD studies. I had used quite a bit of Partial Differential Equations and Finite difference/Finite element related mathematics in my researches related to structural analysis and Computational Fluid Dynamics but almost all of it was computational. I even did a bit of Monte Carlo Simulation related work during my PhD on electron trajectories.

I decided to register in a 3rd year Statistics course out of the Stats Department, and also in a 3rd year Mathematical Economics course out of the Economics department. The main reason for the economics course was for the professor. He is a Minnesota theoretical economics PhD. He is very smart and I knew I could learn a lot from him. Both these classes gave me the knowledge I would need to get through the first set of courses in my graduate program. The mathematical economics prepared me with linear algebra, calculus, and optimization significantly. It would then be up to my courses in graduate school to prepare me for the more advanced courses, or at least I am hoping so. Like I said, I am not too worried about the mathematics part. I know it will be hard, but it is something I can pick up on the go in each class since I already have a strong grasp on the basics.

The one course I regret not having the chance to take was Stochastic Processes at an undergraduate level this winter semester. I did buy the Shreves books 1 and 2 but have not had the time to go through it extensively. I will be taking a graduate course in Stochastic Processes out of the Mathematics Department at Illinois Tech as part of my program in the fall semester. It said in the curriculum that they start you off from the basics and then get into the really advanced topics so I am counting on my fast grasping power to pick it up. I will go through the Shreve’s books to build up myself a bit during the summer semester at Illinois Tech as I only have 2 courses.

Items I used:
3) Programming Preparation:
Coming from a Mechanical engineering degree, programming was probably the one thing that was probably the most important to me in terms of preparation. As a mechanical engineer I used MATLAB mostly through my academic and work life. Also, since I did Computational Fluid Dynamics research I used C++ quite a bit but very specific to my needs. When I went through the syllabus for some of the advanced courses and saw most of the job descriptions for quant finance positions it seemed like I had a deficiency. I do not know Python, C#, .Net, Pearl, and the list of other languages you always see pop up. The only things I knew were how to use excel to a certain extent and MATLAB quite a bit and a certain amount of OOP in C++.

Since I knew very few specifics of C++ that I had learnt myself for my research I had to understand C++ from the basics again so as to build myself to understand how C++ is used in Finance. I started off from a really basic “How to Program in C++” book by Dietel. It is a very introductory book. Because I had previously taken a course in C and done a decent amount of C++ I flew through the book pretty quickly. It was still valuable to go through the book as it gave me a refresher on a lot of the syntax associated with C++ and many other things that I might find useful in the future. Once I built a decent base, I started going through a book by Ben Van Vliet who is a professor at Illinois Tech. I figured since I will be using his book in his class I might as well learn from it. I also picked up one of Duffy’s C++ books, but have not got around to it yet as I am still going through Ben Van Vliet’s book on C++ for Financial Applications. In my first semester at Illinois Tech I am taking the first course in the Financial Programming Sequence which is “C++ for Quant finance” . The course starts from the ground and builds up through to the advanced topics in C++ for financial applications.

In addition to C++, I figured I will brush up on my MATLAB. I had only used matlab for engineering related problems and did not know how I can use it for in finance or what is even available in the toolboxes. I have all the toolboxes for MATLAB related to Finance. I picked up an amazing book and am half way through it. The book is “Numerical Methods in Finance and Economics”, and it is an amazing book on the use of MATLAB in Finance. If you read Hull’s book and then go through this book to understand how to use MATLAB for financial applications you will be very beneficial. The book goes through many commands and toolboxes that are available in MATLAB and how to use them for various financial problems. The book is used in an advance financial engineering course (Models for Derivatives) at Illinois Tech and I figured it would be great to get a start on it. I actually started getting really familiar with MATLAB and went as far as making a small algorithm for automated trading. I used MATLAB's built in system to output the program into a .NET file which I have been trying to put onto the API of a third party broker software. It is in a simulation version for the moment. The algorithm is self calibrating. It is really cool and I am proud of it, but I will talk more about it in a different post.

Regarding the other languages, one cannot learn so many languages in 4 months. I have noticed that it is all about practice. The more I utilize the softwares the better I get. I really want to have a strong grasp on the various programming languages as I want to have the ability to not only develop mathematical models but also code and implement them myself. I have had a sudden love/appreciation for programming and this is why I wanted to pick a curriculum where I can have exposure and knowledge of a range of programming software’s. This is a personal choice and not specifically for jobs. The Financial Engineering and Programming curriculum at Illinois Tech provides this for me by teaching me everything from Python, MATLAB,C++, C#, Excel/VBA, SQL, Pearl, .NET, etc. After spending a year using these languages during my Masters program I believe I will have a decent amount of understanding in the programming area to be able to use them for various applications. This is why I only focused on C++ and MATLAB as part of my preparation.

Items I used:
Other than that, I have been trying to spend as much time with my girlfriend and my parents since I know it will be very hard to do either once the program starts even if I am only a 4 hr train ride away. Also, I have been trying to learn to take power-naps so I can make the best out of the 24 hours available to be productive and not spend much time sleeping at night. This part has not been working out well. I want to be able to get by for the next year by sleeping around 5-6 hours at night and maybe taking 20 min power naps in the afternoon if possible. This might sound stupid, but I really think it might help me succeed in my program. (Insert laugh here)

Is this preparation enough? Only time will tell.
 
Hey Joy,
That's a pretty helpful post for people with either rusty or no background in fin/math/coding. Keep rolling out more such insights into your preparations...cheers!
 
It was a very good post bro. On a personal front, I come from a mechanical engineering background too. I had used Matlab for engineering purposes and also had C, C++ in my course ware during my first year of engineering alone.

Currently I am building on finance knowledge by preparing for CFA level I. It gives one a good idea about investments, portfolio management, corporate finance, financial statement analysis, derivatives and most importantly economics.

I am also working on my math skills by revising my Engineering mathematics. After that I plan to take it to the more advanced levels by going through stochastic processes and statistics for finance.

Regarding the programming component, I never used it all my life except during my first year and that too was to just clear the subject. So I am currently working on C and then I move on to C++. After that I plan to take C++ for Finance. I am also planning to give a read on numerical methods using matlab. As a business analyst, I use SAS at work, so I do not have to learn that for my program or in general.

By the way I am planning to attend Rensselaer Polytechnic Institute's Financial Engineering and Risk Analytics program this Fall. It is a one-year program with an opportunity of internship in the summer semesters. The programming component at RPI consists of C++, Matlab and VB. There are still 3 months to go before I start the program. I am all pumped up and want to make the most of the time I am here in India.
 
If you want to learn C++ well and fast for applications, I will suggest "Accelerated C++" by Andrew Koenig.instead of those thick books that discuss variables and loops first etc. It will bring you up to speed for coding applications and general good overview of it. Perfect for beginners.

Also your plan sounds good...but depends on what you plan to do, it might be too simplistic of a plan. If your intend is learn enough to able to just program something trivial, it's good plan. But if you want to be able to learn it well to be confident in it and delve in the world of commercial C++ coding (depending on what you are doing inside the company), it might be a different story. Also you might be humbled in an intense technical interview.Reason is that C++ in my opinion has a lot of dark corners that even people with 10 years experience might not know such as difference in what would happen to the pointer if using static_cast compare to reinterpret_cast on to a object that was multiple inherited from 2 classes, topics about the virtual method tables, and meta-template programming, which I never used, thou i heard it's powerful.

I used to have that 'simple' plan of learning C++ by myself, but after going into technical interviews and also coding in my work place, I realized what I learned was just the skin despite the fact that I know what a pure virtual function is, an auto_ptr and other stuff which I thought was advanced (compared to the point where I started from in learning C++ few years ago). Throw in Design Patterns which is really OO and then I realized I'm like a rookie again. lol.

Anyways, I'm also a MechE, but I somehow became a software engineer in a CFD company so I might be able to related. My 2 cents, can take it or leave it.Also learning a language and apply it to really code something from scratch are 2 distinct things I realized. A person can know all the stuff about the language, but when you tell them to write a small program or algorithm, they will have a hard time in the algorithm part. I seen it happened =).

This in my opinion makes all technical interview who questioned the language knowledge to be a bit flawed. But of course, I say a bit flaw because at least you know the language to move on to learn the real coding. Anyways, I'm rambling.
 
bwc
Thanks for the reply. I am trying to build myself up to be able to program extensive mathematical models in C++. As I mentioned, I am basically "refreshing"/"learning basics", at the moment before I start my graduate studies in Summer (may 2010). I will be taking a C++ for finance course this summer, and then a Algorithmic Trading related C++ course, and a Computational Finance C++ course. At the end of my program next year I will have 9 (3 courses) graduate level credits in extensive C++ programming.
In addition some of the other courses also have a bit of C++ here and there. I think after the 3 intensive and rigorous courses with dedicated OOP in C++ I will be able to apply myself to some advanced programming. The last two courses involve projects, which will be helpful.
As you mentioned, people with 10+ years also are confused at times on certain topics related to C++ programming and I am sure 3 graduate courses will not make up for that. I do think I will be able to get by some of the technical questions asked in interviews with the knowledge, or at least I am hoping to. I recently gave an interview for a firm in Toronto where they asked me to code an algorithm in C++ for a mathematical question they had asked. I was unable to take the offer as I am moving to Chicago, but it was nice to have an exposure to the interviews asked in financial programming field. Also, I made/tweaked a few programs for CFD as I mentioned to link onto Fluent 6.3 for boundary layer problems related to airfoil aerodynamics. I was trying to get a transitional flow at the boundary layer and turbulent in the rest of the area and had to customize the Spalart-Allamaras model offered by Fluent to my needs.
I don't neccasarily want to be a financial programmer although I am not ruling out that option. I want to keep myself open to all forms of quant positions available whether it is in Research, Programming, Trading, etc. This is why I am taking a good balance of advance math and programming courses so I have the perfect balance in knowledge in building/reviewing mathematical models and being able to code the same too.
The book you recommended looks EXCELLENT. I just put the copy on hold at my university so I can go get it and go through it before my semester starts in a month. I wish I was recommended such a book earlier on this year. Thank you for the extensive reply. It was very informative. Feel free to send me an email as it seems we have similar interests...or at least have emerged from similar backgrounds.
 
If that is the case with mathematical programming, I think those rigorous course should be good enough (disclaimer as I only did a few math programming).. I was initially referring to building frameworks, 3d plotting and design of software applications which design patterns come into play. I heard Deign Patterns is also applicable for finance.. but not sure the extend that they use. Fluent 6.3...hahah.. The company I'm working in is Fluent's biggest rival. But I'm not doing much CFD stuff. But anyways, after that accelerated C++ book, there is a C++ Common Knowledge and then Scott Meyers books.
 
I just got back from a presentation from the SAE World Congress in Detroit on my CFD research paper, and two Fluent(Ansys) competitors approached me regarding using their software for future use and building some aerodynamics tutorials.. I don't think these are the biggest competitors...but.. they were from... Adams, and CD Adapco... I wonder if you work for one of those... lol I had to say no them obviously since I am not in that field anymore.
 
Haha. Yeah. CD Adapco is huge. My university had set up a special discounted system with them to use it for all the student projects. I was the only odd one out to use Fluent. Everyone else at my university uses CD Adapco. They have a big office out of Michigan I think, so it's convenient for us if anyone needs help.
 
bwc: Kindly look at my plan for preparation of MFE and give a suggestion. Thank you.
On a personal front, I come from a mechanical engineering background too. I had used Matlab for engineering purposes and also had C, C++ in my course ware during my first year of engineering alone.

Currently I am building on finance knowledge by preparing for CFA level I. It gives one a good idea about investments, portfolio management, corporate finance, financial statement analysis, derivatives and most importantly economics.

I am also working on my math skills by revising my Engineering mathematics. After that I plan to take it to the more advanced levels by going through stochastic processes and statistics for finance.

Regarding the programming component, I never used it all my life except during my first year and that too was to just clear the subject. So I am currently working on C and then I move on to C++. After that I plan to take C++ for Finance. I am also planning to give a read on numerical methods using matlab. As a business analyst, I use SAS at work, so I do not have to learn that for my program or in general.

By the way I am planning to attend Rensselaer Polytechnic Institute's Financial Engineering and Risk Analytics program this Fall. It is a one-year program with an opportunity of internship in the summer semesters. The programming component at RPI consists of C++, Matlab and VB. There are still 3 months to go before I start the program. I am all pumped up and want to make the most of the time I am here in India.
 
@Rich.. LOL. Although it seems like I'm giving advice on preparing MFE, I am actually not. Also note my disclaimer inside the details. Also inside the details of the entire post, my advice is only mostly regarding learning C++ and also what you plan to do C++ with it.

If it's software engineering of building commercial applications or even building trading software application (not Quant stuff) for traders, just learning it on your own might or might not get you a job (an entry-level maybe) because of the technical interviews companies give which some will throw in dark corners of the language to test your depth. But if you're doing math computations, which I also had done some, it doesn't seem to required as deeper dark corners with objects as much as I thought (but will need to know type promotion and trick questions like what printf("%d",1.2) with give. But building maintainable, extensible software framework might require more indepth knowledge... which might also mean financial library framework..because it's still a framework.
 
I can't give much suggestion in regards to MFE because what I hear are just hearsays. But I can give you a suggestion on the programming side. I know that C++ is what will be use most likely due to the ability to go to lower level to manipulate to speed something up (happened at my work place). Now,I don't know if you are learning C so prepare for C++ or just want to. Most people and I will suggest learning C++ and forget about C if you are trying to prepare for learning C++.

Regardless of whether you want to learn C or C++, I will suggest this old book "Pointers on C". There are some stuff in it that catches me by surprise when I thought I knew my C programming in the past. I also notice this guy who's been programming earlier than I made a mistake that was mentioned in the book and cause the program to crash later..(actually worst, randomly..similar to a time-bomb)

Anyways, This is what I realize ...for me anyways.. knowing the C stuff made me have a better indepth understand of how the language (C and C++) really works, but knowing C++'s OOP stuff made me have a better understanding of how to design of a software framework/architecture/infrastructure. There's a deeper meaning than what I just said, but It's a mentality shift and make you a better developer.

Now regarding Matlab.. have you also read this book by Ernie Chan? - Quantative Trading. He was a Quant and now working for himself. He uses Matlab all the time for his models. On a side note.. one thing that I was surprise to find out is that he said the more complex the model with neural networks and stuff, more more money it loses or something like that. The simplest model is the one that makes the most money. I was going to develop my own on the side, but due many variables, it's just left hanging for now. anyways, I'm rambling again. good luck.
 
bwc
I think he was talking to me? lol
@Rich
As you see in the last statement...I am merely pointing out what I AM doing as preparation... Will it be helpful ? Only time will tell. I have built the preparation plan for myself after talking to my program director, professors, and several MFE graduates. I think it holds a little bit of credibility. The general consensus has been that it is a good preparation plan. If you feel otherwise please suggest alternatives. I am sure the readers would love to hear your point of view.
 
I can't give much suggestion in regards to MFE because what I hear are just hearsays. But I can give you a suggestion on the programming side. I know that C++ is what will be use most likely due to the ability to go to lower level to manipulate to speed something up (happened at my work place). Now, I don't know if you are learning C so prepare for C++ or just want to. Most people and I will suggest learning C++ and forget about C if you are trying to prepare for learning C++.

Regardless of whether you want to learn C or C++, I will suggest this old book "Pointers on C". There are some stuff in it that catches me by surprise when I thought I knew my C programming in the past. I also notice this guy who's been programming earlier than I made a mistake that was mentioned in the book and cause the program to crash later..(actually worst, randomly..similar to a time-bomb)

Anyways, This is what I realize ...for me anyways.. knowing the C stuff made me have a better indepth understand of how the language (C and C++) really works, but knowing C++'s OOP stuff made me have a better understanding of how to design of a software framework/architecture/infrastructure. There's a deeper meaning than what I just said, but It's a mentality shift and make you a better developer.

Now regarding Matlab.. have you also read this book by Ernie Chan? - Quantative Trading. He was a Quant and now working for himself. He uses Matlab all the time for his models. On a side note.. one thing that I was surprise to find out is that he said the more complex the model with neural networks and stuff, more more money it loses or something like that. The simplest model is the one that makes the most money. I was going to develop my own on the side, but due many variables, it's just left hanging for now. anyways, I'm rambling again. good luck.
 
Hi guys..
Im looking to do MFE in USA.. I like math a lot.. But I think programming in C++ is my cup of tea.. Initially I thought that a basic programming knowledge is sufficient for this course.. But after going through this blog I am scared :) Could someone clarify to me if deep programming skills are a must? Or are there any post MFE options which concentrate more on Math and less on programming?

PS - I've done my B.E in Information Science, India. (But i'm not very fond of programming. Love math!!)
 
Hi Andy,
Thanks a lot..But how do i know which are the programs where programming is of secondary importance?
 
I would do the following
1) Take a look at the content of the program, see if they have any dedicated course for writing financial application
2) See which programming languages are used in the courses. Normally, VBA/Matlab/Excel/SAS are often signs that they aren't really hardcore when it comes to programming. If you don't see C++ anywhere, it's also a sign.
3) Read the reviews of each program on quantnet.com. They often have a section about the programming component.
 
Back
Top