Always use oversampling. The results without oversampling can differ by more than 50%, but this is due to a statistical fluctuation because you have less data.

A heavy difference by changing the WFO steps by +/-1 hints that the number of cycles or the DataSplit value is not good. Most likely, either the test period or the training period is too short and does not contain enough trades, so the results are random. Modify DataSplit and cycle number until the result stays relatively stable on small changes.

I also forgot in my above code something important:

if(Train) Mode |= SKIP1+SKIP2;

You need to reserve 1/3 of the training period for Kelly factor generation. Otherwise, the Kelly factors are generated from in sample data, which causes bias. They should be generated from out of sample data.

In life trading, you must indeed make a new optimization after every slice, but you don't need to stop. Zorro detects when the parameters are updated and continues with the new parameters.