Our development process
Below is an attempt to, in an easy and understandable way, describe how our development is done. All algos you see on this site have gone through this process. The idea behind creating this process was to standardize our development to make it measurable and possible to adjust. By creating algos through the same process over and over again we can tune and adjust the steps to make it even better. We continuously make small improvements to the process to make sure it only creates algos that are robust; a prerequisite to be profitable in algo trading.
4 steps for success
Defining an edge or an idea, and enunciating the strategy including settings e.g. timeframe, index, stoploss
IS/OOS-optimization of the source code parameters using 60-70% IS and 40-30% OOS.
60/40 WF-test over 5 iterations. All periods must be over 50% WF-efficiency. Total efficiency over 80%.
Algos tested in demo for X trades or 10k bars before going to live, also for X trades or 10k bars*
*X = 5% of number of trades in backtest
Source code optimization
Walk forward testing
Demo, trial &
1. Strategy idea and alignment
The ideas for our strategies are rarely forced. Ideas come up in our free time, in the running track or in our sleep. All our ideas are noted and vaguely formulated for all of us to see. There are currently around 100 ideas waiting to be started. Most ideas are trashed before even reaching development.
We have an agile approach to our development and focus on stop starting, start finishing. Therefor we will never start with a new strategy before we have finished another.
In this step we look at the idea draft and try to translate it in to a profitable strategy. We do this mainbly through experience, we look at the nature of the entry and exit and try to figure the best way this idea could work in practice and for which markets and market phases. We try to keep the idea independent from specificites as far as possible in this step.
Frequent activitites in this step: deciding timeframe, market phase trading hours, stop loss range, target profit range, trailing stop type, keep or close weekend positions, etc.
2. Source code optimization
In step 2 we take the source code developed in step 1 and optimize it. We optimize it for maximum 70% of the bars for IS (IN-SAMPLE) and use minimum 30% of the bars for OOS (OUT-OF-SAMPLE). The IS period is carefully selected to make sure it covers multiple market phases. Most often we use 60%/40% optimization.
The gain curve in the OOS is not allowed to deviate more than X percent from the gain curve in the IS. The same is true for winrate and profit factor, they can't deviate from the IS period more than Y percent. In conclusion, the algo need to behave similarly in the OOS period as it does in the IS period to be accepted to the next step.
3. Walk-forward testing
In this step we run walk-forward test with 70%/30% samples and 60/40% samples for both 5 and 6 iterations. In order to be accepted to the next step, the algo need to achieve certain metrics e.g. all periods must have over 50% WF efficiency, the total efficiency of the algo must be over 80%, etc.
It's this process that ensures that all algos that go to the next step will generate returns regularly and over time. It filters out intermittent algos and algos that doesn't generate returns evenly.
4. Demo, trial and Live
Even though most bots have an OOS period leading up to the demo date, we choose to run the algo extensively in both demo and live. Before running the algo live we will run it in demo for 10 000 bars or at least 5% of the number of trades in the backtest. The result have to reflect the backtest in order to be started live with real money.
Before releasing it to our customers we will run the algo live with real money ourselves for an additional 10 000 bars or 5% trades. All algos will before release be offered to all customers for a month to be started in demo, or live for those brave enough. In summation this means that we have a 30% OOS period, 20 000 bars or 10% trades, and 1 month demo in live before we offer the algo for rental, ensuring that the algo is robust.