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 janv. 2015 13: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 : #

# 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 : #

{"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 à risque limité","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 : #

# XST=leTexteRetournéParLEnteteX-SECURITY-TOKEN
# CST=leTexteRetournéParLEnteteCST
et on note le lightstreamerEndpoint retourné

Code : #

# 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 : #

# 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 : #

# LS_SessionID=LaSessionIDPresenteDansLeDebutDeLaSortieDuStream
# LS_ControlAddress=LaControlAddressPresenteDansLeDebutDeLaSortieDuStream
A partir d'une autre fenêtre :

Je veux les cours du DAX dans la table 1 :

Code : #

# 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 : #

# 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 : #

# 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 janv. 2015 13: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 janv. 2015 14: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 janv. 2015 14: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 janv. 2015 15: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 janv. 2015 15: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 janv. 2015 01: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 janv. 2015 11: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 janv. 2015 14:48

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

Code : #

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


Sujets similaires
api ig java , app d'exemple ne compile pas
Fichier(s) joint(s) par ticktack » 21 avr. 2017 19:20 (6 Réponses)
Créer serveur Raspberry récupération de cours
Fichier(s) joint(s) par falex » 24 sept. 2015 09:09 (43 Réponses)
Cours en temps réel sur le forum avec API iG ?
Fichier(s) joint(s) par jized » 26 août 2015 16:56 (96 Réponses)
Récupérer les cours avec l'API IG Market et Python
par Amarantine » 24 juil. 2016 12:09 (55 Réponses)
Récupération de données sur Actions
par kieran » 16 déc. 2014 18:08 (2 Réponses)
C# : Récupération historique en ticks
Fichier(s) joint(s) par bobbyO » 11 août 2015 22:36 (14 Réponses)
falex > récupération de mon cash (journal)
Fichier(s) joint(s) par dede6363 » 05 sept. 2015 15:42 (532 Réponses)
TakaPeek2 : Récupération des ticks CAC, DAX et DOW
Fichier(s) joint(s) par Daeiondf » 29 janv. 2016 08:45 (71 Réponses)
TakaPeek3 : Récupération des ticks CAC, DAX et DOW
Fichier(s) joint(s) par takapoto » 18 nov. 2016 13:48 (92 Réponses)