In this post I want to show how to build a basic swing trading system. Furthermore I want to document my thought process behind the various elements as well as introducing some new ideas. As all of my posts, this post has also a primary objective: answer the question how TSI can be used in combination with other indicators such as RSI(2).
Let me clearly state that I do not trade this system outlined below, though i use some of the principles. Anyhow, I believe for many of you this could be a good start..
- The system should be traded end of day (as many readers of this blog have another job).
- Emotionally easy to trade: long-only trading and a high number of winners!
- Attractive risk-reward: buy into short-term weakness, sell into strength.
- Use money management to improve performance.
The system will be tested on the German DAX (cash index). I simply use the DAX because in previous TSI related posts I’ve focused on the NDX100 index as well as stocks. The principle of the system will also work on other stocks or ETFs, but it might be necessary to slightly adapt it.
I like to have multiple (different) trend filters in a system. Because this way I’m not relaying to have found THE best trend filter. So let’s stick with the close above the average of the last 50 days or a rate of change of the last 150 days greater zero. There might be other options to defined a market, but that’s not the point of this post. I want you to make aware to think of multiple alternatives with different periods.
Buy into weakness and sell into strength.
Short-term weakness can be identified in a number of ways: price movement from recent high, number of bars bellow a moving average or a specific indicators value (RSI / DVO). For simplicity reasons i’m going to use RSI(2).
Let’s set the baseline.
Based on this we can already build a system skeleton and set this as our initial benchmark to compare with for further improvement.
All trades are taken close / close (= end of day). Trades are closed once RSI(2)>50. Position size is defined as 33% of equity. Position size of open trades can be increased (=scale in) in case an additional entry with a lower entry price is given. I’m doing this for two reasons: 1.) not to rely on the fact to have found the single best RSI entry value and 2.) to get more trades as I start with a smaller position size and can therefore take trades earlier (=higher RSI(2) value) as my risk is reduced.
There are two RSI entry values to be identified. The first one is the entry value for trading when the trend condition (Close>MA50 or ROC(150)>0) is meet and the second RSI value is the one for trades in case our trend condition isn’t meet.
Let me show you two very different outcomes
a.) High CAR, low system quality numbers
b.) Lower CAR, high system quality numbers
What’s the take away from this? Lower RSI entry values produce higher quality trades while reducing the opportunity (=number of trades) significantly. You probably knew that already. Furthermore youcan see that trading against the trend filter is less attractive than trading with the trend (from a high level perspective). Again, this is just the initial benchmark.
Let’s bring TSI into the game.
TSI is an indicator described here. The idea is to have TSI to help define if the market is in a trending environment. So let’s define a TSI > 1.65 as trending vs non-trending. So in total we have a matrix of 4 RSI entry values:
Long condition is given (Close > MA(50) or ROC(150)>0)
- RSI1: TSI>1.65
- RSI2: TSI<1.65
Long condition is NOT given
- RSI3: TSI>1.65
- RSI4: TSI<1.65
As time and words are limited on this blog I will come up with the best setting and results right away.
The entry values make a lot of sense. Higher values (=earlier entry) when the market is in an uptrend (=True) and lower values (=later entry) when the market isn’t in an uptrend. Furthermore we have consistency in TSI separation. High TSI = earlier entry, low TSI = later entry. Looking at the key performance indicators you can see an improvement on absolute returns as well as risk adjusted returns. That’s what we expect from introducing additional complexity to a system. Furthermore the principle is sound and has been tested in other markets as well.
But hold on, we aren’t done yet!
In part two of this series we are going to look at the exit which is as important as the entry. Furthermore i will post the source code.