This will print a PNL that is correct, and a Strike rate that isn't correct.
For example, in the attached sanity check plot, there isn't a single unprofitable trade, which is also in agreement with the output in the strategy (I can attach if needed).
However, according to the Trades observer, strike rate from TA is reported as 62.5%. (won=5/lost=3).
So then this makes me question my Sharpe and SQN analysers as well.

I should mention that I have self.set_coc(True) in the Strategy, which explains why the first trade is profitable: Buys at 3rd bar close, and sells at 4th close.
I.e., shift red and green arrows 1 to the left.

Fair point.
Full minimal example below.
It seems the issue(?) is with commission. The TAAnalyser seems to take it into account, the Observers (specifically Trades) does not.
You can test this by enabling and disabling commission. With commission=0%, the Observer and AnalyserStrikeRate match, with commision!=0%, they do not.

So then the question: Is there an easy way to get Observers (or is it just the Trades one where this happens?) to take into account commission?