## Instructions

**Objective**

## Requirements and Specifications

**Source Code
**

import random

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import math

def Tpath(T, sigma, p, x0):

"""

QUESTION 1: Simulate the path of T

"""

# Create the list with the initial value

x = np.zeros(T+1)

# Now, simulate

for t in range(1,T+1):

# Generate epsilon

prob = random.uniform(0,1)

epsilon = 1 if prob <= p else -1

# Generate value

xt = x[t-1] + sigma*epsilon

# Append

x[t] = xt

# Return

return x

def stock_betas(filename):

# First, open file

data = pd.read_excel(filename, engine='openpyxl', skiprows = 1)

sp500 = data.iloc[:,1].to_numpy()

P = data.iloc[:,2:].to_numpy()

# Now for each stock calculate all RTs and beta

betas = []

for i in range(P.shape[1]):

prices = P[:,i]

x = []

y = []

xy = []

xx = []

# Calculate RTs

for t in range(1,len(prices)):

Pt = prices[t]

Ptold = prices[t-1]

if not math.isnan(Pt) and not math.isnan(Ptold) and Pt >= 0 and Ptold > 0:

Rt = (Pt-Ptold)/Ptold

y.append(Rt)

dsp500 = (sp500[t]-sp500[t-1])/sp500[t-1]

x.append(dsp500)

xy.append(Rt*dsp500)

xx.append(dsp500**2)

# Now calculate

beta = (len(x) * sum(xy) - sum(x) * sum(y)) / (len(x)*sum(xx) - sum(x) ** 2)

betas.append(beta)

return betas

if __name__ == '__main__':

# Question 2

T = 120

sigma = 0.6

p = 0.5

x0 = 10

# Run the simulation of 1,000,000 cases

prob = 0.0

N = 10000

for _ in range(N):

x = Tpath(T, sigma, p, x0)

# Pick the number of times that x is less than x0

prob += len(np.where(x <= 0.75*x0)[0])/(T+1)

prob = prob/N

print("The probability that xt drops at least 25% below its initial value at least once is {:.4f}%".format(prob*100.0))

""" Question 3 """

# generate a new path

x = Tpath(T, sigma, p, x0)

plt.figure()

plt.plot(range(T+1), x)

plt.xlabel('Time (month)')

plt.ylabel('Probability')

plt.title('Probability vs. Time')

plt.grid(True)

plt.show()

""" Question 4 """

betas = stock_betas('stockprices2020b.xlsx')

print(betas)