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

Re: API REST / STREAM

par beni » 30 Sep 2015 15:48

Ok merci pour la réponse.
Effectivement ça peut être intéressant pour des historiques uniquement, pour les requêtes types /markets/ ou /positions/ je vois pas trop l'intérêt...

Re: API REST / STREAM

par FemtoTrader » 01 Oct 2015 07:31

Faire des calculs sur tes positions ouvertes pour gérer ton risque c'est quand même pas inutile, non ?

Re: API REST / STREAM

par beni » 01 Oct 2015 09:47

Si si carrément. En fait je me suis mal exprimé.
J'ai juste du mal a imaginé comment passer d'un JSON à un dataframe.
Pour moi le dataframe c'est pour des gros jeu de données type historique, par contre pour les positions en cours ou autres quelle est l'avantage du dataframe par apport au dictionnaire ?

Re: API REST / STREAM

par FemtoTrader » 01 Oct 2015 10:25

Déjà je souhaite corriger une de tes idées. Non le dataframe n'est pas pour des "gros" jeu de données" (du moins pas les "très gros"). Il faut quand même que ça tienne en mémoire. Par exemple pour des ticks avec un historique très long ça risque quand même d'être très compliqué d'utiliser les dataframes (d'où des projets comme Blaze http://blaze.pydata.org/ quand on passe à du "big data")

Pour ce qui est des positions ouvertes que tu en ais 0, 1 ou 100 le problème reste le même.
Avoir tes positions ouvertes et les récupérer dans un DataFrame te permet par exemple de cumuler les plus (ou moins) values latentes.
Si avec l'API tu récupères dans un dataframe nommé df_pos tes positions et que les plus/ou moins values sont dans la colonne "Profit" tu peux alors faire df_pos['Profit'].cumsum() (par exemple)
Si tu as plusieurs positions pour un même actif (hedging par exemple), tu peux les grouper par actif (si le nom de l'actif est dans la colonne "epic" par exemple à l'aide de "groupby" df.groupby("epic")["Profit"].cumsum() et tu obtiens une Pandas Series avec comme index les epic et comme valeur les profits (plus ou moins val) cumulés.

En fait, même pour des requêtes de types /markets/, renvoyer un DataFrame a un intérêt (ou du moins un dictionnaire dont certaines clés sont associées à un DataFrame) car ça permet avec le boolean indexing de filtrer sur un critère donné.

Si le résultat d'une requête de type /markets renvoie une liste de "Market data" qui est transformé par la lib en un DataFrame (nommé par exemple df_markets) tu peux ainsi faire

df_markets[df_markets["instrumentType "]=="CURRENCIES"] pour n'avoir un dataframe avec que les devises (par exemple)

Re: API REST / STREAM

par beni » 01 Oct 2015 10:50

Merci pour tes explications très très complètes.
Je comprends bien l'avantage des dataframes maintenant, tu m'as convaincu :mrgreen:

Seul point négatif selon moi: il me semble que la lib panda n'est pas livré avec python à moins d'utiliser une distribution type Canopy/anaconda, pour faire un SDK "grand public" ça peut poser problème... ou pas

Merci encore

Re: API REST / STREAM

par FemtoTrader » 01 Oct 2015 11:09

Non il FAUT utiliser une distribution scientifique de Python (surtout si on veut faire du trading donc de l'analyse de données
Je conseille Anaconda car tu peux facilement switcher entre Python 2 et Python 3. De plus Continuum soutient beaucoup l'écosystème scientifique de Python (PyData, ...)

Le projet avec l'API Stream d'IG tourne (chez moi) désormais en Python 2 et Python 3.

Il faudrait que Weswit (qui développe Lightstreamer accepte un Pull Request pour faire de https://github.com/Weswit/Lightstreamer-example-StockList-client-python une bibliothèque et pas un simple exemple)
https://github.com/Weswit/Lightstreamer-example-StockList-client-python/pull/6
S'il ne le fait pas je forkerai pour avoir donc une blibliothèque client Lightstreamer Python

ça devrait permettre de virer igls.py qui ne tourne pas avec Python 3 et qui me semble bien complexe pour pas grand chose

Et ça donne ça au final...
https://github.com/ig-python/ig-markets-stream-api-python-library/issues/10

Et lorsqu'on s'abonne à deux actifs tout arrive bien dans la même fonction
voir on_price_update
où on récupère l'identifiant de l'actif (item_update["name"])
mais aussi les prix *item_update["values"]["BID"] par exemple

Je conseille d'utiliser Python 3 par ce que c'est plus propre (gestion de l'unicode notamment).
Et avoir un environnement secondaire en Python 2 que l'on crée via
conda create -n py2 python=2.7 anaconda

on peut basculer sur Python 2 via
source activate py2

puis revenir en Python 3 via
source desactivate

Re: API REST / STREAM

par falex » 01 Oct 2015 11:17

Ah oui ce serait pas mal comme évolution.

As-tu testé combien de sous-jacent peuvent être souscrits dans une seule Table LS ?

Re: API REST / STREAM

par FemtoTrader » 01 Oct 2015 11:34

Non je n'ai pas testé ça

Re: API REST / STREAM

par falex » 01 Oct 2015 11:43

FemtoTrader a écrit:Non il FAUT utiliser une distribution scientifique de Python (surtout si on veut faire du trading donc de l'analyse de données ...


Mouais enfin là tu y vas un peu fort je trouve. Pour faire toute les variantes de soft de trading ... les limitations aux-quelles nous avons du fair face n'était pas tellement dans le traitement de donnée mais plutot dans la bonne interaction avec les serveurs d'IG.

Peut-être que le programme de Béni qui fait de l'analyse est plus enclins à utiliser ce genre de distribution.

Re: API REST / STREAM

par Nomade » 01 Oct 2015 11:46

bonjour
sans parler de compatible ou pas avec python 3
je ne comprends pas la difference avec ce qu'il y a actuellement, aujourd'hui si on souscrit a plusieurs actifs tout arrive dans la meme fonction, avec l'identifiant et les data demandes non ? Le resultat est le meme

Les dataframes (que je ne connais pas du tout :) ) sont peut etre plus parlant mais en terme de performace qu'est ce que ca donne ?
si on veut pouvoir reagir au tick par tick, il faut pouvoir finir son cycle de calcul entre 2 ticks et souvent la lisibilite/facilite ne va pas de pair avec la rapidite ... pour optimiser mon code, suivant les situations je suis avec des listes/dict ou des tableaux numpy (par ex perf de la fonction min en fonction de la taille des tableaux)

Articles en relation
[PYTHON] Script API IG STREAM + REST
par FemtoTrader » 14 Sep 2015 21:50 (29 Réponses)
LS_snapshot (stream)
par swingwin » 22 Sep 2015 21:57 (12 Réponses)
REST , maj
par swingwin » 21 Aoû 2015 18:23 (3 Réponses)
IG API : Augmentation du nombre de requet REST
par falex » 04 Aoû 2016 10:31 (9 Réponses)
ig rest api - heure des ouvertures et clotures quotidiennes
par falex » 22 Avr 2015 14:50 (3 Réponses)
clarification signification "#" et "" dans les flux stream
par musicae » 23 Sep 2016 15:01 (3 Réponses)

ProRealTime

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