Matlab and Python Chapter 1. Financial Markets, Prices and Risk

# Chapter 1. Financial Markets, Prices and Risk

### Matlab and Python

Copyright 2011 - 2023 Jon Danielsson. This code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. The GNU General Public License is available at: www.gnu.org/licenses.

##### Listing 1.1/1.2
price = csvread('index.csv', 1, 0);
y=diff(log(price)); % calculate returns
plot(y)             % plot returns
title("S&P500 returns")

##### Listing 1.1/1.2
import numpy as np
import matplotlib.pyplot as plt
price = np.loadtxt('index.csv', delimiter = ',', skiprows = 1)
y = np.diff(np.log(price), n=1, axis=0)
plt.plot(y)
plt.title("S&P500 Returns")
plt.show()
plt.close()


##### % Sample statistics in MATLAB
mean(y)
std(y)
min(y)
max(y)
skewness(y)
kurtosis(y)
[h,pValue,stat]=jbtest(y);

##### Sample statistics in Python
from scipy import stats
print (np.mean(y))
print (np.std(y, ddof=1))
print (np.min(y))
print (np.max(y))
print (stats.skew(y))
print (stats.kurtosis(y, fisher = False))
print (stats.jarque_bera(y))


##### % ACF plots and the Ljung-Box test in MATLAB
subplot(1,2,1)
autocorr(y, 20)
subplot(1,2,2)
autocorr(y.^2, 20)
[h,pValue,stat]=lbqtest(y,'lags',20);
[h,pValue,stat]=lbqtest(y.^2,'lags',20);

##### ACF plots and the Ljung-Box test in Python
import statsmodels.api as sm
import matplotlib.pyplot as plt
from statsmodels.stats.diagnostic import acorr_ljungbox
q = sm.tsa.stattools.acf(y, nlags=20)
plt.bar(x = np.arange(1,len(q)), height = q[1:])
plt.title("Autocorrelation of returns")
plt.show()
plt.close()
q = sm.tsa.stattools.acf(np.square(y), nlags=20)
plt.bar(x = np.arange(1,len(q)), height = q[1:])
plt.title("Autocorrelation of returns squared")
plt.show()
plt.close()
print (acorr_ljungbox(y, lags=20))
print (acorr_ljungbox(np.square(y), lags=20))


##### % QQ plots in MATLAB
subplot(1,2,1)
qqplot(y)
subplot(1,2,2)
qqplot(y, fitdist(y,'tLocationScale'))

##### QQ plots in Python
from statsmodels.graphics.gofplots import qqplot
fig1 = qqplot(y, line='q', dist = stats.norm, fit = True)
plt.show()
plt.close()
fig2 = qqplot(y, line='q', dist = stats.t, distargs=(5,), fit = True)
plt.show()
plt.close()


##### Listing 1.9/1.10
price = csvread('stocks.csv', 1, 0);
y=diff(log(price));
corr(y) % correlation matrix

##### Listing 1.9/1.10
p = np.loadtxt('stocks.csv',delimiter=',',skiprows = 1)