My opinion is using more data for training is good because shorter training periods are more likely to result in overfitting. But using real money without having a testing period seems risky. I wrote something related to this area in this post.I wanted to see if systems trained on more recent data have any advantage over systems trained on older data.
So I split my data into parts:
1. First training part: years 2008-2014
2. Second training part: years 2009-2015
3. Third training part: years 2010-2016
4. Fourth training part: years 2011-2017
5. Fifth training part: years 2012-2018
6. Control training part: years 2008-2018
And the last part:
Testing years 2018-2023 for out-of-sample test.
Then I trained/created population of systems on each training part. As soon as I had 50 decent systems on each part, I stopped the training and tested those systems on out of sample years.
After executing system on out of sample years I had 50 values like profit factor, information ratio, final NAV and more. Then I did Two-Sample T Test to check if there is any significant difference in out-of-sample performance between different populations and the population trained on the control years.
I was a bit surprise to see that there is no big difference between means for any metric (So in other words, there is no reason to reject null hypothesis that means of populations are equal). The only funny thing was that system trained on most recent years (2012-2018) performed significantly worse on out-of-sample years than others (but still profitable).
This gave me some food for thought. First of all, this process works well enough and finds systems that usually perform well on out-of-sample. Also, it doesn’t really matter what years I use for training. So I’m going to change my systems to those trained on 2008 – 2024. That is, there will be no testing period and I will be using fresh data to update systems’ weights and maybe also reject systems that break down.
Any thoughts?
Interesting. You mentioned some good anti-overfitting tricks, here is one more: pretend some signals didn't happen (randomly). I also sometimes change prices randomly by some small percentage. A system needs to be resistant to such randomness.
Those are interesting ideas. I think I've read about adding noise to inputs but never tried it -- maybe I will in the future. I'm not so sure about ignoring some of the signals during training.Interesting. You mentioned some good anti-overfitting tricks, here is one more: pretend some signals didn't happen (randomly). I also sometimes change prices randomly by some small percentage. A system needs to be resistant to such randomness.
It's safe to say that all my systems are traded without checking on a testing period - I won't remove a system because it failed. Instead I will change the process to have fewer such systems next time I run training. Also, I noticed such systems were worse-than-average on training data and therefore will have lower weights.
System 618370572 bought 13636 shares of CFI at 0.222
System 2813552119 bought 6637 shares of KCH at 0.45
One other thing I've added recently is sometimes randomly ordering the input records. The fitness function in my system uses a variation of the Ulcer Performance Index which depends on the order of the inputs. I think training on randomly shuffled input records might also help avoid overfitting.
It seems the your system is choosing penny stocks, some of which are thinly-traded.