Quote from directionless:
I voted C#, but in reality (for retail trading) I tend to use C++/CLI and C++. The reason I bring up C++/CLI is because it is functionally equivalent to C# in terms of how it works with the .NET framework. In your case, however, you should consider C# if only as an introduction to .NET. The key here is .NET. The nice thing about .NET is that you can switch languages as you please -- you can write a class in Python, then inherit from it in C#, and then further inherit from that C# class in C++, all seamlessly, to the point where the languages all serve you with their respective strengths. If I'm not mistaken, even Java can run on top of .NET and play-well with other languages.
As an example, I took old python scripts and converted them to run overtop of .NET, so now "quick and dirty" scripts are smoothly integrated into a more complex framework. If the binaries are compiled such that they are not "mixed", they can run in Linux as well.
I generally agree with the sentiments presented on C++, but thought that I'd mention that you don't need to know the full capabilities of the language to program effectively. There are some features which are practical and others that are not quite right. As an example, you may or may not want to use RTTI, or exceptions, and so on.
Many will disagree with my opinions, but the reason C++ is my dominant language is because of templates. People say it's difficult to debug, but I find the ability to get optimized, compile-time code with templatized-parameters essential for flexibility and taking old designs forward with new features.