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

Utilisation des API IG avec C#

par takapoto » 04 juin 2015 08:36

On a commencé à en parler dans le sujet http://www.andlil.com/forum/utilisation ... ml#p245562 mais comme il est consacré à Excel, je poursuis la discussion dans ce nouveau sujet.

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 08:36

Les messages précédents consacrés à C# sont les suivants :
http://www.andlil.com/forum/utilisation ... ml#p253722
- a écrit :Bonjour,

Bon ça y est, non sans mal j'ai enfin réussi à générer les exemples d'applications en C# .NET fournis avec les API IG sur la page :
http://labs.ig.com/sample-apps

Les prérequis sont les suivants :
- Windows 7 SP1 minimum (32 ou 64 bits)
- Framework .NET 4.5 installé
- Visual Studio 2012
- Les packages NuGet

Et là ça marche, la génération des applications fonctionne nickel. Les exemples donnés sont déjà pas mal. Ils exploitent les 2 interfaces : REST et stream de l'API IG.
Donc maintenant j'attends Lundi que le marché se mette à bouger toutes les données. Et j'ai hâte de voir les temps de réponse et la rapidité.
Donc au final je ne suis plus très loin de faire mon interface personnalisé. Une vrai station de trading.
Donc à partir de Lundi je me mets à définir un cahier des charges de station de trading adaptée à mon style et à mes besoins. Pour ceux qui sont intéressés, il y aura une interface des données vers Excel (au moins).

A+
JF

Pour information les écrans proposés par les 2 applications exemples fournis par IG. Ce n'est pas très sexy comme présentation (c'est plus pour un informaticien), mais par contre toutes les données fonctionnelles sont là. Donc il n'y a plus qu'à faire une station de trading sexy.

Application Winforms :
Appli Winforms (1).JPG
Application WPF
Appli WPF (1).JPG
- a écrit :Comme prévu, j'ai testé les exemples d'applications C# .NET en temps réel.
Les temps de réaction sont excellents (au visuel, c'est à l'identique de la L3).
Rien d'étonnant puisque ça exploite la même interface API IG (requêtes HTTP).
Les abonnements aux flux Stream ont l'air tout aussi rapides que pour la L3.

Donc maintenant, il n'y a pas photo, je me lance dans le développement de ma station de trading en utilisant les composants .NET de l'API IG.
Je suis en plein maquettage de l'écran de trading.
Pour infos ci-dessous les écrans saisis en temps réel correspondant aux exemples fournis par IG.
A+
JF

Application type Winforms :
Spoiler:
API NET Winforms (watchlist).JPG
Application type WPF.
Spoiler:
API NET WPF (watchlist).JPG
API NET WPF (select).JPG
takapoto a écrit : Bonjour -,

De mon coté, j'ai également commencé l'écriture de mon outil en C#.

J'ai un peu débroussaillé la manière d'appeler les API d'IG et j'ai regroupé sous un même projet plusieurs classes permettant d'y accéder.

Si ça t'intéresse, pour gagner du temps, c'est ici :
https://www.dropbox.com/sh/vhyrd4xliy49g1d/AADh3VoyRN6VWUqo4pDgsj_ga?dl=0

Ce n'est pas encore complet, mais ça permet déjà de se connecter et de streamer les cours.

Edit :
Le mode d'emploi est dans TakaIGGlobales.cs
- a écrit :Merci Takapoto.
Je regarde tout ça demain.
Il ne me reste plus que 4 jours vraiment libre pour avancer sur le sujet.
Mais avant de commencer le dév., je vais me faire une petite maquette sur une feuille. J'ai besoin que l'appli soit ergonomique, adaptée à mon besoin, etc... (et surtout qu'elle soit sexy et rapide, car une appli pourrie et lente avec un 'look and feel' de daube, ça ne donne pas envie de trader)
A+
JF

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 08:50

J'ai continué à explorer le SDK ig pour C# et j'ai trouvé qu'il n'était pas complet.

Il manque :
- La possibilité de se connecter avec un compte réel (l'url "demo-api" est codée en dur dans IGRestService.cs)
- La possibilité d'utiliser un proxy
- Des exemples pour le passage d'ordres

Ceci dit, il est à préciser que je découvre le C# ainsi que ces techniques HTTP et mes conclusions sont peut-être erronées..

En tout état de cause, comme on n'est jamais si bien servi que par soi-même, je vais réécrire ces fonctions de base : ça sera plus long, mais formateur.

Re: Utilisation des API IG avec C#

par falex » 04 juin 2015 08:55

Tous les exemples d'ig ont "hardcode" l'URL de demo...

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 09:06

Oui, c'est normal qu'on utilise l'URL de démo par défaut.
Donc que ce soit proposé dans les exemples ne me gène pas.
Mais j'aurai bien aimé que ce ne soit pas le cas dans l'API.
(sauf s'il y a une subtilité du C# que j'ignore, on ne peut pas modifier l'exemple pour accéder à un compte réel. Pour y arriver, j'ai du modifier le source de L'API, ce qui est gênant en cas d'évolution de celle-ci)

Re: Utilisation des API IG avec C#

par falex » 04 juin 2015 09:41

Qu'entends tu par l'API ? l'API ce n'est pas du code sur nos machines, l'API c'est une interface rien d'autre.

l'API est un service disponible et publié côté serveur ig, et il nous mettent la doc à dispo pour y acceder, je ne vois pas ce que tu veux dire ?

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 10:32

Pour moi, API, c'est "Application Programming Interface", c'est à dire une bibliothèque logicielle comportant un ensemble des fonctions mises à disposition par IG pour servir d'interface à leur service.

Si tu préfère utiliser ce terme pour la partie du code qui est du coté serveur, je parlerai alors de SDK (Software Development Kit).

Dans le cas précis du C#, cette bibliothèque, mise à disposition par IG, s'appelle IGPublicPcl.

Elle propose des fonctions d'accès aux services REST et STREAM.

Je la distingue des exemples proposés, qui eux, se contentent d'illustrer la manière d'utiliser cette bibliothèque.

Les fonctions du SDK sont des fonctions de haut niveau qui encapsulent les appels aux services de IG.

Par exemple, pour établir une connexion, le SDK C# de IG, propose la fonction :
Authenticate(AuthenticationRequest ar, string apiKey)
qui évite de connaître le protocole détaillé de connexion REST.

Pour se connecter en C#, on peut simplement écrire :
var request = new AuthenticationRequest();
request.identifier = identifier;
request.password = password;
var authenticationResponse = await igRestApiClient.Authenticate(request, apiKey);


Contrairement à ce qui est fait dans L3 où vous avez dû coder les requêtes HTTP en détail et donc connaître le protocole exact (quoi mettre dans le HEADER, quoi mettre dans le BODY, etc...) :
headers = {'content-type': 'application/json; charset=UTF-8', 'Accept': 'application/json; charset=UTF-8', 'version':1, 'X-IG-API-KEY': personal.api_key}
body = {"currencyCode": globalvar.currencyCode, "epic": personal.epic, "expiry": expiry, "direction": direction, "size": reqDealSize, "forceOpen": isForceOpen, "guaranteedStop": False, "orderType": "MARKET", "limitDistance": TPpoint, "stopDistance": SLpoint, "guaranteedStop": isStopGuaranteed}
r = requests.post(urls.neworderurl, data=json.dumps(body), headers=urls.fullheaders, proxies=personal.proxies)
if r.status_code == 200:


Bref, j'aurais voulu éviter cela et aller plus vite en utilisant le SDK proposé par IG, mais comme il n'est pas complet, c'est loupé !

Re: Utilisation des API IG avec C#

par falex » 04 juin 2015 10:54

Oui ok pour la sémantique. Effectivement ce que met à dispo ig est plus un SDK, je te rejoins.

Arf tu sais la partie url est en fait très simple.
Le headers utilisé est toujours le même sauf dans deux cas :
A l'authent : c'est normal on a pas encore la clef de session :-)
Pour la fonction HTTP DELETE : Y'a un bug chez ig donc tu dois faire un POST avec dans le header le mot clef _delete.

Aprsè l'appel de chaque url a besoin d'un certains nombre de paramètre que tu devras regarder pour écrire ton programme de toute façon (où passer en paramètre de ta biblio de fonction IGPublicPcl.

Je comprends ta deception par rapport à cette biblio ...

La doc D'ig est relativement clair et une fois que tu auras intégrer les deux trois mécanisme tu auras vite oublié cet épisode :-)

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 11:13

Ce n'est évidemment pas pour toi que j'ai un peu développé la sémantique, mais pour des éventuels lecteurs moins avertis pour qu'ils comprennent de quoi on parle.

Merci de tes tuyaux.

Je ne suis pas vraiment déçu par le SDK (j'ai l'habitude des boîtes noires incomplètes et en plus, là, on le source), c'est juste que je n'ai jamais travaillé avec le WEB, donc je ne connais pas le protocole HTTP et je ne voulais pas passer trop de temps à l'étudier en détail.

Mais je vais le faire en m'inspirant de L3 pour écrire mes fonctions de base en C# (que je mettrais bien sûr à disposition si qq est intéressé).

Re: Utilisation des API IG avec C#

par falex » 04 juin 2015 12:47

HTTP c'est 4 directives :
GET
put
POST
DELETE

pour toutes requetess faut envoyer un header (c'est là que se trouve un certain nombre d'info comme ta clef de session)
et pour les paramètre de la "requêtes" c'est :
- soit dans l'url pour un GET
- soit dans le body pour les 4 autres.

Voilà avec ça tu sais causer avec un serveur web ...

Re: Utilisation des API IG avec C#

par raiden500 » 04 juin 2015 14:36

Salut, question tres ballot, mais est ce que c'est possible en codant en C de pouvoir faire ceci:
Que les ordres puissent s'executer entre 9h et 17h et pas en dehors de ces 2 plages horraires.
Et par exemple ouverture de position des qu'on touche le PP du jour et fermeture apres 1 point.
Mais si par exemple on passe les PP mais qu'il est 8h50 bah qu'il ne se passe rien, et ainsi eviter le spread de 2 points !

Voila c'est surtout par curiosité et pour savoir si c'est possible :)

Re: Utilisation des API IG avec C#

par Tartempion » 04 juin 2015 14:37

falex a écrit :Oui ok pour la sémantique. Effectivement ce que met à dispo IG est plus un SDK, je te rejoins.

Arf tu sais la partie url est en fait très simple.
Le headers utilisé est toujours le même sauf dans deux cas :
A l'authent : c'est normal on a pas encore la clef de session :-)
Pour la fonction HTTP DELETE : Y'a un bug chez IG donc tu dois faire un POST avec dans le header le mot clef _delete.

Aprsè l'appel de chaque url a besoin d'un certains nombre de paramètre que tu devras regarder pour écrire ton programme de toute façon (où passer en paramètre de ta biblio de fonction IGPublicPcl.

Je comprends ta deception par rapport à cette biblio ...

La doc D'IG est relativement clair et une fois que tu auras intégrer les deux trois mécanisme tu auras vite oublié cet épisode :-)
Ah c'est bon à savoir le coup du DELETE ! :merci: Falex.
J'avais contourné le pbm pour fermer une position mais ça peut servir pour d'autres DELETE au cas où…

edit 13/06/2015 : Après vérification la requete DELETE fonctionne bien chez moi. En tout cas pour supprimer une watchlist par exemple c'est à dire quand il n'y a pas de body à joindre. Par contre c'est vrai que la requete DELETE pour fermer une position est pour l'instant impossible pour moi car je ne peux pas mettre un body (euh dans tous les sens du terme :D ) dans une requete DELETE. C'est pas réglo dans la définition formelle de la requete DELETE . Cf recherche Google. Mais bon, pour fermer la position y a moyen de contourner le pbm heureusement.

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 14:48

raiden500 a écrit :Salut, question tres ballot, mais est ce que c'est possible en codant en C de pouvoir faire ceci:
Que les ordres puissent s'executer entre 9h et 17h et pas en dehors de ces 2 plages horraires.
Et par exemple ouverture de position des qu'on touche le PP du jour et fermeture apres 1 point.
Mais si par exemple on passe les PP mais qu'il est 8h50 bah qu'il ne se passe rien, et ainsi eviter le spread de 2 points !

Voila c'est surtout par curiosité et pour savoir si c'est possible :)
A partir du moment où on est connecté à IG, on peut faire ce que l'on veut, notamment ce que tu décris...
C'est d'ailleurs pour cela que je développe mon outil, dans l'optique d'effectuer du trading automatique.
Sinon, pour passer des ordres manuellement, il y a déjà L3.

Re: Utilisation des API IG avec C#

par raiden500 » 04 juin 2015 15:14

takapoto a écrit :
raiden500 a écrit :Salut, question tres ballot, mais est ce que c'est possible en codant en C de pouvoir faire ceci:
Que les ordres puissent s'executer entre 9h et 17h et pas en dehors de ces 2 plages horraires.
Et par exemple ouverture de position des qu'on touche le PP du jour et fermeture apres 1 point.
Mais si par exemple on passe les PP mais qu'il est 8h50 bah qu'il ne se passe rien, et ainsi eviter le spread de 2 points !

Voila c'est surtout par curiosité et pour savoir si c'est possible :)
A partir du moment où on est connecté à IG, on peut faire ce que l'on veut, notamment ce que tu décris...
C'est d'ailleurs pour cela que je développe mon outil, dans l'optique d'effectuer du trading automatique.
Sinon, pour passer des ordres manuellement, il y a déjà L3.
Serieux serieux ??
Ahh mais je crois que je vais m'y mettre au C !
Tu saurais me dire ce qu'il faut apprendre pour pouvoir faire ça ?
J'avais voulu commencer a apprendre le python mais bon, faut quand même s'attacher malgré qu'on dise qu'il est simple !

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 15:37

Si tu dois partir de zéro, je te conseille python car tu as déjà un modèle avec l'outil L3 dont les sources sont disponibles.

Re: Utilisation des API IG avec C#

par falex » 04 juin 2015 16:15

Tout est possible comme le dit takapoto, après c'est juste une volonté de le programmer avec des bons outils.

Si t'a jamais codé de ta vie, le C n'est pas ce qu'il y a de plus accessible, je confirme aussi.

J'ai pas du aligner une ligne de C depuis 20 ans et je m'en porte très bien :musique:

Re: Utilisation des API IG avec C#

par takapoto » 04 juin 2015 23:09

Merci -, je le mets en pratique dès demain !

Re: Utilisation des API IG avec C#

par bobbyO » 05 juin 2015 13:43

Hello,
Très bonne idée cette file !
Je me suis également lancé sur un programme C# pour du trading semi-automatique : alerte sur détection d'une configuration graphique donnée, le reste se faisant manuellement
-+

Re: Utilisation des API IG avec C#

par takapoto » 05 juin 2015 14:02

Salut bobbyO,

Sans dévoiler tes stratégies, peux-tu développer les aspects techniques ?

Récupération des cours ig ?
Affichage des graphiques ?
Bibliothèques externes ?
etc...

Je suis curieux des techniques utilisées par les autres car cela ouvre des horizons nouveaux pour moi (cf les messages de - et falex)

Re: Utilisation des API IG avec C#

par takapoto » 05 juin 2015 18:29

Merci -
J'avais mis la file en favoris mais je n'avais pas vu les nouveaux liens...

Sujets similaires
Utilisation Excel avec API IG
Fichier(s) joint(s) par VK_Trader » 15 mai 2015 02:16 (46 Réponses)
API IG : Utilisation de CURL
par Tartempion » 14 sept. 2016 17:00 (7 Réponses)
Utilisation de l'API d'IB pour récupérer les prix en TR
Fichier(s) joint(s) par cafeiine2023 » 26 mai 2022 15:08 (3 Réponses)
Utilisation du "Stop"
par Amarantine » 02 août 2012 23:00 (6 Réponses)
PRT une utilisation unique
par falex » 18 janv. 2014 11:42 (7 Réponses)
Utilisation de Fibonacci
Fichier(s) joint(s) par Sagal » 26 févr. 2014 12:49 (18 Réponses)
Utilisation IG
par sitka » 12 mai 2015 14:02 (3 Réponses)
L3 : Votre utilisation ?
par falex » 09 sept. 2015 17:38 (35 Réponses)
Problème sur utilisation Thunderbird
par DarthTrader » 05 déc. 2015 09:49 (6 Réponses)
utilisation CCleaner
par Husic.M » 17 janv. 2016 11:19 (14 Réponses)