Again, I’ve made some more changes to my software and how systems are generated.
First change is about systems’ names. Random number was fine, but now I decided to encode some information about a system in its name. From now on, a name consists of:
1. Creation date in format YYMMDD,
2. Computational capacity (similar to degrees of freedom according to Rob Pardo’s definition). This is a number of data points that a system is looking at. For example, a SMA 200/50 cross system would have computational capacity = 252 (200 closes + 50 closes + 2 for rules). Shorter average is contained within the longer but with the current implementation I can’t recognize this. Also, this is kinda pessimistic value. It’s possible for a rule to be like “condition1 or condition2” where “condition2” is always false. In this case, data points aren’t really consumed by condition2, but it’s a limitation of my implementation now. My total in-sample data consists of around 6 million data points and I want my systems to consume less than 5% of this.
3. Exit type. Possible exits are:
“B” – just a normal graph (tree) branch that needs to return “true” to give a signal
“SL” – stop loss
“TP” – take profit
“SLTP” – both, whichever happens first
“BN” – bars number (i.e. how many days the trade is opened for)
“notE” – no special condition for exit, instead the system will exit position when entry condition is no longer met
Names are completely irrelevant, but it will be fun to watch how systems change over time. Also, an interesting observation: all found systems are either B or BN exits, only one notE. BN exits were discovered more often than they should (I.e. probability of selecting BN exit was around 5% but over 20% good systems had it. I now increased probability of selecting a BN exit). No SL and/or TP systems perform well enough.
Another change is that now I look at a system’s score on out-of-sample data. So a system has to give very good results on both parts of in-sample data (2008-2013 and 2013-2018) and also out-of-sample (2018 - …). Only then its signals are considered.
The last change is about trading: I now enter and exit trades with limit orders where the limit equals the last close. This improved all metrics (like profit factor, expectancy, final account value) but it also made finding systems a lot harder. So now I’m down to 127 systems. Old systems were removed but majority of their positions where taken by the new systems.