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

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)

Re: API REST / STREAM

par falex » 01 oct. 2015 11:48

Non,

aujourd'hui tu as un thread par table
avec la syntaxe de Femto, tu as X epic dans un thraed

Re: API REST / STREAM

par FemtoTrader » 01 oct. 2015 11:56

de mémoire on récupérait aussi avec igls les données sont la forme d'une liste
ici ça arrive sous la forme d'un dictionnaire. C'est plus facilement pour savoir qui est qui.

Re: API REST / STREAM

par Nomade » 01 oct. 2015 12:11

Falex> Non je ne pense pas, reprends les syntaxes sur l'autre file (script-api-ig-stream-rest-t10091-20.html) ou simplement dans la nouvelle version de la L3 (fait un print au debut de priceUpdate), je pensais aussi qu'on "ecrasait" l'ancienne table mais en fait non.
Dans igls en fait il ajoute ta nouvelle table a la liste interne a igls des tables a updater mais les anciennes ne sont pas detruites ( la fonction delete d'igls n'est jamais appelee)
Tu commences avec un epic mais quand tu changes d'epic tu recois les deux et ainsi de suite au fur et a mesure que tu changes d'epic

(je voulais te le signaler hier mais pas je n'ai eu le temps)

Re: API REST / STREAM

par beni » 01 oct. 2015 12:24

Je rejoins Falex, je ne pense pas qu'utiliser une dist scientifique soit obligatoire parce que trading ne rime pas forcément avec analyse de données. Après tout dépend du type d'analyse mais pour des moyennes, profit factor, %...(ce que fait Report Tool) pas la peine de s'encombrer...bien que j'utilises numpy mais chut...

Après je suis un peu echaudé par ce genre de dist car mes premiers pas en python ont été fait avec ça et pour ajouter des libs externes style Qt/Pyside et ba... j'en ai pas de bons souvenirs :lol:

Re: API REST / STREAM

par FemtoTrader » 01 oct. 2015 14:02

le fait d'utiliser la lib n'impose pas d'utiliser Pandas
il y a un try / except avec l'import de pandas
si c'est dispo ça sort des DataFrames
Anaconda marche très bien avec PyQt (ou PySide mais c'est abandonné) et des lib comme PyQtGraph

Re: API REST / STREAM

par falex » 01 oct. 2015 14:24

Vu Nomade, je vais regarder ça de plus près, mais j'avoue n'avoir jamais trop "dépiauté" le code igls.py.

Re: API REST / STREAM

par beni » 01 oct. 2015 16:48

Femto> surement mais depuis mes déboirs sur Entought, j'ai plus osé y toucher, je restes avec mon éditeur de text :lol:
Merci pour l'info sur Pyside je ne savais pas et ça m'a permis de voir que le support de Qt4 va s'arrêter à la fin de l'année.

Re: API REST / STREAM

par FemtoTrader » 01 oct. 2015 17:29

Dommage la doc de PySide était sympa et l'API plus "pythonesque" que PyQt (connection signal/slot par exemple) . Mais PyQt a peut être évolué. L'autre "soucis" c'est quand même la licence PyQt est GPL PySide était LGPL (et perso pour une lib je la préfère LGPL ou BSD).

Les notebook IPython sont sympa (Jupyter désormais) et c'est out of the box avec les distrib scientifiques. Anaconda possède un IDE "Spyder" avec un explorateur de variable à la MATLAB

Re: API REST / STREAM

par beni » 01 oct. 2015 18:36

Oui j'avoue que la doc PyQt est assez austère mais même sans connaître le c++ on arrive à s'en sortir avec la doc officiel.
En deux mots c'est quoi la différence entre les deux licences ?
Ipython, je connais très très peu, uniquement de nom en fait...

Re: API REST / STREAM

par FemtoTrader » 01 oct. 2015 19:48

Disons qu'une lib GPL "OBLIGE" le code lié à être sous la même licence GPL (c'est le côté "viral" de la GPL). La LGPL ou la BSD permet de faire du code propriétaire (ou pas). Elle n'oblige pas cf https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_limit%C3%A9e_GNU#Diff.C3.A9rences_avec_la_GPL Mais je pense qu'on est un peu HS ici.

Re: API REST / STREAM

par beni » 01 oct. 2015 21:16

Yes désolé pour le HS et merci pour la réponse ;-)

Re: API REST / STREAM

par FemtoTrader » 01 oct. 2015 21:52

Une nouvelle version du client Python pour l'API Stream (Python 2 et 3) est disponible sur
https://github.com/ig-python/ig-markets-stream-api-python-library/tree/py2_3

je n'ai pas encore fusionné avec la branche master
je n'ai pas encore publié sur PyPi

Code : #

git clone https://github.com/ig-python/ig-markets-stream-api-python-library.git
git checkout py2_3
cp trading_ig_config.default.py trading_ig_config.py
# editer le fichier trading_ig_config.py
python sample/main.py
On doit voir:

Code : #

$ python sample/main.py
WARNING:root:No Bunch support for PY3
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:49:55 - Bid 119.892 - Ask 119.900
----------HIT CR TO UNSUBSCRIBE AND DISCONNECT FROM     LIGHTSTREAMER-----------
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:49:56 - Bid 119.888 - Ask 119.903
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:49:58 - Bid 119.889 - Ask 119.904
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:49:58 - Bid 119.889 - Ask 119.904
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:49:58 - Bid 119.890 - Ask 119.905
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:49:59 - Bid 119.889 - Ask 119.904
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:50:00 - Bid 119.890 - Ask 119.905
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:50:01 - Bid 119.889 - Ask 119.904
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:50:01 - Bid 119.894 - Ask 119.902
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:50:01 - Bid 119.895 - Ask 119.903
L1:CS.D.USDJPY.cfd à risque limité.IP: Time 20:50:01 - Bid 119.892 - Ask 119.907

WARNING:lightstreamer:Server error
DISCONNECTED FROM LIGHTSTREAMER
Le code client lightstreamer provient de l'exemple
https://github.com/Weswit/Lightstreamer-example-StockList-client-python

En attendant que Weswit rende le code client plus "modulaire"
(en acceptant notamment un PR) j'ai mis leur code dans mon projet

Sujets similaires
[PYTHON] Script API IG STREAM + REST
par tcournez » 14 sept. 2015 21:50 (30 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)
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)
LS_snapshot (stream)
par Tartempion » 22 sept. 2015 21:57 (10 Réponses)
clarification signification "#" et "" dans les flux stream
par musicae » 23 sept. 2016 15:01 (3 Réponses)
risque d'arrêt du Gulf Stream
par noko » 07 sept. 2018 20:28 (4 Réponses)
Trader au Stream Deck avec ProRealTime : une révolution
Fichier(s) joint(s) par Benoist Rousseau » 04 déc. 2019 12:00 (75 Réponses)