ProRealTime
Zone de développement des applications API, des logiciels et utilitaires développés par les membres du forum
Répondre Page 1 sur 1

API IG par l'exemple, récupération des cours, trades

par lr35 » 28 Jan 2015 14:39

Bonjour,

L'API IG est superbe, mais des exemples facilitent vraiment sa compréhension, ce sujet est là justement pour donner ces exemples.

La première étape est de créer une clé API de préférence avec un compte démo, via votre compte IG, chercher dans les menus !

Les commandes suivantes vont être passé via la commande curl, déjà présente sur les systèmes linux, téléchargeable sous windows, mais il faudra surement changer la façon d'enregistrer les variables, ou sinon, faut installer cygwin mais c'est pas à la portée du premier venu.

1/ Première étape, se connecter à son compte
Attention, ne pas faire avec un compte réel à partir d'un serveur mutualisé, l'administrateur/root pourrait retrouver la liste des commandes lancées.
NB: L'autre session éventuellement ouverte du compte seront fermé

Code: Tout sélectionner
# IG_HOST=api.ig.com
ou
# IG_HOST=demo-api.ig.com

# IG_LOGIN=votreLoginIG
# IG_PASSWORD=leMotdePasseDeVotreCompteIG
# IG_API_KEY=laCléAPIgenereViaLInterfacedIG

# DATA="{\"identifier\":\"$IG_LOGIN\",\"password\":\"$IG_PASSWORD\"}"

# curl -v --data "$DATA" "https://$IG_HOST/gateway/deal/session" -H "X-IG-API-KEY: $IG_API_KEY" -H "Content-type: application/json; charset=UTF-8"


Et là, c'est magique, vous récupérez un texte comme celui là :
Spoiler:
Code: Tout sélectionner
{"accountType":"cfd à risque limité","accountInfo":{"balance":29416.17,"deposit":0.0,"profitLoss":0.0,"available":29416.17},"currencyIsoCode":"EUR","currencySymbol":"E","currentAccountId":"XXXXX","lightstreamerEndpoint":"https://demo-apd.marketdatasystems.com","accounts":[{"accountId":"XXXXX","accountName":"Demo-CFD","preferred":true,"accountType":"cfd à risque limité"}],"clientId":"100000000","timezoneOffset":1,"hasActiveDemoAccounts":true,"hasActiveLiveAccounts":true,"trailingStopsEnabled":false,"reroutingEnvironment":null,"dealingEnabled":true}


Et surtout, sera utile pour la suite, les entêtes X-SECURITY-TOKEN et CST dont on va enregistrer les variables

Code: Tout sélectionner
# XST=leTexteRetournéParLEnteteX-SECURITY-TOKEN
# CST=leTexteRetournéParLEnteteCST


et on note le lightstreamerEndpoint retourné

Code: Tout sélectionner
# LSEP=LeLightstreamerEndpoint


Voilà, c'est tout pour le moment, la suite sera pour le début d'après midi avec au menu la connexion au serveur de stream, et la récupération de plusieurs cours simultanément


NB: Je n'ai pas encore retesté ci-dessous, je le met déjà pour les impatients

2/ On ouvre une session de streaming Lightstreamer

Code: Tout sélectionner
# DATA="LS_user=$IG_LOGIN&LS_password=CST-$CST|XST-$XST&LS_content_length=20000000"

# curl --data "$DATA" "$LSEP/lightstreamer/create_session.txt"


Là, des PROBE doivent s'afficher régulièrement, et la session reste ouverte

3/ On dit à lightstreamer que l'on veut les cours du DAX et du CAC

On regarde la sortie affiché par lightstreamer et on note :

Code: Tout sélectionner
# LS_SessionID=LaSessionIDPresenteDansLeDebutDeLaSortieDuStream
# LS_ControlAddress=LaControlAddressPresenteDansLeDebutDeLaSortieDuStream


A partir d'une autre fenêtre :

Je veux les cours du DAX dans la table 1 :
Code: Tout sélectionner
# LS_table=1
# IG_indice_code=CHART%3AIX.D.DAX.IMF.IP%3ATICK

# DATA="LS_session=$LS_SessionID&LS_table=$LS_table&LS_op=add&LS_mode=DISTINCT&LS_id=$IG_indice_code&LS_schema=UTM%20BID%20OFR

# curl --data "$DATA" "https://$LS_ControlAddress/lightstreamer/control.txt"

A cet instant, vous devriez voir les cours du DAX apparaitre dans la fenetre du stream de lightsteamer

Maintenant le CAC
Code: Tout sélectionner
# LS_table=2
# IG_indice_code=CHART%3AIX.D.CAC.IDF.IP%3ATICK
# DATA="LS_session=$LS_SessionID&LS_table=$LS_table&LS_op=add&LS_mode=DISTINCT&LS_id=$IG_indice_code&LS_schema=UTM%20BID%20OFR
# curl --data "$DATA" "https://$LS_ControlAddress/lightstreamer/control.txt"

Voilà !

Je ne veux plus les cours du DAX :
Code: Tout sélectionner
# LS_table=1

# DATA=LS_session=$LS_SessionID&LS_table=$LS_table&LS_op=delete
# curl --data "$DATA" "https://$LS_ControlAddress/lightstreamer/control.txt"

Je vous laisse deviner comment enlever les cours du CAC ;)

Re: API IG par l'exemple, récupération des cours, trades

par falex » 28 Jan 2015 14:47

Curl, voilà bien un truc que je n'utilise jamais.

L'exemple en JS/HTML marche bien aussi mais c'est vrai qu'il est très lourd à comprendre car découpé en X sous fichier .js.

Merci pour l'exemple, vivement la suite.

Re: API IG par l'exemple, récupération des cours, trades

par falex » 28 Jan 2015 15:02

Excellent article d'un agrs qui compare les libriare de récupération d'url de pytrhon dans le cas d'une communication vers un serveur REST
http://isbullsh.it/2012/06/Rest-api-in-python/

Re: API IG par l'exemple, récupération des cours, trades

par lr35 » 28 Jan 2015 15:44

J'ai mis à jour (sans tester réellement) pour permettre la récupération des cours.

Merci à la personne qui me confirmera ou non que cela fonctionne

@falex : le but est de donner des exemples reproductibles sous n'importe quel langage, pas de donner une interface complète

Re: API IG par l'exemple, récupération des cours, trades

par falex » 28 Jan 2015 16:01

Yop
Donc en lisant ta prose v2 : il est obligatoire de lancer une connexion STREAM pour avoir les cours en temps réel, impossible d'avoir les cours en REST ? (cf. mon autre post API REST)

Re: API IG par l'exemple, récupération des cours, trades

par lr35 » 28 Jan 2015 16:28

Je ne crois pas vraiment, mais on peut récupérer les bougies sans passer par le lightsteamer, alors peut être que le close de la dernière retourne la dernière valeur ?

cf :

labs.ig.com/rest-trading-api-reference/service-detail?id=72

/prices/{epic}/{resolution}/{numPoints}

Pour utiliser l'api IG, il faut les 3 headers suivant dans l'entête https :

X-IG-API-KEY: $IG_API_KEY
CST: $CST
X-SECURITY-TOKEN: $XST

Je crois avoir échoué à les récupérer quand j'avais testé il y a quelques semaines, mais une requête comme celle ci-dessous fonctionnait et tu peux la retester :

curl -v --data "$DATA" "https://$IG_HOST/gateway/deal/watchlists" -H "X-IG-API-KEY: $IG_API_KEY" -H "Content-type: application/json; charset=UTF-8" -H "CST: $CST" -H "X-SECURITY-TOKEN: $XST"

Re: API IG par l'exemple, récupération des cours, trades

par jized » 29 Jan 2015 02:35

lr35 a écrit:J'ai mis à jour (sans tester réellement) pour permettre la récupération des cours.
Merci à la personne qui me confirmera ou non que cela fonctionne

Bonjour lr35,
Quelle bonne idée d'utiliser curl :bravo:

Je confirme que ça marche très bien avec une machine sous linux,
mais avec 2 petites modifs : remplacer $controladress par $LS_ControlAddress, ou vice-versa,
et lire SessionId et ControlAddress sur la sortie et non dans les headers.

Il reste à gérer la détection d'erreurs et la reconnexion auto en cas de plantage du serveur d'IG (ça arrive de temps en temps).

J'utilise atuellement l'api en java de lightstreamer pour récupérer les ticks pour Takapoto, mais c'est vraiment lourdingue.
Je vais pouvoir écrire un programme bien plus léger qui va tourner en continu sur un serveur, manque plus que le temps de m'y mettre.
Et ça ouvre la porte à plein de programmes d'aide au trading.
:merci:

Re: API IG par l'exemple, récupération des cours, trades

par lr35 » 29 Jan 2015 12:52

J'aime bien aller au plus proche de la mécanique ;), c'est comme cela que je comprend le mieux comment ça marche.

Merci pour ta confirmation et tes remarques, j'ai corrigé.

J'ai fait un script en php (pas le langage le plus adapté, mais c'est celui que je connais le mieux) que je lance en ligne de commande sur un serveur dédié pour récupérer les cours depuis mi-décembre, j'ai eu un seul plantage au lancement un lundi matin à 00h01.
Depuis par précaution, je lance le script chaque matin vers 7h45 avec un timeout vers minuit, et je m'envoi un mail si la session lighteamer a duré moins de 12h. Cela a toujours fonctionné depuis mais via une machine chez soit, je comprend que cela puisse se couper.

Re: API IG par l'exemple, récupération des cours, trades

par maroxe » 29 Jan 2015 15:48

Pour ceux d'entre vous qui veulent utiliser python, ceci peut aide:

Code: Tout sélectionner
import requests
import json

# A remplir
ig_login = ""
ig_password = ""
ig_api_key = ""


ig_host="demo-api.ig.com"
url = "https://%s/gateway/deal/session" % ig_host


data={"identifier":ig_login,"password":ig_password}
headers={"X-IG-API-KEY": ig_api_key,  "content-type": "application/json; charset=UTF-8"}

r = requests.post(url, data=json.dumps(data), headers=headers)
 
print r.status_code
print r.text


Articles en relation
Créer serveur Raspberry récupération de cours
Fichier(s) joint(s) par falex » 24 Sep 2015 09:09 (48 Réponses)
api ig java , app d'exemple ne compile pas
Fichier(s) joint(s) par ticktack » 21 Avr 2017 19:20 (7 Réponses)
C# : Récupération historique en ticks
Fichier(s) joint(s) par bobbyO » 11 Aoû 2015 22:36 (16 Réponses)
TakaPeek2 : Récupération des ticks CAC, DAX et DOW
Fichier(s) joint(s) par takapoto » 29 Jan 2016 09:45 (70 Réponses)
TakaPeek3 : Récupération des ticks CAC, DAX et DOW
Fichier(s) joint(s) par maximedeflines » 18 Nov 2016 14:48 (73 Réponses)
Récupérer les cours des marchés IG sous Excel
par LPhilippe » 22 Aoû 2015 16:25 (10 Réponses)
Cours en temps réel sur le forum avec API iG ?
Fichier(s) joint(s) par jized » 26 Aoû 2015 16:56 (98 Réponses)
Récupérer les cours avec l'API IG Market et Python
par layzard » 24 Juil 2016 12:09 (54 Réponses)
Outil permettant d'énoncer les cours par synthèse vocale
Fichier(s) joint(s) par chad » 14 Aoû 2017 12:53 (12 Réponses)
IG python : distinguer working order - position en cours
Fichier(s) joint(s) par Nomade » 11 Déc 2017 19:14 (6 Réponses)

ProRealTime

Alors partagez-le 5 fois c'est bon pour la santé