I have written automated systems in all three languages.
First C++ is WAY WAY WAY overrated as a superior language. I am an old guy here and I remember when the Fortran people used to say, "oh that C++ will never be as fast as Fortran". Lo and behold it was and now the C++ people are saying the same thing.
With all that being said, the reality is as follows.
C++ is faster if you chuck the "safety" features of programming languages and avoid things like STL, and Boost. In raw bytes to bytes C++ is faster, but then again so is C.
The moment you add the baggage of STL, and Boost you are slower than well written C# code. The advantage that the C# JIT and Java jit have is that those safety features are well optimized. C++ safety features rely on the optimization of the compiler.
Thus if you are not careful with your STL, and Boost code you will have a lame duck of an application.
If you are not careful with your object references in C# or Java then you will also have lame duck applications.
Let me illustrate... We all know about OHLC (Open High Low Close) The classical object approach is to define the OHLC as individual classes and put it into a List<OHLC>.
THAT IS MEGA SLOW... In C# you need to define the OHLC as a struct and then create an array like the following OHLC. That simple step in itself has a massive speed up factor.
I personally would never touch C++ again. I would rather tweak and optimize my C# or Java code. My development with C# or Java is 100 times more productive than farting around with a dangling C++ pointer that causes a core dump.
If you plan on using C# or Java make sure to invest into a profiler like the one from Jet Brains. A profile will quantify what is slow code, and not be reliant on what you think is slow.