No specific ideas for improving the results, but here are some thoughts.
I've personally not had good success with the stocktwits data set. There may be some alpha in the data but I haven't found it. Just using the 'bull_minus_bear' field hasn't yielded much in my experience. There may be some classes of stocks which this signal is more predictive. Perhaps large stocks or (for that matter) small stocks. I've also thought of using the price trend in conjunction with the stocktwit trend (eg both going up or both going down) as perhaps a better indicator. You may want to try some combinations of these. I ran your algo without the stocktwit factor (just backtested over a couple of years) and it seemed to do better than with it.
Another, idea is your use of 5 day returns. Your algo seems to bet on stocks reverting to some sort of 'mean'. Long stocks that have gone down and short stocks which have gone up. The problem with this simple approach is twofold. First, there is a whole other school of thought which says 'don't fight the trend'. Second, maybe use some other indicator to tell how a stock is moving. What I mean, perhaps the stock was already at a high and the reason it took a big dip (or jump) was that it was already reverting to a mean. A big jump in itself doesn't really say anything about if it's moving toward or away from a 'mean'. One simple thing to try is to choose stocks in the the top or bottom say 2% rather than 10%. These would be the very big movers and are usually over-reactions.
Finally, maybe consider grouping the ebit and roe values by sector before doing the zscore. Different sectors have very different expectations and averages of earnings and return on investment. I've always found it best to compare these within like companies.
I did try setting the commissions and slippage to zero and the results were about the same so high turnover (ie high commissions) doesn't seem to be an issue.
Good luck!