rectangleThe world's leading A.I. powered trading network
PlatformPremiumCompanyContact Us

Volatility Standardizing

Leave a comment

In our last article we talked about how to diversify the portfolio using the risk parity algorithm and proved its effectiveness. Remember, risk parity model has allowed us to divide the capital between different assets in such a way that each chunk has the same ‘risk contribution’. However, risk parity has no control over the risk of the total portfolio. This is the problem we are solving in this article.

Since we are mainly concerned with Forex and CFD trading — it is a leveraged product and the total risk of a portfolio might be controlled by the choice of the multiplier factor. We can multiply the weights produced by the risk parity model by any number (that respect the margin requirements) and the volatility of the resulting portfolio changes by the square root of the multiplier.

The value of the multiplier can be estimated by specifying the target volatility that we want to have in our portfolio based on the past returns.

The problems we are facing

  1. We’re not controlling the volatility of the risk parity portfolio.
  2. The volatility of a portfolio differs from month to month.

The reason for the second problem is clear: different months will have different trading activity with December being the least active month because of the Christmas holidays.

So, in this research, we are mainly dealing with this “month issue”.

Our idea is that we can estimate the monthly multipliers using information about top 100 PsyQuation’s traders namely to create a variety of different random portfolios from these accounts, investigate how their volatility varies from month to month and find dependency between them.

A bit of research

Our empirical analysis is based on a 1-year time series of 15-minute top 100 PsyQuation’s traders returns from January 1 2017, through December 31, 2017. 2017 is the last completed calendar year for which we can investigate selected accounts each month.

We have formed differently sized portfolios with these accounts and the first point we examined is how volatile performances of portfolios are at different times of the year (in percents). We see that portfolio volatility is really different every month.

volatility for each month

Our goal is to find how the returns of one month depending on the returns of the three previous months, that is, to find some relative “volatility” coefficient.

This can be done by the following algorithm:

   M - list with month identifiers,
   A - identifiers of selectedaccounts (top 100 PsyQuation's traders in our case),
   S - list of portfolio sizes to investigate
result ? []
for each month in M:
   C ? [] (initializing empty list for all coefficients in this month)
    for each s? in S:
          for i = 1 to 100: (repeat following steps 100 times)
               P ? random subset of set A with size s? (select random portfolio of accounts with certain size)
               weights ? risk_parity(P) 
               (calculate weights for accounts in composed portfolio using risk parity alghorithm)
               std_old ? portfolio volatility over the last three months
               std_new ? expected volatility for the next month
               C ? C.append(std_new / std_old) (appending obtained coefficient value)
     coef ? median(C) (coefficient value for this month)
     result ? result.append({month: coef})
return result

During calculations for each month, we obtained the list C with coefficients for each portfolio and the question arises: how to choose the one monthly value?

On the next figure is shown a histogram of all coefficients calculated for portfolios in January 2018.

We can see a long tail on the right and the values of the coefficients that got there don’t satisfy us, because we try to find dependence, that is, the value that is the most often occurs, and in the right tail only a small number of exceptions are concentrated due to the fact that our portfolios are random.

Significantly more frequent are the values of coefficients, closer to the median of all the coefficients obtained. Therefore, we calculated the monthly coefficient as the median of the resulting set of coefficients for every month and got the following values:

coefficients for every month

Dependence on the portfolio size

We described our algorithm. There we noted that we were investigating portfolios with different sizes. However, the question immediately arises: does the size of the portfolio affect the value of the obtained coefficient?

In order to check it out we calculated the coefficients for different sizes of portfolios: from 5 to 50 accounts. We need to determine how much the value of the coefficient changes when resizing the portfolio.

Let our unit of measurement be the value of the coefficient with the size of the portfolio equal to 5.

The results for February, April, May and September are shown in the diagram. When we change the size of the portfolio, the ratio doesn’t vary greatly.

Dependence on the portfolio size

Calculating volatility coefficients in practice

To standardize volatility we propose the following approach:

  1. Determine what volatility we want to get (for example, 1%) — estimated volatility (v_e).
  2. We need to calculate volatility of the portfolio for the previous three months — realized volatility (v_r).
  3. Multiply the volatility over the three months by the volatility coefficient for this month (c_m) obtained earlier: c_m* v_r
  4. Get a multiplier as a result of the division of expected volatility by the result of step 3: v_e / (c_m * v_r).

Let’s check in action!

So, let’s check the standardization in practice. We used the best PsyQuation’s accounts to form allocation. First, we launched backtest without volatility standardizing, then with standardization. Expected volatility is set to 2%. Got the result:

non-standardized (blue) and standardized (yellow) volatility

The graph shows monthly volatility of a portfolio without standardization (blue) and with standardization (yellow). We can see that in many months we have received the desired result — volatility has the expected value, or slightly less. Something went wrong in March. However, it also has an explanation: the monthly multiplier depends on the volatility of the three previous months. For three months before March volatility was too large therefore standardized and non-standardized volatility on the barchart above are very different.

Therefore, for March multiplier was much smaller than for other months to “balance” the volatility, because the portfolio was very volatile until March (market activity increases after the December holidays). We also need to remember that such deviation may appear not only due to the selection of accounts in the allocation but also due to the randomness of relative returns.


So, volatility isn’t exactly the same as expected, but our algorithm regulates it very well. As mentioned volatility became very close to the target, we can say that we have proved our methodology. 

Thanks to Vladimir Krouglov.


AxiSelect 2.0 New rules OFSi