Cotation des options sur IG Market

Forum sur le métier de trader : livres, outils, stations de trading, organisation d'une journée et réalité du métier, racontée par ceux qui l'exercent.
maroxe
Ewok
Messages : 77
Enregistré le : 20 mai 2014 08:50

Cotation des options sur IG Market

Message non lu par maroxe »

Bonjour,

J'ai découvert aujoud'hui que IG Market permet de trader les options. Voici un exemple des call et put proposés à échéance journalières aujourd'hui à midi:
cotation (Mobile).png
cotation (Mobile).png (78.2 Kio) Vu 1706 fois
A l'aide d'un programme python j'essaye de calculer la volatilité implicite utilisé par IG pour faire son calcul, que je trace en fonction du strike:
vol (Mobile).png
vol (Mobile).png (13.67 Kio) Vu 1706 fois
Je n'arrive pas à expliquer la forme de cette courbe, tout indice est le bienvenu.
J'utilise le modèle de BlackScholes classique, et voici les paramètres du modèle:
  • taux d'interêt nul (ça ne change pas grand chose pour une période aussi courte, si?)
  • temps avant l'échéance égale à 1 / (365*2) (une demi journée)
  • cours de l'actif égale à S0=12125.6
Cordialement
adibool
Apprenti Jedi
Messages : 771
Enregistré le : 03 déc. 2013 20:50

Re: Cotation des options sur IG Market

Message non lu par adibool »

C'est pour cela qu'on a tant de mal à pricer les options IG . Le "smile" de volatilité n'en ai pas vraiment un .

Quel programme Python utilises tu ? Home made ou internet?

Ca serait intéressant de reporter le graphique a différent moment pour voir si le "smile" change de forme.
Avatar du membre
Bella Swan
Chevalier Émérite Jedi
Messages : 3616
Enregistré le : 12 nov. 2014 13:06

Re: Cotation des options sur IG Market

Message non lu par Bella Swan »

maroxe a écrit :Je n'arrive pas à expliquer la forme de cette courbe, tout indice est le bienvenu.
J'utilise le modèle de BlackScholes classique,
Les travaux de Peter Tankov ?
maroxe
Ewok
Messages : 77
Enregistré le : 20 mai 2014 08:50

Re: Cotation des options sur IG Market

Message non lu par maroxe »

adibool a écrit :C'est pour cela qu'on a tant de mal à pricer les options IG . Le "smile" de volatilité n'en ai pas vraiment un .

Quel programme Python utilises tu ? Home made ou internet?

Ca serait intéressant de reporter le graphique a différent moment pour voir si le "smile" change de forme.
J'utlise un petit scipt fait maison:

Code : #

import numpy as np
# Strike
K = np.ar ([12020, 12040, 12060, 12080, 12100, 12120, 12130, 12140, 12150, 12160, 12170, 12180, 12190, 12200, 12220, 12240, 12260, 12280, 12300])

# Pris du call correspondant (bid+ask / 2)
p_call = np.ar ([105.6, 85.6, 65.7, 46.1, 28.2, 13.9, 8.7, 5.2, 19.1, 26.7, 35.3, 44.5, 54.1, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5] )


S0 = 12125.6 # cours actuel
r = 0.0 # taux d'interet
t = 1./365 # temps avant l'echeance
div = 0 # dividende


Vol = [] # Vol implicite
# On teste toutes les valeurs de 0 a 100% avec un pas de 1
# On garde celle qui minimise l'ecart entre le prix reel et le prix de IG
for i, c in enumerate(p_call):
    X = np.arange(0., 1., 0.01)
    Y = [  abs(call(S0, K[i], v, r, t, div) - c) for v in X]
    Vol += [np.argmin(Y)] 

# tracer
import matplotlib.pyplot as plt    
plt.plot(K, Vol, 'ro-')
plt.show()
La fonction call est presente dans le fichier blackscholes.py que j'ai récupérer sur internet (la flemme de retaper la formule)

Code : #

import scipy
import math
from scipy import stats

""" Price an option using the Black-Scholes model.
s: initial stock price
k: strike price
t: expiration time
v: volatility
r: risk-free rate
div: dividend
cp: +1/-1 for call/put
"""

d1 = lambda s,k,v,r,t,div : (scipy.log(s/k)+(r-div+0.5*math.pow(v,2))*t)/(v*scipy.sqrt(t))
d2 = lambda s,k,v,r,t,div : d1(s,k,v,r,t,div) - v*scipy.sqrt(t)
call = lambda s,k,v,r,t,div : (s*math.exp(-div*t)*stats.norm.cdf(d1(s,k,v,r,t,div))) - (k*scipy.exp(-r*t)*stats.norm.cdf(d2(s,k,v,r,t,div)))
Je vais essayer de récupérer les cotes pour d'autres périodes pour voir si ça change. (Ceci dit, vous connaisez une méthode pour récupérer les prix de IG sous forme texte sans avoir a les rentrer un à un comme je l'ai fait ici? )
Bella Swan a écrit :
maroxe a écrit :Je n'arrive pas à expliquer la forme de cette courbe, tout indice est le bienvenu.
J'utilise le modèle de BlackScholes classique,
Les travaux de Peter Tankov ?
C'est possible, c'était mon prof de TD, mais il a jamais dit que le modèle était basé sur ses travaux.
Ceci dit, le modèle est simple pour les options vanilles comme ici, comme les options call européennes ont le même prix que les américaines, le prix est donné par:
Image
ladefense92800
Maître Jedi
Messages : 4289
Enregistré le : 18 déc. 2011 18:21

Re: Cotation des options sur IG Market

Message non lu par ladefense92800 »

c est rogue le specialiste des options ici .
Avatar du membre
Bella Swan
Chevalier Émérite Jedi
Messages : 3616
Enregistré le : 12 nov. 2014 13:06

Re: Cotation des options sur IG Market

Message non lu par Bella Swan »

maroxe a écrit :C'est possible, c'était mon prof de TD, mais il a jamais dit que le modèle était basé sur ses travaux
Je ne disais pas ça évidemment !!! Je sous-entendais que Tankov et le labo de probas de Jussieu avaient avancé sur ce problème. Peut-être y trouverais-tu des pistes nouvelles ?
adibool
Apprenti Jedi
Messages : 771
Enregistré le : 03 déc. 2013 20:50

Re: Cotation des options sur IG Market

Message non lu par adibool »

maroxe a écrit :
adibool a écrit :C'est pour cela qu'on a tant de mal à pricer les options IG . Le "smile" de volatilité n'en ai pas vraiment un .

Quel programme Python utilises tu ? Home made ou internet?

Ca serait intéressant de reporter le graphique a différent moment pour voir si le "smile" change de forme.
J'utlise un petit scipt fait maison:

Code : #

import numpy as np
# Strike
K = np.ar ([12020, 12040, 12060, 12080, 12100, 12120, 12130, 12140, 12150, 12160, 12170, 12180, 12190, 12200, 12220, 12240, 12260, 12280, 12300])

# Pris du call correspondant (bid+ask / 2)
p_call = np.ar ([105.6, 85.6, 65.7, 46.1, 28.2, 13.9, 8.7, 5.2, 19.1, 26.7, 35.3, 44.5, 54.1, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5] )


S0 = 12125.6 # cours actuel
r = 0.0 # taux d'interet
t = 1./365 # temps avant l'echeance
div = 0 # dividende


Vol = [] # Vol implicite
# On teste toutes les valeurs de 0 a 100% avec un pas de 1
# On garde celle qui minimise l'ecart entre le prix reel et le prix de IG
for i, c in enumerate(p_call):
    X = np.arange(0., 1., 0.01)
    Y = [  abs(call(S0, K[i], v, r, t, div) - c) for v in X]
    Vol += [np.argmin(Y)] 

# tracer
import matplotlib.pyplot as plt    
plt.plot(K, Vol, 'ro-')
plt.show()
La fonction call est presente dans le fichier blackscholes.py que j'ai récupérer sur internet (la flemme de retaper la formule)

Code : #

import scipy
import math
from scipy import stats

""" Price an option using the Black-Scholes model.
s: initial stock price
k: strike price
t: expiration time
v: volatility
r: risk-free rate
div: dividend
cp: +1/-1 for call/put
"""

d1 = lambda s,k,v,r,t,div : (scipy.log(s/k)+(r-div+0.5*math.pow(v,2))*t)/(v*scipy.sqrt(t))
d2 = lambda s,k,v,r,t,div : d1(s,k,v,r,t,div) - v*scipy.sqrt(t)
call = lambda s,k,v,r,t,div : (s*math.exp(-div*t)*stats.norm.cdf(d1(s,k,v,r,t,div))) - (k*scipy.exp(-r*t)*stats.norm.cdf(d2(s,k,v,r,t,div)))
Je vais essayer de récupérer les cotes pour d'autres périodes pour voir si ça change. (Ceci dit, vous connaisez une méthode pour récupérer les prix de IG sous forme texte sans avoir a les rentrer un à un comme je l'ai fait ici? )
Bella Swan a écrit :
maroxe a écrit :Je n'arrive pas à expliquer la forme de cette courbe, tout indice est le bienvenu.
J'utilise le modèle de BlackScholes classique,
Les travaux de Peter Tankov ?
C'est possible, c'était mon prof de TD, mais il a jamais dit que le modèle était basé sur ses travaux.
Ceci dit, le modèle est simple pour les options vanilles comme ici, comme les options call européennes ont le même prix que les américaines, le prix est donné par:
Image

Merci pour le code , j'ai à peu près la meme chose en matlab .

Pour récupérer les données automatiquement j'aurais bien fait du web scrapping mais le HTML de la page ne donne rien.

Donc je pense que le seul moyen à ma connaissance est d'utiliser leur API mais il y a des problème de compatibilité entre les 64 et 32 bits + des bugs donc un peu ennuyeux à gérer.

Je pense qu'en monitorant le smile d'IG , je suis sur qu'il y a des anomalies exploitables :musique:
maroxe
Ewok
Messages : 77
Enregistré le : 20 mai 2014 08:50

Re: Cotation des options sur IG Market

Message non lu par maroxe »

Bella Swan a écrit :
maroxe a écrit :C'est possible, c'était mon prof de TD, mais il a jamais dit que le modèle était basé sur ses travaux
Je ne disais pas ça évidemment !!! Je sous-entendais que Tankov et le labo de probas de Jussieu avaient avancé sur ce problème. Peut-être y trouverais-tu des pistes nouvelles ?
Mais j'étais tout à fait sérieux, il était vraiment mon prof de TD ;) D'ailleurs, j'essaye de retrouver ce que j'ai appris dans son cours dans la vrai vie sans grand succès pour l'instant :mrgreen:


@adibool, Je n'ai pas moyen de tester l'API, il faut un compte en réel pour ça, non?
Sinon, connaissez vous d'autres sites (gratuits de préférence) qui fournissent les prix de marché des options?

Je vais continuer à chercher de mon côté, et je vous tiens au courant. Ceci dit, ça m'étonnerait qu'il existe une opportunité d'arbitrage avec IG, rien que les frais de transaction sont prohibitifs, mais restons optimisite. ^^
adibool
Apprenti Jedi
Messages : 771
Enregistré le : 03 déc. 2013 20:50

Re: Cotation des options sur IG Market

Message non lu par adibool »

oui il faut un compte réel.

Pour le prix des options celles fournit par IG ne cotent pas pareil que les autres c'est pour ca que c'est spécial à gérer sur IG.

Quant à l'arbitrage je me dis pourquoi pas , créer un programme qui détecte les anomalies et qui joue sur la correction! je pense que ces "anomalies" n'arrivent pas souvent mais ca vaut la peine d'essayer à mon humble avis
maroxe
Ewok
Messages : 77
Enregistré le : 20 mai 2014 08:50

Re: Cotation des options sur IG Market

Message non lu par maroxe »

J'ai utilisé chrome (F12 pour accéder aux outils dev) pour télécharger la page html que j'ai ensuite parsé avec python (d'une façon dégoutant, je vous épargne le code) , cette fois l'échéance est pour le 17 juin, voici ce que j'obtient (call et put je trouve pareil) :
call_17_juin (Mobile).png
call_17_juin (Mobile).png (12.55 Kio) Vu 1706 fois
C'est déjà plus régulier. Le fait que la courbe soit constant par morceau est peut une anomalie? L
maroxe
Ewok
Messages : 77
Enregistré le : 20 mai 2014 08:50

Re: Cotation des options sur IG Market

Message non lu par maroxe »

Et le "smile" (ce n'est pas vraiment un, mais passons) pour les call du cac40 a echeance 15 Janvier:
caccall (Mobile).png
caccall (Mobile).png (5.7 Kio) Vu 1331 fois
adibool
Apprenti Jedi
Messages : 771
Enregistré le : 03 déc. 2013 20:50

Re: Cotation des options sur IG Market

Message non lu par adibool »

Oui la forme est déja plus normal , avec des une volatilité décroissante en fonction du strike. un skew quoi

Après que ca soit constant par morceaux oui c'est une "anomalie", après il faut surtout voir si le smile se corrige au fil du temps ou non.

EDIT : pour le cac c'est clean du coup.

Enfaite en pratique le phénomène observé est un skew (courbe décroissante etc cf google), avec une volatilité qui remonte pour les strike lointain c'est pour cela qu'on parle de "smile"
maroxe
Ewok
Messages : 77
Enregistré le : 20 mai 2014 08:50

Re: Cotation des options sur IG Market

Message non lu par maroxe »

- adibool, en effet, j'ai édité en rajoutant les strikes plus grand que le cours actuel, c'est vrai qu'on retrouve la forme habituelle.

EDIT:
J'ai fait de même pour les options FX trimestriel.

La vol des call
eurusdcall (Mobile).png
eurusdcall (Mobile).png (14.48 Kio) Vu 1329 fois
La vol de puts
eurusdput (Mobile).png
eurusdput (Mobile).png (14.39 Kio) Vu 1329 fois
adibool
Apprenti Jedi
Messages : 771
Enregistré le : 03 déc. 2013 20:50

Re: Cotation des options sur IG Market

Message non lu par adibool »

maroxe a écrit :- adibool, en effet, j'ai édité en rajoutant les strikes plus grand que le cours actuel, c'est vrai qu'on retrouve la forme habituelle.
Oui le smile est bien clean. maintenant faudrait voir comment ce smile se "transforme" lorsqu'il y a un peu plus de volatilité ou quand il n'y en a pas du tout . C'est interessant à observer / exploiter sait on jamais.
adibool
Apprenti Jedi
Messages : 771
Enregistré le : 03 déc. 2013 20:50

Re: Cotation des options sur IG Market

Message non lu par adibool »

Il faut aussi savoir que le smile admet un minimum ATM ( à la monnaie)

Pour ton dernier graph tu vois que ton minimum n'est pas à la monnaie.

Donc peut etre que la volatilité des put eur/usd (c'est bien ca ?) proche de la monnaie ont une volatilité anormalement haute ce qui revient à shorter un put à la monnaie ou proche , pour profiter (ou pas) d'une correction du marché. et donc profiter de la baisse de la vol qui va faire baisser le prix du put.

ou sinon les put avec strike lointain (genre 14000 ) on une vol anormalement "basse" , => acheter ces put

=> si le smile réapparait => arbitrage .

Après encore faut il qu'il réapparaisse assez vite pour ne pas se faire bouffer par le théta et par le spread .

EDIT : Encore qqc de bizarre sur ton premier graph ton minimum est en 13500 alors qu'on est à 12090 ...

EDIT :
1.jpg
1.jpg (24.93 Kio) Vu 1322 fois
Et bizarement tous les puts ne sont pas affichés
2.jpg
2.jpg (10.6 Kio) Vu 1322 fois
pareil pour mes put proche de la monnaie . On passe 11200 à 12500 ah ok :musique:
Avatar du membre
Chino
Ewok
Messages : 93
Enregistré le : 05 mars 2014 08:22

Re: Cotation des options sur IG Market

Message non lu par Chino »

Salut maroxe et adibool,

Je m'intéresse aussi aux options CAC40 et j'ai trouvé la cotation sur le site d'euronext. Avec un code vba + Excel je récupère automatiquement les cotations et calcul la vol implicite avec 15min de différé. (cf fil de discussion sur les options, j'avais mis en lien mon premier fichier excel de récupération)

Peut être tu peux voir pour aller chercher tes cotations sur ce site ?

Voici la vol calculé à environ 15h :
Image jointe
Vol implicite