Pacote NSEpy para download 15 anos de dados do Nifty Options

Conteúdo

Vamos baixar os dados de um contrato de opção única para ter uma ideia de quais entradas são necessárias

# 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)
Baixe a amostra de dados do Nifty Options sata NSEpy

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 das opções NSE por vencimento NSEpy

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)
Classifique as datas de download de dados de opções bacanas NSEpy
# 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)
Dados do ano inicial NSEpy

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)
download de expiração de dados de opções bacanas

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()
Produção

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.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.

Datapeaker