The real reasons for using C++ over C# in trading houses aren't really touched in any of the other answers. Some are flat incorrect.
The first, most important reason is that C++ has been around a far longer time than C#. That's much like COBOL. There's many millions of lines of COBOL still used in banks and government that was written in the 70's and 80's because the cost of totally rewriting it in C, C++, Java, or C# doesn't make sense. So, many companies keep legacy code around nearly forever. Most of the answers here came from "techies" (like you and I) who are rarely the decision makers. Unfortunately, it's non-techies, managers who decide these kinds of things and often for totally non-technical reasons. Ever read Dilbert?
The second most important reason is the reliability of the Operating System. Traders need reliability even beyond speed. Windows Servers notoriously crash frequently, need regular rebooting, whereas the *nixes can run for many months without stopping. Many of these firms trade markets around the world so they dislike any unexpected downtime. Since the trading firms run all their systems on *nixes, they tend distrust Micro$. Yes, of course, you can use C# on Linux on Mono but that's not nearly as exciting for various reasons.
Performance? I'm the author of a C# trading application that performs faster than most trading apps written in C++ and I did it in C#. How? Unlike Java, C# has an "unsafe" mode so you can do C++ style code with pointers for performance.. Plus you can use C++ style structs which is the most important aspect of performance. For critical code, you manage your own memory in C# just like C++ by preallocating so you never need garbage collection when running real time. C# can, in fact, even run faster that C++. It's been tested and proven. How? Why? Read on. Plus, it's really nice programming in C# over C++ for all the non-critical path parts of the code. Why? It's because of all the tools that are available and easily created like Unit Testing and others due to the "reflection" ability of C#.
You can only definitively say whether one is better than the other if you actually compare the machine code generated by both for the same piece of code and do micro benchmarks as comparisons.
CONCLUSION
The reasons for C++ over C# are business reasons. Interestingly my company has trading fund and bank customers using C# for trading system development based our platform, TickZoom which is also in C#. So why are they using C#? Again that's a business, not a techinical decision. These particular managers of these trading funds and banks are new-comers to the high frequency automated trading world. So they don't have any legacy code. Therefore, with a clean slate they can make different choices.
So how do they arrive at C#?
As a business decision, good C++ developers are very, very expensive. Plus the manager read reports from business mags who show that time-to-market of C# apps is generally faster than comparable projects in C++. So some businesses will tend to look at C# since it can perform and there's a larger developer pool.
NOTE: Some people experiment (like I have) with taking certain pieces of code and writing them in C++ as libraries for C# to use to get faster performance where needed. However, those efforts have always been proven that somebody can tweak C# to go equally fast so it becomes easier to just do it all in native C#.
Just to qualify this answer, I have worked for 25 years as a real time and network programmer using C, C++, Java (mostly web stuff), and now C# approximately 5 years with a few years in other languages like Assembler, COBOL, BASIC, Pascal, etc. My experience has been in communication networks, phone networks, banking systems for high speed imaging, high frequency trading, and more.
Having coded in C++ and C# for equally long periods of time, it would be painful to return to C++ because I feel forced to deal with low level issues in the language which allows for speed but create complexity in parts of the app where speed is of no concern. <-- That's the majority of the app, actually.
Plus, there a no tools really nice as JUnit or NUnit of PyUnit in C++ for automated unit testing. I can't even imagine programming the old slow poke way of code and fix without automated unit testing, mock objects, and such which are necessary for "agile" development.
What I do admire about C++ is how much money the programmers make are are strong in the system and real time programming fields! That's for sure. But I do alright with my own company now doing high performance C#.
Sincerely,
Wayne