Position Sizing XI- System Quality and Max Position Size
In this video presentation, which will be made in two parts, we will analyze the role the quality of a system has over how much risk we can have on trades, and compute the position sizes needed to avoid surpassing a desired max drawdown level.
It seems quite understandable that the system’s quality is directly correlated to the amount of potential profits it can deliver. What is less evident to many traders is it is also related to the drawdowns, and thus, to the risk amount it can withstand before drawdown goes below the trigger point beyond which a trader feels it is too much.
Measuring the quality of a system
To evaluate the quality of a system, we need to acquire a certain amount of past trades, so as to have enough data points to apply simple statistical tests. It is recommended to have a minimum of 100 trades, although as more trades are collected, the statistical results would be much accurate.
There are several ways to compute the quality of any system. The more common takes the ratio of the mathematical expectation (ME) over its standard deviation (SD) multiplied by the squar e root of n, the number of trades. This method’s results, though, vary with the n. For the purpose of evaluating the performance of trading systems, it is better just to take the ME/SD ratio and multiply it by ten. This is the method proposed by Van K. Tharp, which he calls System Quality Number (SQN)
SQN = 10 x ME/SD
SQN makes the system quality evaluation Independent of the number of trades. The only requirement is to ensure a collection of at least 100 trades.
Normalising the data
Of course, for this method to have sense, the data collected has to be normalized. That means, all trades must be normalized to one trading unit, that is, all trades must be taken at the same position one lot ( or one mini, micro-lot). To further normalize it we should take the reward/risk ratio instead of the raw profits.
Let’s say we have a list of trades, made using the same position size. Thus the collection can be normalized with the following Python code:
loss = [ x for x in trades if x < 0] # the collection of all losing trades avloss = -np.mean(loss) # taking the average of loses ( sign changed) norm_trades = [trade/avloss for trade in trades]
Now, we have all trades normalized for the application of the average and standard deviation. Furthermore, the average obtained will reflect the expected one-dollar-risk average profit on every trade.
Position Size and Downside Potential
in our previous videos on position sizing, we have already shown that all things being equal, the position size is what determines the max drawdown of a determined sequence of trades. Being capital preservation the primary goal of every trader, knowing how much downsizing will deliver a specified system is critical to optimize the returns, but taking care drawdowns do not pass the psychological point beyond which the trader considers the system has failed.
Simulating a trading system
To generate a synthetic trading system of the desired quality, it is relatively simple in Python. All trading systems can be modeled by two parameters: The winners’ percent and the payoff, or average reward/risk ratio. To make it more standardized, we have set the percent winners in all the generated systems to 50%, modifying only the payoff.
We created nine systems with SQN figures from 1 to 5 in 0.5 steps. The first system is of low quality, but perfectly tradeable. In fact, we consider SQN 1 to be an average trading system. SQN 2 is already a very nice system. All systems beyond SQN 2 are great systems, and if by chance you own an SQN 5 type system, please keep it safe because it is a real gold mine.
The basic Python code to make 10,000 trades with 50% winners is:
t = np.random.binomial(1, 0.5, 10000) # Creating a random sequence of heads and tails
This is half the job. We need to add a payoff to complete it. In the case of SQN 1 this is the code:
payoff = 1.27 trades = [payoff * x if x > 0 else -1 for x in t ] # creating the W-L sequence
Please note that, even when we aimed at 50% profitable trades, the inherent randomness of the process resulted in only 49.09% of them profitable. Also, we used the same sequence for the payoff application and get the different SQN figures; this makes this analysis more robust, as only one parameter was changed.