<jupyter_start><jupyter_text>Projeto I - Modelagem Matemática em Finanças I - 2019> Grupo: <NAME> e <NAME><jupyter_code>import numpy as np
import matplotlib.pyplot as plt
from sympy import binomial as b
## Função para simular os valores da ação dados os parametros
def binomial(S0, T, dt, u, d, p):
    Si = S0
    S = []
    t = np.arange(0,T,dt)
    for ti in t:
        rnd = np.random.rand()
        if rnd < p:
            Si *= u
        else:
            Si *= d
        S.append(Si)
    return S
## Definição dos parametros
T = 20
dt = 0.5
S0 = 5
u = 120/110
d = 110/120
p = 0.5

## Construção da lista de valores da ação pelo tempo
x = [binomial(S0, T, dt, u, d, p) for i in range(0,20)]

## Inserir o valor inicial em cada lista
for i in range(0,20):
    x[i].insert(0,S0)
    
## Discretização do tempo
ts = np.linspace(0,20,41)

## Plot do gráfico
plt.figure(figsize=(20,10))
for i in range(0,20):
    plt.plot(ts,x[i],label="{0:.5f}".format(x[i][-1]))
plt.title('Simulação com 20 caminhos de valor da ação')
plt.legend(title='Valor final', loc='upper center', fancybox=True, shadow=True,
           ncol=7, bbox_to_anchor=(0.5,1.05))
plt.xlabel('Tempo')
plt.ylabel('Valor da Ação.')
plt.show()<jupyter_output><empty_output><jupyter_text>Há um problema aqui, a maior parte dos caminhos de valor da ação estão convergindo para 0.Portanto vamos analisar os gráficos na escala log em Y.Identificarei cada curva com seu valor final<jupyter_code>plt.figure(figsize=(20,10))
for i in range(0,20):
    plt.semilogy(ts,x[i],label="{0:.5f}".format(x[i][-1]))
plt.legend(title='Valor final', loc='upper center', fancybox=True, shadow=True, ncol=7, bbox_to_anchor=(0.5,1.05))
plt.title('Caminhos de valor da ação')
plt.show()<jupyter_output><empty_output><jupyter_text>Boxplot<jupyter_code>vs = [[],[]]
for j in [250,500,1000,2000]:
    vs[0].append([binomial(S0, T, dt, u, d, p)[-1] for i in range(0,j)])
plt.boxplot(vs[0])
plt.title('Boxplot com simulações')
plt.xlabel('Número de caminhos executados na simulação')
plt.xticks([1,2,3,4],[250,500,1000,2000])
plt.show()
(1/2 * 120/110 + 1/2 * 110/120)**20<jupyter_output><empty_output><jupyter_text>Modificando os parâmetros<jupyter_code>u_n = np.sqrt(u)
d_n = np.sqrt(d)
dt_n = dt/2
for j in [250,500,1000,2000]:
    vs[1].append([binomial(S0, T, dt_n, u_n, d_n, p)[-1] for i in range(0,j)])

plt.boxplot(vs[1])

plt.title('Boxplot com simulações')
plt.ylabel('Valores das ações ao tempo final')
plt.xlabel('Número de caminhos executados na simulação')
plt.xticks([1,2,3,4],[250,500,1000,2000])
plt.show()
np.mean(vs[1][0])
## Função para calcular a esperança
def esperanca(p_e,u_e,d_e,S0_e,n_e):
    return ((p_e*u_e+(1-p_e)*d_e)**n_e)*S0_e
e = [0,0]
e[0] = esperanca(p,u,d,S0,T)
e[1] = esperanca(p,u_n,d_n,S0,T)
ts = np.linspace(250,2000,4)

ys = [[],[]]
for j in [0,1]:
    for i in vs[j]:
        ys[j].append(abs((np.mean(i)-e[j])))
plt.plot(ts,ys[0],label='Caso 1')
plt.plot(ts,ys[1], label='Caso 2')
plt.title('Gráfico do erro em relação ao número de simulações')
plt.xlabel('Número de simulações')
plt.ylabel('Erro relativo')
plt.legend()
plt.show()
plt.semilogy(ts,ys[0],label='Caso 1')
plt.semilogy(ts,ys[1], label='Caso 2')
plt.legend()
plt.title('Gráfico do erro em relação ao número de simulações escala log')
plt.xlabel('Número de simulações')
plt.ylabel('Erro relativo')
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1743119266055046, 'fraction_numerical': 0.05859721811186742, 'mean_word_length': 4.728813559322034, 'pattern_counts': {'":': 0, '<': 20, '<?xml version=': 0, '>': 20, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '577564', 'license': 'MIT', 'n_tokens_mistral': 1610, 'n_tokens_neox': 1464, 'n_words': 337, 'path': 'mod-mat-financas-I-2019-1/.ipynb_checkpoints/Projeto I-checkpoint.ipynb', 'repo_name': 'mirandagil/university-courses', 'size': '3397'}