A Simpler Way to Calculate WorldQuant 101 Alphas
Tags: tutorial, beginners, coding, programming
Published: 2024-02-20 02:15:37

The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation.

Take the calculation formula of Alpha#98 for example, and the data we use is the daily data from the New York Stock Exchange.

```
Kakushadze et al 2015 Alpha #98: 
(rank(decay_linear(correlation(vwap, sum(adv5, 26.4719), 4.58418), 7.18088)) -
rank(decay_linear(Ts_Rank(Ts_ArgMin(correlation(rank(open), rank(adv15), 20.8187), 8.62571), 6.95668), 8.07206)))
```
This formula involves both cross-sectional data and time series data, and the calculation uses nested functions with up to 6 levels, which is extremely difficult to implement in most systems.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hrvpwaxo0fvgb5r9vjei.png)

calculation formula of Alpha#98

We can significantly reduce the development cost of complex calculations such as Alpha#98 by using DolphinDB’s built-in functions with panel data (in matrix form).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m16glc7nappfgvcw0zji.png)

code of Python
⬇️

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nyauod9mxs7husineuu5.png)

code of DolphinDB

Why is DolphinDB’s code so concise and elegant? 😲

On the one hand, using panel data provided by DolphinDB to implement the Alpha#98 factor simplifies the calculation logic and makes the code very precise. Panel data is a matrix that combines cross-sectional data and time-series data.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hyg1a2ff8xwxemabb1v5.png)

DolphinDB panel data

On the other hand, DolphinDB has more than 1,500 built-in functions and many of them are optimized. You can implement all 101 alphas with DolphinDB built-in functions.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k33928p06yzaldewtfst.png)

DolphinDB built-in functions

Let’s take a look at DolphinDB script, which is very similar to the original formulas.

```
def alpha98Panel(vwap, open, vol){
    return tsRank(mavg(mcorr(vwap, msum(mavg(vol, 5), 26), 5), 1..7)) - tsRank(mavg(mrank(9 - mimin(mcorr(tsRank(open), 
    tsRank(mavg(vol, 15)), 21), 9), true, 7), 1..8))
}
```
Run the script, and it only takes 986ms to generate a matrix with 7,162 columns and 252 rows and calculate Alpha#98 with the matrix.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hqkfk861dqky7kvx1wbt.png)

time cost in DolphinDB

Furthermore, DolphinDB supports unified stream and batch processing. It provides the streamEngineParser function to automatically form a pipeline of stream engines to carry out the specified metrics calculation. You can directly use the Alpha#98 function as the metrics, with no need to modify the script for metrics calculation.

Click the demo below to get more info! 
https://youtu.be/B0lYBAI_FEc

Thanks for your reading! To keep up with our latest news, please follow our [Twitter](https://twitter.com/DolphinDB_Inc) and [Linkedin](https://www.linkedin.com/company/dolphindb/mycompany/). You can also join our [Slack](https://dolphindb.slack.com/join/shared_invite/zt-1e9w27dfl-3W2hYVIU4~HTfhCF4pE1Dg#/shared-invite/email) to chat with the author!

Feel free to check our [website](https://dolphindb.com/) for more information!