# Chapter 1. Financial Markets, Prices and Risk

### R and Julia

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

##### Download S&P500 data in R

```
price = read.csv('index.csv')
y=diff(log(price$Index)) # calculate returns
plot(y) # plot returns
```

##### Listing 1.1/1.2

##### Download S&P 500 data in Julia

```
using CSV
using DataFrames;
price = CSV.read("index.csv",DataFrame)
y = diff(log.(price[:,1]))
using Plots;
plot(y, title = "S&P500 returns", legend = false)
```

##### Listing 1.3/1.4

##### Sample statistics in R

```
library(moments)
library(tseries)
mean(y)
sd(y)
min(y)
max(y)
skewness(y)
kurtosis(y)
jarque.bera.test(y)
```

##### Listing 1.3/1.4

##### Sample statistics in Julia

```
using Statistics, StatsBase;
println("Standard deviation: ", std(y), "\n")
println("Minimum value: ", minimum(y), "\n")
println("Maximum value: ", maximum(y), "\n")
println("Skewness: ", skewness(y), "\n")
println("Kurtosis: ", kurtosis(y), "\n")
println("Autocorrelation of returns:", "\n", autocor(y, 1:20), "\n")
println("Autocorrelation of returns squared:", "\n", autocor(y.^2, 1:20), "\n")
using HypothesisTests;
println(JarqueBeraTest(y))
println(LjungBoxTest(y,20))
println(LjungBoxTest(y.^2, 20))
```

##### Listing 1.5/1.6

##### ACF plots and the Ljung-Box test in R

```
library(MASS)
library(stats)
par(mfrow=c(1,2), pty="s")
q = acf(y,20)
q1 = acf(y^2,20)
Box.test(y, lag = 20, type = c("Ljung-Box"))
Box.test(y^2, lag = 20, type = c("Ljung-Box"))
```

##### Listing 1.5/1.6

##### ACF plots and the Ljung-Box test in Julia

```
q1 = autocor(y, 1:20)
q2 = autocor(y.^2, 1:20)
plot(bar(q1, title = "ACF of returns"),
bar(q2, title = "ACF of returns squared"), legend = false)
```

##### Listing 1.7/1.8

##### QQ plots in R

```
library(car)
par(mfrow=c(1,2), pty="s")
qqPlot(y)
qqPlot(y,distribution="t",df=5)
```

##### Listing 1.7/1.8

##### QQ plots in Julia

```
using StatsPlots, Distributions;
plot(qqplot(Normal,float(y),qqline=:quantile, title = "QQPlot vs Normal"),
qqplot(TDist(5),float(y),qqline=:quantile, title = "QQPlot vs Student-t(5)"),
qqplot(TDist(4),float(y),qqline=:quantile, title = "QQPlot vs Student-t(4)"),
qqplot(TDist(3),float(y),qqline=:quantile, title = "QQPlot vs Student-t(3)"))
```

##### Listing 1.9/1.10

##### Download stock prices in R

```
p = read.csv('stocks.csv')
y=apply(log(p),2,diff)
print(cor(y)) # correlation matrix
```

##### Listing 1.9/1.10

##### Download stock prices in Julia

```
price = CSV.read("stocks.csv", DataFrame)
y1 = diff(log.(price[:,1]))
y2 = diff(log.(price[:,2]))
y3 = diff(log.(price[:,3]))
y = hcat(y1,y2,y3)
println(cor(y)) # correlation matrix
```

##### Financial Risk Forecasting

Market risk forecasting with R, Julia, Python and Matlab. Code, lecture slides, implementation notes, seminar assignments and questions.© All rights reserved, Jon Danielsson,