I understand that stocks' returns are not normally distributed. However, is there any method that we can rescale the stocks' returns so they look more like normal distributions? I managed to find a paper talking about this: L. C. G. Rogers: *Sense, nonsense and the S&P500*, Decisions in Economics and Finance (2018) 41:447–461 https://link.springer.com/content/pdf/10.1007/s10203-018-0230-3.pdf where the author rescaled the SP500 returns as follows: [![enter image description here][1]][1] [![enter image description here][2]][2] As you can see, he managed to scale the returns on the extreme periods (for example Black Monday 1987) to look more like normal distributions. I tried to replicate this method using Python using the same parameters as in the paper with K = 4, Beta is 0.025. N was not specified but I chose N to be 100. [![enter image description here][3]][3] ```python SP500['returns'] = np.log(SP500['Adj Close']/SP500['Adj Close'].shift(1)) SP500['returns_sq'] = np.square(SP500['returns']) SP500.loc[:, 'vol'] = 0 SP500.loc[:,'Vol_rescaled_returns'] = 0 K = 4 Beta = 0.025 SP500.loc[101,'vol'] = np.sqrt(SP500.loc[1:101,'returns_sq'].mean()) for i in range(101,len(SP500)-1): Y = max(-K*SP500.loc[i,'vol'],min(K*SP500.loc[i,'vol'],SP500.loc[i,'returns'])) SP500.loc[i+1,'vol'] = np.sqrt(Beta*(Y**2) + (1-Beta)*(SP500.loc[i,'vol']**2)) SP500.loc[i+1,'Vol_rescaled_returns'] = SP500.loc[i+1,'returns'] / SP500.loc[i+1,'vol'] ``` However, my result is different from the paper, as shown below with significant negative returns on Black Monday around -16 while on the paper it's -6. Is there anything wrong with my code above? I have checked a few times but it seems quite straightforward or is there a problem with this method? Thanks a lot! [![enter image description here][4]][4] [1]: https://i.sstatic.net/yow6N.png [2]: https://i.sstatic.net/9L6DF.png [3]: https://i.sstatic.net/W8r5y.png [4]: https://i.sstatic.net/rWqET.png