Module de création de vidéo de la session de trading:
il est opérationnel, le plus important est fait. Reste plus qu'à fignoler l'interface virtuelle qui apparaitra dans les videos , optimiser le code et la compression.
Définition : Après chaque session de trading le module fabrique une video de tous les trades de la session.
Une video est un enchainement de différents "passages" ("passage" ou "scène", je ne sais pas comment appeler ça), chacun consacré à un trade successif.
Dans la video chaque passage débute peu de temps avant l'ouverture du trade et s'achève peu de temps après la fermeture du trade.
La video n'est pas capturée en temps réel pendant la session (beaucoup d'inconvénients et aucun avantage) mais construite a posteriori par programmation par le module.
La video retrace l'évolution de chaque trade tick by tick en respectant la temporalité c'est à dire que la durée entre deux ticks successifs est respectée du mieux possible comme le ferait une capture temps réel par un logiciel de capture video.
sauf qu'elle ne dure que la durée totale de tous les trades de la session puisque, de fait, les zones de non trade ne sont pas synthétisées.
Puisque la video est complètement construite par programmation par le module, l'interface (graphes, affichage d'infos et autres) n'est pas l'interface de mon logiciel de trading (trop volumineuse pour une video) mais une interface virtuelle computée par le module.
Explications:
En début de session la connexion souscrit à deux tables : CHART et OPU. (je ne souscris ni à WOU ni à CONFIRMS)
Lors d'une session de trading deux fichiers sont créés :
-un "fichier de stream", dans lequel sont stockés les ticks ( ticks by ticks avec bien-sûr le timestamp donné par IG en millisecondes, table CHART mode DISTINCT),et les OPU (horodatés en ms par IG également, on reviendra dessus). Ticks et OPU sont stockés dans ce fichier dans l'ordre qu'ils arrivent par le stream.
-un "fichier des transactions" constitué des champs : timestamp d'ouverture, niveau d'ouverture, taille (algébrique), timestamp de fermeture, niveau de fermeture, points du trade (par lot), programmation neuro-linguistique de la transac (€), durée du trade (secondes), drawdown du trade (pire moins-value en point par lot pour ce trade).
Grace au fichier des transactions le module connaît les timestamps de chaque ouverture de position (respectivement chaque fermeture), leur retranche 5 secondes (resp. additionne 5s), délai paramétrable, puis prélève la portion des ticks correspondante dans le fichier de stream. Le délai de 5s permet à ce que chaque passage consacré à un trade dans la video débute 5s avant l'ouverture de la position et finisse 5s après la fermeture.
Pour l'instant la fréquence des trames est de 20 trames par seconde. Je peux monter à 60 fps mais bof ça explose la taille pour un intéret négligeable a priori.
Dans la suite on appelle «publication» tout tick ou opu collecté depuis le stream et stocké dans le fichier de stream.
Soient m,n deux entiers naturels :
1) Soit P(n) une publication dans le fichier de stream, et soit T(n) son timestamp. P(n) est traitée par le module pour actualiser l'interface virtuelle qui apparaitra dans la video. Une image I(m) de l'interface actualisée est créée.
2) I(m) est concaténée aux images précédentes dans le fichier avi.
3) m est incrémenté et I(m) est copiée. Cette étape 3) est réalisée autant de fois que l'on peut mettre de trames entre T(n) et T(n+1).
4) n est incrémenté et retour à l'étape 1).
Remarque : le timestamp renvoyé par IG sur les OPU de fermeture de position sur limite touchée est assez dégueu car sans milliseconde, arrondi à la seconde, par contre faut juste le savoir et adapter son code quand on fait se genre de module car au début je n'avais pas percuté et ça m'a joué un drôle de tour je comprenais rien au bug dans la video.
Limitation : Je ne sais pas ( et je crois que je ne saurai jamais faire) introduire du son dans la video. C'est vraiment dommage car le visionnage d'un trade sans entendre un «ding» ou un «dong» à chaque OPU (ouverture de position, fermeture de position, posage d'une limite=0 ) est assez pénible.
Ça serait beaucoup plus confortable avec une illustration sonore. Bien-sûr que on peut poser une bande son à coté de la bande video dans la capsule avi mais sa construction se fait habituellement in-extenso. Son cheminement est parallèle à celui de la video.
Sauf que ici il s'agit d'introduire un ding synchronisé précisément avec un opu, et ça pour l'instant, et pour longtemps, je ne sais pas faire.
Pour fabriquer une video d'une longueur de 7min en gros il faut 2min. (32bits en profondeur de couleur à 20fps sur un format 1200*700 en gros) . C'est un peu long comme temps mais bon le code n'est pas fignolé. C'est fait à la truelle , je voulais déjà un code simple stable qui marche. Et puis faut se pencher sur le choix du codec et le niveau de compression des images.
Certainement une video en ligne cette semaine…(mais chut !

)