# vamos tentar fazer o download de uma única opção primeiro; especificar datas manualmente
sample_opt1 = get_history(símbolo ="NIFTY",
início = data(2004,11,1), fim = data(2005,1,27),
índice = Verdade,
option_type ="SOBRE",
strike_price = 2000,
expiry_date = data(2005,1,27))
imprimir(sample_opt1.shape) sample_opt1.head(n = 3)
Dados de amostra para uma única opção
Para cada contrato alternativo, devemos entrar 5 variáveis: as datas de início e término, o tipo de opção, o preço de exercício (contrato) e sua data de validade. O site NSE nos permite baixar apenas dados de alternativas para 1 contrato ao mesmo tempo. Veja a imagem abaixo.
Uma vez que nosso objetivo é observar o impacto dos eventos do cisne negro, precisamos investigar as alternativas de dinheiro para a estratégia. Isso significa que, para cada mês, precisamos mais do que 20 preços alternativos durante 90 meses (15 anos). Precisamos fazer um loop, senão enlouqueceremos 🙂
Selecione a melhor opção entre as alternativas
Para cada preço de exercício, temos dois tipos de alternativas. Lembre-se de que uma opção é um contrato que nos permite comprar a postagem subjacente (NSE Nifty para nós) a um preço previamente acordado em uma data futura, independentemente do preço de mercado na data de vencimento. As alternativas de compra são um direito de comprar o subjacente e são usadas quando o preço de mercado aumenta, enquanto as alternativas de venda são o direito de negociar e são usadas para se proteger quando o mercado cai.
O NSE tem opções semanais, mensal e anual listado no seu site para preços de exercício que estão suficientemente acima e abaixo dos níveis atuais de mercado (também conhecido como o preço da opção ao preço do dinheiro). Veja a captura de tela do site NSE abaixo
Preços de alternativas NSE por vencimento
De todas essas opções, as alternativas mensais são as mais líquidas para o mês atual e o próximo. A liquidez muda para o mês seguinte à medida que o mês atual se aproxima do vencimento. As alternativas semanais começaram há alguns anos, mas eles não têm liquidez suficiente além da semana atual e da próxima., precisamos baixar os dados das alternativas mensais com uma data de início 3 meses antes do vencimento dos preços de exercício ~ 1000 pontos acima e abaixo dos preços mais altos e mais baixos do mês durante 90 meses.
Classificando datas
As alternativas mensais são acertadas na última quinta-feira de cada mês. A data atual é definida como um “objeto. Usamos o valor relativo da biblioteca dateutils para obter a data de início do download voltando 2 meses (ver meses = -2)
# data atual - 3 meses antes do vencimento do primeiro contrato de opção data_atual = data(2005, 1,1); imprimir(data atual); imprimir(modelo(data atual)) modelo(data atual)

# preço data de início do download start_date = current_date + relativedelta(meses = -2); imprimir(data de início); imprimir(modelo(data de início)) start_month = current_date.month; imprimir(Mês de Início:', start_month)
start_yr = start_date.year; imprimir(Ano de Início: ', start_yr)

As alternativas NSE expiram na última quinta-feira do mês para alternativas diárias e todas as quintas-feiras para alternativas semanais. Durante a última semana do mês, a opção mensal dobra como a opção semanal. Usamos a função `get_expiry` da biblioteca NSEPy para obter a lista de dados para todas as quintas-feiras do mês e colocá-la dentro de uma função max para obter a data da última quinta-feira ou a data de vencimento do mês..
# obter data de validade end_month = current_date.month; imprimir(Fim de Mês:', end_month) end_yr = current_date.year; imprimir(Fim de Ano: ', end_yr) # Use a função get expiry para obter uma lista de datas de expiração - amostra abaixo # get_expiry_date retorna uma lista de expirações semanais; use o máximo para obter a data de expiração de final do mês expiry_date = max(get_expiry_date(ano = end_yr, mês = fim_mês)) imprimir(Expiry_date:', data de validade, Tipo: ', modelo(data de validade)) modelo(data de validade)

Vamos fazer loop
Com controle claro das datas de início e término, continuamos a incorporá-los em um loop para nos permitir chamar a função `get_expiry` para cada mês durante 15 anos. Usaremos loops for aninhados para este.
Identificar a faixa de preço de exercício das alternativas, obtemos o valor de fechamento do Nifty para cada mês; Defina uma gama de preços de exercício que são 1000 pontos acima do preço mais alto do mês e 1000 pontos abaixo do fechamento mais baixo daquele mês. Para cada opção, obtemos preços diários que são 3 meses antes da data de validade.
Antes de codificar, vamos fazer um resumo e entender o que exatamente queremos passar. Queremos dados sobre alternativas mensais durante 15 anos, Em outras palavras, 180 meses. Para cada mês, Suponha que o intervalo médio entre os valores altos e baixos seja 300 pontos. Mais do que 1000 pontos acima do ponto alto e 1000 pontos abaixo do ponto de opção, tenho 23 preços de exercício das alternativas em cada mês e 2 tipos de alternativas: Faz suas ligações; o que nos leva a 46 opções discretas por mês. 46 opções multiplicadas por 180 meses nos da 8280 preços de greve.
Os loops aninhados são executados da seguinte forma:
Para cada ano no intervalo → Para cada mês do ano → Para cada advertência
# estabeleça e intervalo de ano de mês para loop sobre month_list = np.arange(1, 13, passo = 1); imprimir(month_list)
# divida a lista do ano em 2 partes - 2005 para 2012 e 2013 para 2020 yr_list = np.arange(2005, 2012, passo = 1 ); imprimir(yr_list)
# criar dataframe vazio para armazenar resultados nifty_data = pd.DataFrame() # para usar no loop option_data = pd.DataFrame() # para armazenar saída contador = 0
# quebrar o laço em 2 partes para evitar erros de consulta
para ano no yr_list:
# percorrer todos os meses e anos
imprimir(Ano: ', ano)
para mnth no month_list:
current_dt = date(ano, mnth, 1)
start_dt = current_dt + relativedelta(meses = -2)
end_dt = max(get_expiry_date(ano = ano, mês = mês))
# imprimir(Atual: ', current_dt)
# imprimir(Início: ', start_dt)
# imprimir(Fim: ', end_dt)
# obter dados de futuros interessantes
nifty_fut = get_history(símbolo ="NIFTY",
start = start_dt, end = end_dt,
índice = Verdade,
expiry_date = end_dt)
nifty_data = nifty_data.append(nifty_fut)
# calcular valores altos e baixos para cada mês; arredondar para obter preços de greve
high = nifty_fut['Fechar'].max()
alto = int(volta(alto / 100)*100) + 1000# ; imprimir(Alto:', Alto)
low = nifty_fut['Fechar'].min()
baixo = int(volta(baixo / 100)*100) + 1000# ; imprimir(Baixo :', baixo)
para batida no faixa(baixo, Alto, 100): # começar, Pare, Passo
"""
obter preços de opções de índice bacanas de fechamento diário para 3 meses
em toda a gama
"""
#hora de dormir(random.randint(10,25)) # pausar por intervalo aleatório para não sobrecarregar o site
nifty_opt = get_history(símbolo ="NIFTY",
start = start_dt, end = end_dt,
índice = Verdade, option_type ="SOBRE",
strike_price = strike,
expiry_date = end_dt)
option_data = option_data.append(nifty_opt)
#hora de dormir(random.randint(20,50)) # pausar por intervalo aleatório para não sobrecarregar o site
nifty_opt = get_history(símbolo ="NIFTY",
start = start_dt, end = end_dt,
índice = Verdade, option_type ="ISTO",
strike_price = strike,
expiry_date = end_dt)
option_data = option_data.append(nifty_opt)
contador + = 1
imprimir(Meses: ', contador)
E voila! Tenho 15 anos de dados alternativos para uma gama de preços de exercício que podem ser armazenados em csv; vamos verificar antes de armazenar
# verificar visualmente imprimir(option_data.shape) option_data.tail()

Todo o código acima está neste Página GitHub.
Conecte-se comigo no LinkedIn, Twitter, o Metade para se manter atualizado. Isso é tudo, amigos!
Observação: Todo o conteúdo é para fins de pesquisa e não para recomendações de investimento. Eu sugiro que você não tente o mesmo sem consultar um consultor financeiro registrado e só então tome decisões de investimento.



