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

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 10:56

ok

tu connais Git, GitHub ?

Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 10:59

Oui ... et non.

Je te donne ma modification et tu peux faire un update si tu veux. Je n'utiliserais pas github trop compliqué dans mon cas.

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 11:22

ça n''est pas compliqué du tout ! (enfin pas aussi compliqué qu'on ne le pense)

On peut faire ça par l'interface web
(surtout si tu n'as qu'un fichier à modifier)

Va sur le projet
https://github.com/ig-python/ig-markets-stream-api-python-library

Clique sur fork
Ta version du projet est sur
https://github.com/ton_username/ig-markets-stream-api-python-library

Reviens sur
https://github.com/ig-python/ig-markets-stream-api-python-library

Va sur le fichier à modifier

Clique sur edit ("Edit the file in your fork of this project")

Colle ton code.

ça permet du coup d'identifier rapidement la différence entre le code d'origine
et la modif (diff)

Tu valide en allant sur
"Create a new branch for this commit and start a pull request"
Donne un nom à la branche
et voilà...

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 11:40

Tu peux ensuite aller dans ton projet.
Choisir ta nouvelle branche. Editer le code, ...
ton Pull Request sur le projet upstream sera automatiquement mis à jour
avec tes nouveaux commits

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 11:59

Il ne doit pas y avoir que

self.on_update.fire(item_id, fields)

qui devient

self.on_update.fire(item_id, fields, self.item_ids)

car si je fais cette modif je n'ai plus la MAJ des ticks

Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 12:09

heu attend j'ai du aussi modifier l'appel je regarde (dans mon main.py)

Ah bizarre. Justement je n'ai pas modifié l'appel de la fonction.

Dans la L3 souscription à une table est la même depuis le début :

Code : #

# Binding sur les differents flux de stream et fonctions associés
        priceTable = igls.Table(client,
                                mode=igls.MODE_MERGE,
                                item_ids='MARKET:%s' % personal.epic,
                                schema="OFFER BID",
                                )

priceTable.on_update.listen(events.process_price_update)
Avec la modification je renvoi simplement item_ids comme champs supplémentaire de retour en plus du Offer et du Bid.

Si tu fais un "print" bestiale de chaque message reçu ça passe ?

---

La fonction qui est bindé avec la table reçoit 3 arguments au lieux de 2 :

Code : #

def process_price_update(item, myUpdateField, item_ids):
---

Je viens de faire un "compare" entre igls utilisé au début et la dernière mouture, y'a bien jsute le champ self.item_ids qui a bougé, tout le reste est 100% identique.

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 13:03

Hum ... il y a quand même un coac

si tu t'abonne à plusieurs flux (GBPUSD et USDJPY par exemple)

Code : #

    priceTable = igls.Table(client,
        mode=igls.MODE_MERGE,
        item_ids='L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP',
        schema='UPDATE_TIME BID OFFER CHANGE MARKET_STATE',
        item_factory=lambda row: tuple(float(v) for v in row)
    )

    priceTable.on_update.listen(process_price_update)
je m'attendais à récupérer aussi l'epic dans process_price_update.

comment faire en sorte que process_price_update reçoive les prix de plusieurs actifs
ainsi que l'epic en question?

par ce que je me retrouve avec

Code : #

(py2)pc:ig-markets-stream-api-python-library femto$ python sample.py
('New state:', 'connecting Lightstreamer session')
('New state:', 'connected Lightstreamer session')
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:33', u'120.283', u'120.291', u'0.550', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:15', u'1.52037', u'1.52057', u'0.00550', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:34', u'1.52041', u'1.52051', u'0.00549', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:35', u'1.52042', u'1.52052', u'0.00550', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:36', u'1.52037', u'1.52057', u'0.00550', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:36', u'1.52041', u'1.52051', u'0.00549', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:37', u'120.284', u'120.292', u'0.551', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:37', u'120.285', u'120.293', u'0.552', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:37', u'120.287', u'120.295', u'0.554', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:37', u'120.288', u'120.296', u'0.555', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:37', u'120.289', u'120.297', u'0.556', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:39', u'120.290', u'120.298', u'0.557', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:39', u'1.52037', u'1.52057', u'0.00550', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:39', u'120.289', u'120.297', u'0.556', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:41', u'120.288', u'120.296', u'0.555', u'TRADEABLE']
price update for L1:CS.D.GBPUSD.cfd à risque limité.IP L1:CS.D.USDJPY.cfd à risque limité.IP= [u'11:53:41', u'120.289', u'120.297', u'0.556', u'TRADEABLE']
quand je fais

Code : #

def process_price_update(item, myUpdateField, item_ids):
    print("price update for %s= %s" % (item_ids, myUpdateField))
je voudrais que tout arrive dans la même fonction pour ensuite utiliser un système de messaging interne (RabbitMQ par exemple) mais pour ça j'ai besoin du prix et de l'epic.

Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 13:10

Oulà attend, tu es sur que tu peux souscrire à deux flux de prix avec cette syntaxe ?
J'ai pas trouvé comment avoir plusieurs epic dans le mêms flux LS.

D'autre part, il ne me semble pas pertinent de sosucrire ainsi, la fréquence des ticks étant "propre" à chaque sous-jacent. Qu'est censé te renvoyer ig si tu as un tick pour GBPUSD et pas de tick au même moment pour USDJPY ???

Pour chaque epic, je lance une souscription de table, comme décrit précedement.

---

Comme je souscrit à un seul epic par Table,
J'extrait la droit de L1: pour avoir l'epic correspondant.
J'ai aussi codé le cas où le mot clef serait MARKET ou CHART

...

En étudiant ton cas d'usage, ça confirme bien ce que je pense, ce n'est pas forcément pertinent de souscrire à plusieurs epic dans le même flux, à cause des problèmes d'identifications de l'epic

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 13:32

Si tu as un tick pour GBPUSD ça lance la fonction (même si tu n'a pas de tick pour USDJPY)

Le problème c'est comment faire en sorte de récupérer dans une seule fonction les prix et l'epic ???

Re: [PYTHON] Script API IG STREAM + REST

par Nomade » 30 sept. 2015 14:15

Si je comprend ce que tu veux faire :

avec plusieurs souscriptions en ecoutant chacune, par ex dans main de L3:

Code : #

        priceTable = igls.Table(globalvar.client_ls,
                                mode=igls.MODE_MERGE,
                                item_ids='MARKET:CS.D.GBPUSD.cfd à risque limité.IP ',
                                schema="OFFER BID",
                                )
        priceTable2 = igls.Table(globalvar.client_ls,
                                mode=igls.MODE_MERGE,
                                item_ids='MARKET:CS.D.USDJPY.cfd à risque limité.IP',
                                schema="OFFER BID",
                                )
        priceTable.on_update.listen(events.process_price_update)
        priceTable2.on_update.listen(events.process_price_update)
avec dans process_price_update:

Code : #

    print(item, myUpdateField, item_ids)
tu as en output
(1, [u'1.51771', u'1.51761'], 'MARKET:CS.D.GBPUSD.cfd à risque limité.IP ')
(1, [u'1.51772', u'1.51762'], 'MARKET:CS.D.GBPUSD.cfd à risque limité.IP ')
(1, [u'120.244', u'120.236'], 'MARKET:CS.D.USDJPY.cfd à risque limité.IP')
(1, [u'1.51773', u'1.51763'], 'MARKET:CS.D.GBPUSD.cfd à risque limité.IP ')
(1, [u'120.241', u'120.233'], 'MARKET:CS.D.USDJPY.cfd à risque limité.IP')
(1, [u'1.51774', u'1.51764'], 'MARKET:CS.D.GBPUSD.cfd à risque limité.IP ')

Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 14:20

C'est ainsi que fonctionne L3 à l'heure actuel (la souscription se faisant à la volée en fonction de ce que l'on a en portif et des changements de sous-jacent)

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 14:51

Ok donc

Code : #

    for item_id in ['L1:CS.D.GBPUSD.cfd à risque limité.IP', 'L1:CS.D.USDJPY.cfd à risque limité.IP']:
        priceTable = igls.Table(client,
            mode=igls.MODE_MERGE,
            item_ids=item_id,
            schema='UPDATE_TIME BID OFFER CHANGE MARKET_STATE',
            item_factory=lambda row: tuple(float(v) for v in row)
        )
        priceTable.on_update.listen(process_price_update)
ce qui est quand même étrange c'est le "s" à la fin de item_ids

Savez-vous où récupérer une liste des "epic" ?

La question m'a été posée (elle est intéressante je trouve)
https://github.com/ig-python/ig-markets-stream-api-python-library/issues/6
mais je n'en sais rien !

Je vois 2 solutions:
utiliser les watchlists ou faire une recherche par terme

Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 14:55

DAns le forum on a déjà répondu à cette question.

Tu peux appeler la variable toto si tu veux ;-)


Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 16:33

Tu es trop bon béni :-D on lu doit bien ça ;)

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 17:10

Merci beni si je comprend bien la réponse
qui permet d'obtenir la liste
https://www.andlil.com/api/Epics/log_epics.txt

est dans le code C# ;-)
https://www.andlil.com/api/Epics/Source ... Program.cs

en scrappant une page web c'est bien ça ?

c'est pas en utilisant l'API

Re: [PYTHON] Script API IG STREAM + REST

par beni » 30 sept. 2015 17:52

Ah tu voulais la méthode !
A vrai dire je ne me suis jamais intéressé au code posté par brucy, mais apparement t'as besoin d'un token donc d'une clé API.

--
En parcourant vite fait le code et le sujet effectivement ça ne passe pas par des requêtes get et tout et tout...
Je crois que jized utilise /marketnavigation/ et /marketnavigation/{nodeId} et donc l'API, avec une tempo entre les requêtes pour éviter de ce faire kicker par ig.

Re: [PYTHON] Script API IG STREAM + REST

par falex » 30 sept. 2015 17:54

J'ai fait le même exercice, et j'en ai fait la même conclusion, il faut mettre ses identifiants de comptes et ensuite ça récupère via l'aPI.

Seul limite tu ne vois que les cfd à risque limité accessible dans ton pays,

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 30 sept. 2015 18:34

ok merci.
ça vaut peut-être le coup que je teste ça en Python (pour le fun ;-) )
parce que le seul code que j'ai vu c'est du C#, il y a quelqu'un qui a ça en Python ?

Re: [PYTHON] Script API IG STREAM + REST

par FemtoTrader » 02 oct. 2015 17:09

Fusion du projet REST avec le projet STREAM, organisation GitHub ig-python créée

ça se passe ici

https://github.com/ig-python/ig-markets-api-python-library

Sujets similaires
API REST / STREAM
Fichier(s) joint(s) par FemtoTrader » 22 sept. 2014 10:35 (178 Réponses)
ig rest api - heure des ouvertures et clotures quotidiennes
par falex » 22 avr. 2015 14:50 (3 Réponses)
IG API : Augmentation du nombre de requet REST
par falex » 04 août 2016 10:31 (9 Réponses)
Aide pour API REST IG
par DarkPoule » 16 mai 2021 00:36 (46 Réponses)
Récupérer les cours avec l'API IG Market et Python
par Amarantine » 24 juil. 2016 12:09 (55 Réponses)
Des API pout télécharger les données en python
par hamza123 » 19 mai 2017 10:18 (2 Réponses)
API IB TWS comment stream flux future Dax
par shuraver » 28 mai 2020 22:07 (3 Réponses)
REST , maj
par brucy » 21 août 2015 18:23 (1 Réponses)
Andlil 100% sans mouchard publicitaire ou script de suivi
Fichier(s) joint(s) par frigolite » 19 avr. 2015 14:19 (6 Réponses)
Script logiciel pour automatiser des actions sur le web
par Uncharted » 17 nov. 2015 23:36 (19 Réponses)