Pacchetto NSEpy da scaricare 15 anni di dati di Nifty Options

Contenuti

Scarichiamo i dati per un singolo contratto di opzione in modo da avere un'idea di quali input sono necessari

# proviamo prima a scaricare per una singola opzione; specificare manualmente le date
sample_opt1 = get_history(simbolo="NIFTY",
                        inizio = data(2004,11,1), fine = data(2005,1,27),
                        indice = Vero,
                        option_type="SU",
                        strike_price = 2000,
                        data_scadenza = data(2005,1,27))
Stampa(sample_opt1.shape)
sample_opt1.head(n=3)
Scarica il campione di dati Nifty Options sata NSEpy

Dati di esempio per una singola opzione

Per ogni contratto alternativo, dobbiamo entrare 5 variabili: le date di inizio e fine, il tipo di opzione, il prezzo di esercizio (contrarre) e la sua data di scadenza. Il sito NSE ci permette di scaricare solo dati da alternative a 1 contratto allo stesso tempo. Guarda lo screenshot qui sotto.

Poiché il nostro obiettivo è osservare l'impatto degli eventi del cigno nero, dobbiamo approfondire le alternative monetarie per la strategia. Ciò significa che per ogni mese abbiamo bisogno di più di 20 prezzi alternativi durante 90 mesi (15 anni). Dobbiamo fare un giro, altrimenti diventiamo matti 🙂

Seleziona l'opzione migliore tra le alternative

Per ogni prezzo di esercizio, abbiamo due tipi di alternative. Ricorda che un'opzione è un contratto che ci consente di acquistare il post sottostante (NSE Nifty per noi) a un prezzo precedentemente concordato in una data futura, indipendentemente dal prezzo di mercato alla data di scadenza. Le alternative di acquisto sono un diritto di acquistare il sottostante e vengono utilizzate quando il prezzo di mercato aumenta, mentre le alternative di vendita sono il diritto al commercio e servono per proteggersi quando il mercato scende.

La NSE ha opzioni settimanali, mensile e annuale elencato sul tuo sito web per prezzi di esercizio sufficientemente al di sopra e al di sotto degli attuali livelli di mercato (noto anche come il prezzo dell'opzione al prezzo del denaro). Guarda lo screenshot del sito NSE qui sotto

Prezzi delle opzioni NSE per scadenza NSEpy

Prezzi delle alternative NSE per scadenza

Di tutte queste opzioni, le alternative mensili sono le più liquide per il mese in corso e per il prossimo. La liquidez cambia al mes siguiente a misura que el mes actual se acerca a su vencimiento. Le alternative settimanali sono iniziate qualche anno fa, ma mancano di liquidità sufficiente oltre la settimana in corso e la prossima., dobbiamo scaricare i dati delle alternative mensili con una data di inizio 3 mesi prima della scadenza dei prezzi di esercizio ~ 1000 punti sopra e sotto i prezzi più alti e più bassi del mese durante 90 mesi.

Date di ordinamento

Le alternative mensili vengono stabilite l'ultimo giovedì di ogni mese. La data corrente è impostata come un "oggetto. Usiamo il valore relativo della libreria dateutils per ottenere la data di inizio del download tornando indietro 2 mesi (vedi mesi = -2)

# data odierna - 3 mesi prima della scadenza del 1° contratto di opzione
data_corrente = data(2005, 1,1); Stampa(data odierna); Stampa(genere(data odierna))
genere(data odierna)
Ordina le date di download dei dati da opzioni eleganti NSEpy
# prezzo data di inizio download
data_inizio = data_corrente + relativedelta(mesi = -2); Stampa(data d'inizio); Stampa(genere(data d'inizio))
mese_inizio = data_corrente.mese; Stampa("Mese di inizio":', inizio_mese)
anno_inizio = data_inizio.anno; Stampa("Inizio anno": ', anno_iniziale)
Dati di inizio anno NSEpy

Le alternative NSE scadono l'ultimo giovedì del mese per le alternative giornaliere e ogni giovedì per le alternative settimanali. Durante l'ultima settimana del mese, l'opzione mensile funge anche da opzione settimanale. Usiamo la funzione `get_expiry` dalla libreria NSEPy per ottenere l'elenco dei dati per tutti i giovedì del mese e lo inseriamo in una funzione max per ottenere la data dell'ultimo giovedì o la data di scadenza mensile..

# ottenere la data di scadenza
fine_mese = data_corrente.mese; Stampa("Fine mese":', fine_mese)
anno_finale = data_corrente.anno; Stampa("Fine anno": ', fine_anno)

# Usa la funzione ottieni scadenza per ottenere un elenco di date di scadenza - esempio sotto
# get_expiry_date restituisce un elenco di scadenze settimanali; usa max per ottenere la data di scadenza di fine mese

data_scadenza = max(ottenere la data di scadenza(anno = anno_fine, mese = fine_mese))
Stampa('Data di scadenza:', data di scadenza, 'Tipo: ', genere(data di scadenza))
genere(data di scadenza)
scarica nifty opzioni di scadenza dei dati

Facciamo il ciclo

Con un chiaro controllo delle date di inizio e fine, procediamo a incorporarli in un ciclo per consentirci di chiamare la funzione `get_expiry` per ogni mese durante 15 anni. Useremo i cicli for annidati per questo.

Per identificare la fascia di prezzo di esercizio delle alternative, otteniamo il valore di chiusura di Nifty per ogni mese; Definire una gamma di prezzi di esercizio che siano 1000 punti sopra il prezzo più alto del mese e 1000 punti al di sotto della chiusura più bassa di quel mese. Per ogni opzione, otteniamo prezzi giornalieri che sono 3 mesi prima della data di scadenza.

Prima di codificare, facciamo un riassunto e capiamo esattamente cosa vogliamo passare attraverso. Vogliamo dati sulle alternative mensili durante 15 anni, In altre parole, 180 mesi. Per ogni mese, Supponiamo che l'intervallo medio tra valori alti e bassi sia 300 punti. Più di 1000 punti sopra il punto più alto e 1000 punti sotto il punto opzione, avere 23 prezzi di esercizio delle alternative in ogni mese e 2 tipi di alternative: mette e chiama; che ci porta a 46 opzioni discrete al mese. 46 opzioni moltiplicate per 180 mesi ci danno 8280 prezzi di sciopero.

I cicli annidati vengono eseguiti come segue:

Per ogni anno nell'intervallo → Per ogni mese dell'anno → Per ogni sciopero

# etablece e l'intervallo del mese dell'anno su cui eseguire il ciclo
lista_mese = np.arange(1, 13, passo = 1); Stampa(mese_lista)
# spezzare l'elenco degli anni in 2 parti - 2005 a 2012 e 2013 a 2020
yr_list = np.arange(2005, 2012, passo = 1 ); Stampa(yr_list)
# creare un dataframe vuoto per memorizzare i risultati
nifty_data = pd.DataFrame() # da usare nel ciclo
option_data = pd.DataFrame() # per memorizzare l'output
contatore = 0
# rompere il ciclo in 2 parti per evitare errori di interrogazione
per anni in yr_list:
    # scorrere tutti i mesi e gli anni
    Stampa('Anno: ', anni)
    per mese in mese_lista:
        dt_corrente = data(anni, mese, 1)
        start_dt = current_dt + relativedelta(mesi = -2)
        end_dt = max(ottenere la data di scadenza(anno = anno, mese = mese))
        
        # Stampa('attuale: ', dt_corrente)
        # Stampa('cominciare: ', start_dt)
        # Stampa('fine: ', end_dt)
        
        # ottieni ottimi dati sui futures
        nifty_fut = get_history(simbolo="NIFTY",
                               inizio = start_dt, end = end_dt,
                               indice = Vero,
                               scadenza_data = end_dt)
        nifty_data = nifty_data.append(nifty_fut)
        
        # calcolare i valori alti e bassi per ogni mese; arrotondare per ottenere i prezzi di esercizio
        alto = nifty_fut['Chiudere'].max()
        alto = int(il giro(alto/100)*100) + 1000# ; Stampa('Alto:', alto)
        
        basso = nifty_fut['Chiudere'].min()
        basso = int(il giro(basso/100)*100) + 1000# ; Stampa('Basso :', basso)
        
        per colpire in gamma(basso, alto, 100): # cominciare, fermare, fare un passo
            """
            ottieni i prezzi delle opzioni sull'indice di chiusura giornaliera per 3 mesi 
            su tutta la gamma 
            """
            #tempo.dormire(random.randint(10,25)) # mettere in pausa per intervallo casuale in modo da non sopraffare il sito
            nifty_opt = get_history(simbolo="NIFTY",
                                   inizio = start_dt, end = end_dt,
                                   indice = Vero, option_type="SU",
                                   strike_price = strike,
                                   scadenza_data = end_dt)
            
            option_data = option_data.append(nifty_opt)
            
            #tempo.dormire(random.randint(20,50)) # mettere in pausa per intervallo casuale in modo da non sopraffare il sito
            nifty_opt = get_history(simbolo="NIFTY",
                                   inizio = start_dt, end = end_dt,
                                   indice = Vero, option_type="QUESTO",
                                   strike_price = strike,
                                   scadenza_data = end_dt)
            
            option_data = option_data.append(nifty_opt)
            
        contatore+=1
        Stampa('Mesi: ', contatore)

E voilà! Ho 15 anni di dati alternativi per una gamma di prezzi di esercizio che possono essere archiviati in csv; controlliamo prima di riporre

# verificare visivamente
Stampa(option_data.shape)
option_data.tail()
produzione

Tutto il codice sopra è in questo Pagina GitHub.

Connettiti con me su LinkedIn, Twitter, oh Metà per restare aggiornato. È tutto gente!

Nota: Tutto il contenuto è a scopo di ricerca e non per raccomandazioni di investimento. Ti suggerisco di non provare lo stesso senza consultare un consulente finanziario registrato e solo dopo prendere decisioni di investimento.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.