A share of common stock in the Pilsdorff beer company has a price Yn on the nth business day of the year. Finn observes that the price change Xn =Yn+1 - Yn appears to be a random variable with mean \(\mu\)= 0 and variance \({ \delta }^{ 2 }\)= 1/4. If Y1 = 30, find a lower bound for the following probabilities, under the assumption that the Xn’s are mutually independent.
Answer:
Daily price Yn of a common stock is independent variable. The sigma of daily price Xn (=Yn+1 - Yn) is a random variable with mean 0 and sd 0.5. I assume sigma follow a normal distribution, then I can use confidence interval \((\mu -z*\frac { \delta }{ \sqrt { n } } ,\mu +z*\frac { \delta }{ \sqrt { n } } )\) to find the density.
Given \(\mu\)= 0 and \({ \delta }^{ 2 }\)= 1/4, the lower bound of sigma from the initial price is -5. So I have \(0-z*\frac { 0.5 }{ \sqrt { n } } =\quad -5\), z is a critical value for normal distribution of the price change.
In (a), n=2-1, so p=1
pnorm(5/(sqrt(2-1)*0.5))-pnorm(-5/(sqrt(2-1)*0.5))
## [1] 1
In (b), n=11-1, so p=1
pnorm(5/(sqrt(11-1)*0.5))-pnorm(-5/(sqrt(11-1)*0.5))
## [1] 0.9984346
In (c), n=101-1, so p=1
pnorm(5/(sqrt(101-1)*0.5))-pnorm(-5/(sqrt(101-1)*0.5))
## [1] 0.6826895
By the given values above, I set intial price Y1=30, then daily_sigma is Xn (=Yn+1 - Yn) which has mean is 0 and sd =1/2=0.5. The number of random walk is n-1.
Another, I assume the market is efficient and the stock market is weak form efficiency, the change of a stock price is follow random walk. The formular should be as following:
\({ Y }_{ t }={ Y }_{ t-1 }+{ \epsilon }_{ t }\quad \quad ({ \epsilon }_{ t }\sim \quad iid\quad N(0,\frac { 1 }{ 4 } ))\)
See more details in https://en.wikipedia.org/wiki/Random_walk_hypothesis.
Y1<-30 #initial price
days <-11-1 #number of days
daily_mean <-0 #mean of change price
sd <- 0.5 #sigma of change price
simulation_random_walk_lognormal_price <- function(Y1, days, daily_mean, sd){
sigma <-rnorm(days, daily_mean, sd) #n days volatility
Yn <- Y1 + cumsum(sigma) #n daily prices
#plot(Yn,type="l") #display to check the prices
return(Yn[days])
}
n=100000
price_list= c() #store 100000 prices at Tth day
#(a) prob_in_range of Y2
days <-2-1 #number of days
for (i in 1:n) {
price_list[i] <-simulation_random_walk_lognormal_price(Y1, days, daily_mean, sd)
}
count_price_in_range <- sum( price_list >= 25 & price_list <= 35 )
prob_in_range_Y2 = count_price_in_range / n
prob_in_range_Y2
## [1] 1
#(b) prob_in_range of Y11
days <-11-1 #number of days
for (i in 1:n) {
price_list[i] <-simulation_random_walk_lognormal_price(Y1, days, daily_mean, sd)
}
count_price_in_range <- sum( price_list >= 25 & price_list <= 35 )
prob_in_range_Y11 = count_price_in_range / n
prob_in_range_Y11
## [1] 0.99869
#(c) prob_in_range of Y101
days <-101-1 #number of days
for (i in 1:n) {
price_list[i] <-simulation_random_walk_lognormal_price(Y1, days, daily_mean, sd)
}
count_price_in_range <- sum( price_list >= 25 & price_list <= 35 )
prob_in_range_Y101 = count_price_in_range / n
prob_in_range_Y101
## [1] 0.68093