Seeking Levy parameters

Get data

# Load the required libraries
library(data.table)
library(tidyquant)
library(quantmod)



# Fetch the Nifty 50 index data
nifty_data <- tq_get("^NSEI", from = "1980-01-1", to = "2024-05-30")

# Convert the data to a data.table
nifty_data <- data.table(nifty_data)

# Extract the last closing price directly from nifty_data
# Get the latest closing price
latest_close <- tail(nifty_data$close, 1)


# Select the relevant columns and calculate returns
dt <- nifty_data[, .(date, adjusted, returns = adjusted / shift(adjusted, 1) - 1)]


# Calculate mean return and annualized standard deviation
result <- dt[, .(
  annualized_mean_return = 252 * mean(returns, na.rm = TRUE) * 100,
  annualized_sd = sqrt(252) * sd(returns, na.rm = TRUE) * 100
)]
show(result)
   annualized_mean_return annualized_sd
                    <num>         <num>
1:               11.58687      21.26589
latest_close
[1] 22704.7

Find 𝛼,𝛽,𝛾,𝛿

library(data.table)
library(stabledist)
# install.packages("fitdistrplus")
library(fitdistrplus)

fit <- fBasics::stableFit(dt$returns, "stable")

# Access the estimated parameters
alpha <- fit@fit$estimate["alpha"]
beta <- fit@fit$estimate["beta"]
gamma <- fit@fit$estimate["gamma"]
delta <- fit@fit$estimate["delta"]

# Print the estimated parameters
cat("Alpha:", alpha, "\n")
Alpha: 1.491 
cat("Beta:", beta, "\n")
Beta: -0.079 
cat("Gamma:", gamma, "\n")
Gamma: 0.006256041 
cat("Delta:", delta, "\n")
Delta: 0.0008247317 

Calculate central tendency

nifty <-as.data.table(nifty_data)
# Calculating daily returns
nifty_return <- nifty[, daily_return := (adjusted / shift(adjusted, 1)) - 1]
nifty_return1<-nifty_return[is.na(daily_return), daily_return := 0]
return_only<-nifty_return1[, .(adjusted, daily_return)]
sd_daily_return<-return_only[, sd(daily_return)]
sd_nifty<-sd_daily_return*sqrt(252)
print(sd_nifty)
[1] 0.2110806
average_daily_return<-nifty_return1[, mean(daily_return)]
annual_return <- (1 + average_daily_return) ^ 252 - 1
print(annual_return)
[1] 0.1208953
median_daily_return<-nifty_return1[, median(daily_return)]
median_return <- (1 + median_daily_return) ^ 252 - 1
print(median_return)
[1] 0.1323625
Back to top