# essayons d'abord de télécharger pour une seule option; spécifier manuellement les dates
sample_opt1 = get_history(symbole ="BONJOUR",
début = date(2004,11,1), fin = date(2005,1,27),
indice = Vrai,
option_type="AU",
strike_price = 2000,
date_expiration = date(2005,1,27))
imprimer(sample_opt1.shape) sample_opt1.head(n=3)
Exemples de données pour une seule option
Pour chaque contrat alternatif, nous devons entrer 5 variables: les dates de début et de fin, le type d'option, le prix d'exercice (Contrat) et sa date de péremption. Le site NSE nous permet de télécharger uniquement les données des alternatives à 1 contrat en même temps. Voir capture d'écran ci-dessous.
Puisque notre objectif est d'observer l'impact des événements du cygne noir, nous devons approfondir les alternatives financières pour la stratégie. Cela signifie que pour chaque mois, nous avons besoin de plus de 20 prix alternatifs pendant 90 mois (15 ans). Nous devons faire une boucle, sinon on devient fou
Sélectionnez la meilleure option parmi les alternatives
Pour chaque prix d'exercice, nous avons deux types d'alternatives. Rappelez-vous qu'une option est un contrat qui nous permet d'acheter le poste sous-jacent (NSE Nifty pour nous) à un prix préalablement convenu à une date future, quel que soit le prix du marché à la date d'expiration. Les alternatives d'achat sont un droit d'acheter le sous-jacent et sont utilisées lorsque le prix du marché augmente, tandis que les alternatives de vente sont le droit de commercer et sont utilisées pour se protéger lorsque le marché chute.
Le NSE a des options hebdomadaires, mensuel et annuel répertorié sur votre site pour des prix d'exercice suffisamment supérieurs et inférieurs aux niveaux actuels du marché (également appelé prix de l'option au prix de l'argent). Voir la capture d'écran du site NSE ci-dessous
Prix des alternatives NSE par expiration
De toutes ces options, les alternatives mensuelles sont les plus liquides pour le mois en cours et le suivant. La liquidité passe au mois suivant à mesure que le mois en cours approche de l'expiration. Les alternatives hebdomadaires ont commencé il y a quelques années, mais ils manquent de liquidités suffisantes au-delà de la semaine en cours et de la suivante., nous devons télécharger les données des alternatives mensuelles avec une date de début 3 mois avant l'expiration des prix d'exercice ~ 1000 points au-dessus et au-dessous des prix les plus élevés et les plus bas du mois pendant 90 mois.
Dates de tri
Les alternatives mensuelles sont réglées le dernier jeudi de chaque mois. La date actuelle est définie comme un « objet. Nous utilisons la valeur relative de la bibliothèque dateutils pour obtenir la date de début du téléchargement en remontant 2 mois (voir mois = -2)
# date actuelle - 3 mois avant l'expiration du 1er contrat d'option date_actuelle = date(2005, 1,1); imprimer(date actuelle); imprimer(taper(date actuelle)) taper(date actuelle)

# date de début du téléchargement des prix
date_début = date_actuelle + relatifdelta(mois = -2); imprimer(date de début); imprimer(taper(date de début))
mois_début = date_actuelle.mois; imprimer('Start Month:', début_mois)
start_yr = start_date.year; imprimer('Start Year: ', début_année)

Les alternatives NSE expirent le dernier jeudi du mois pour les alternatives quotidiennes et tous les jeudis pour les alternatives hebdomadaires. Au cours de la dernière semaine du mois, l'option mensuelle sert également d'option hebdomadaire. Nous utilisons la fonction `get_expiry` de la bibliothèque NSEPy pour obtenir la liste des données pour tous les jeudis du mois et la mettons dans une fonction max pour obtenir la date du dernier jeudi ou la date d'échéance mensuelle..
# obtenir la date d'expiration fin_mois = date_courant.mois; imprimer('End Month:', fin_mois) end_yr = date_actuelle.année; imprimer('End Year: ', fin_année) # Utilisez la fonction get expiration pour obtenir une liste des dates d'expiration - exemple ci-dessous # get_expiry_date renvoie une liste d'expirations hebdomadaires; utilisez max pour obtenir la date d'expiration de fin de mois date_expiration = max(get_expiry_date(année = fin_année, mois = fin_mois)) imprimer('Expiry_date:', date d'expiration, 'Type: ', taper(date d'expiration)) taper(date d'expiration)

Faisons la boucle
Avec un contrôle clair des dates de début et de fin, nous procédons à leur intégration dans une boucle pour nous permettre d'appeler la fonction `get_expiry` pour chaque mois pendant 15 ans. Nous utiliserons des boucles for imbriquées pour cela.
Identifier la fourchette de prix d'exercice des alternatives, nous obtenons la valeur de clôture de Nifty pour chaque mois; Définir une fourchette de prix d'exercice qui 1000 points au-dessus du prix le plus élevé du mois et 1000 points en dessous de la clôture la plus basse de ce mois. Pour chaque option, nous obtenons des prix quotidiens qui sont 3 mois avant la date d'expiration.
Avant de coder, faisons un résumé et comprenons ce que nous voulons exactement traverser. Nous voulons des données sur les alternatives mensuelles pendant 15 ans, En d'autres termes, 180 mois. Pour chaque mois, Supposons que la plage moyenne entre les valeurs hautes et basses est 300 points. Plus que 1000 points au-dessus du point culminant et 1000 points en dessous du point d'option, avoir 23 exercer les prix des alternatives chaque mois et 2 types d'alternatives: Mets et Appels; qui nous amène à 46 options discrètes par mois. 46 options multipliées par 180 mois nous donnent 8280 prix d'exercice.
Les boucles imbriquées sont exécutées comme suit:
Pour chaque année de la gamme → Pour chaque mois de l'année → Pour chaque grève
# plage d'année et de mois à boucler liste_mois = np.arange(1, 13, étape = 1); imprimer(liste_mois)
# diviser la liste des années en 2 les pièces - 2005 à 2012 et 2013 à 2020 liste_années = np.arange(2005, 2012, étape = 1 ); imprimer(liste_années)
# créer un cadre de données vide pour stocker les résultats nifty_data = pd.DataFrame() # à utiliser dans la boucle option_data = pd.DataFrame() # pour stocker la sortie compteur = 0
# rompre la boucle en 2 pièces pour éviter les erreurs de requête
pour année dans liste_années:
# boucle à travers tous les mois et les années
imprimer('Year: ', année)
pour mois dans liste_mois:
current_dt = date(année, mois, 1)
start_dt = current_dt + relatifdelta(mois = -2)
fin_dt = max(get_expiry_date(année = année, mois = mois))
# imprimer('current: ', courant_dt)
# imprimer('start: ', start_dt)
# imprimer('end: ', fin_dt)
# obtenez des données intéressantes sur les contrats à terme
chouette_fut = get_history(symbole ="BONJOUR",
start = start_dt, fin = fin_dt,
indice = Vrai,
date_expiration = jd_fin)
nifty_data = nifty_data.append(chouette_fut)
# calculer les valeurs hautes et basses pour chaque mois; arrondir pour obtenir des prix d'exercice
élevé = chouette_fut['Clôture'].max()
haut = entier(tour(élevé/100)*100) + 1000# ; imprimer('High:', haute)
bas = chouette_fut['Clôture'].min()
bas = entier(tour(faible/100)*100) + 1000# ; imprimer('Low :', meugler)
pour frapper dans gamme(meugler, haute, 100): # début, arrêter, étape
"""
obtenez les prix de clôture quotidiens des options sur indices astucieux pour 3 mois
sur toute la gamme
"""
#le sommeil de temps(random.randint(10,25)) # pause pour un intervalle aléatoire afin de ne pas submerger le site
chouette_opt = get_history(symbole ="BONJOUR",
start = start_dt, fin = fin_dt,
indice = Vrai, option_type="AU",
strike_price = grève,
date_expiration = jd_fin)
option_data = option_data.append(chouette_opt)
#le sommeil de temps(random.randint(20,50)) # pause pour un intervalle aléatoire afin de ne pas submerger le site
chouette_opt = get_history(symbole ="BONJOUR",
start = start_dt, fin = fin_dt,
indice = Vrai, option_type="CE",
strike_price = grève,
date_expiration = jd_fin)
option_data = option_data.append(chouette_opt)
compteur+=1
imprimer('Months: ', contrer)
Et voila! Ont 15 des années de données alternatives pour une gamme de prix d'exercice qui peuvent être stockées au format csv; vérifions avant de stocker
# vérifier visuellement imprimer(option_data.shape) option_data.tail()

Tout le code ci-dessus est dans ce Page GitHub.
Connectez-vous avec moi sur LinkedIn, Twitter, O Moitié pour rester à jour. C'est tout les amis!
Noter: Tout le contenu est à des fins de recherche et non à des fins de recommandations d'investissement. Je vous suggère de ne pas essayer la même chose sans consulter un conseiller financier agréé et de prendre ensuite des décisions d'investissement..
Articles Similaires:
- Développeur SAS – Bangalore (plus de 4 Années d'expérience)
- Détecter les anomalies de séries temporelles à l'aide du package Anomalize dans R
- Comment télécharger, installer et utiliser le GPU Nvidia pour Tensorflow
- Ensembles de données Kaggle | Les meilleurs ensembles de données Kaggle à pratiquer pour les scientifiques des données



