Hello, beau projet mais j'ai pas mal de remarques pour t'aiguiller j’espère dans le bon sens
, je suis architecte et j'ai eu le malheur de me lancer dans ce chemin long de créer un bot efficace.
1- Le choix du langage me parait mauvais, tu ne trouvera pas d'api pour les brokers et quand tu les trouvera,ce ne sera pas opti car le broker l'aura laissé tomber pour s'orienter vers d'autre langage, les api python sont à jour, car les brokers essayent d'embarquer la communié des data scientist dans le wagon, et les api c seront aussi à jour, car un langage bas niveau et rapide dans l'execution, mais bien évidement rien ne t'emepche de coder ta propre api on se basant sur les routes REST que le broker peut proposer. mais la JVM c'est tjrs pas top (mon avis est subjectif car je déteste java
)
2- Pour l'archi, je crois que tu commences gros, et tu te lances dans une usine à gaz, une approche event driven c'est sympa, si t'as envie d'allier ta passion pour le trading et l'informatique pourquoi pas, mais je pense que ce n'est pas adapté, l'event driven et les microservices en informatique posent des problèmes de gestion de transactions (pattern saga) et ton archi va induire des temps de latence, or en trading il faut être dans l'instantané, et si tu rajoutes les latences java, ça va faire beaucoup.
3- le Nosql n'est pas adapté non plus, si tu te concentres sur quelques marchés, et avec quelques mois d'historique, t'aura un tout petit volume, et les données des Marchés sont structurées, c'est l'histoire de quelques colonnes, donc avec du SQL classique c'est mieux, et ça te permettra de déléguer du traitement facilement à ta base ( jointures, agrégation ... ), je ne sais pas ce que tu comptais mettre (Mongo ? Cassandra ? ) mais tu te rajoutes juste une complexité technique.
4- le calcul d'indicateur doit idéalement être fait en temps réel et stocké dans la mémoire du process Bot, c'est souvent léger, car un
rsi on va le calculer sur 14 périodes, et on garde pas un grand historique pour déclencher nos conditions, si tu delegues ce calcul à un microservice (encore de la latence), ça veut dire qu'il faudra ajouter une interface de connexion entre ton bot et ton microservice indicateur ? la BDD ? et est ce que t'aura un intérêt de stocker toutes les valeurs de tous les indicateurs ? le seul intérêt est d'améliorer ton robot dans le cadre de service de backtesting.
je pense que ton approche modulaire est bonne, de l'event driven c'est cool aussi, tu peux faire chorégraphier des services autour de l'evenement "Price" avec un broker au milieu (rabbitMq), (voir choregraphy vs orchestration). mais oriente toi plus vers des mi-gros-services que micro-service
, faut garder une cohérence dans le bot qui prendra les décisions, et tu pourra coder plus tard un service d'historisation des données à coté dans du NoSql si t'as envie, et un service de backtesting why not.
check aussi sur github y'a pas mal de travaux, je peux te communiquer les repos,
je te souhaite bon courage et bonne chance
et mon message a uniquement pour but de te donner un avis externe qui j’espère t'aidera dans ta conception.
Cordialement,
Marouane