Aller au contenu

Noeuds lifecycle et univers

Les noeuds lifecycle et univers d’AQS exposent le modele de composants AQE dans le graphe visuel de strategie. Ils permettent de garder le comportement de strategie modulaire sans modifier manuellement le src/main.rs genere dans les projets .aqmeta.

Vous pouvez toujours ecrire cette logique inline en Rust. Les noeuds servent a segmenter le code : responsabilites separees, graphe plus clair, fichiers reutilisables et configuration plus simple dans l’editeur.

AQS fournit quatre types de noeuds modulaires pour ce workflow :

  • On Start Logic cree un composant OnStartLogic.
  • On Init Logic cree un composant OnInitLogic.
  • On Teardown Logic cree un composant OnTeardownLogic.
  • Universe Model cree un composant UniverseModel.

Les fichiers de logique lifecycle utilisent le suffixe .logic.rs. Les fichiers d’univers utilisent le suffixe .universe.rs.

Quand un projet contient un fichier .aqmeta, AQS possede le graphe et regenere src/main.rs. Ne modifiez pas manuellement le src/main.rs genere pour ces composants. Ajoutez ou modifiez le fichier de composant, puis mettez a jour la configuration du noeud.

Le codegen gere l’enregistrement :

  • les noeuds lifecycle deviennent des wrappers lifecycle AQE;
  • les noeuds universe model deviennent des wrappers d’univers AQE;
  • les arguments de constructeur sont exposes comme proprietes publiques du noeud;
  • les champs prives de struct peuvent apparaitre comme proprietes privees ou en lecture seule;
  • l’ordre d’execution suit la topologie du graphe quand les noeuds sont chaines.

Les noeuds lifecycle ont un reglage de timing :

  • Before generated execute le composant avant le corps genere de la methode lifecycle.
  • After generated execute le composant apres le corps genere de la methode lifecycle.

Utilisez Before generated pour les prerequis et la validation. Utilisez After generated quand la logique depend de l’enregistrement ou de la configuration generee.

Exemples :

  • initialiser ctx.variables() avant que les modeles alpha le lisent;
  • valider les variables d’environnement requises avant le demarrage;
  • initialiser des metadonnees par symbole apres que l’actif soit connu;
  • vider des diagnostics runtime apres le teardown.

Chaque noeud a un reglage can_fail.

  • can_fail = false signifie qu’un resultat non reussi doit arreter le run.
  • can_fail = true signifie qu’AQE journalise l’echec et continue.

La logique de demarrage et d’init devrait generalement etre stricte. Le teardown peut souvent echouer sans bloquer le reste du nettoyage.

Les noeuds Universe Model retournent des symboles de facon programmatique. Ils sont utiles quand la liste statique d’univers est trop limitee.

Utilisez un noeud Universe Model pour :

  • charger une watchlist;
  • filtrer des symboles par metadonnees;
  • choisir des symboles par date ou regime;
  • selectionner des symboles depuis des contraintes de compte, broker ou risque;
  • partager la meme logique d’univers entre strategies.

L’univers AQE final est l’union de l’univers statique retourne par la strategie generee et de chaque universe model connecte. Les doublons sont supprimes.

Vous pouvez donc garder un noeud d’univers statique simple et ajouter un noeud Universe Model pour des ajouts dynamiques.

Le workflow par noeuds n’est pas obligatoire. Pour les petites strategies, le Rust inline suffit souvent :

  • ajoutez le code de demarrage directement dans on_start;
  • ajoutez l’initialisation par actif directement dans init;
  • retournez les symboles directement depuis universe;
  • ajoutez le nettoyage directement dans on_teardown.

Utilisez les noeuds quand le code merite son propre fichier, doit etre visible dans le graphe AQS, a besoin de configuration dans le panneau de proprietes ou sera reutilise.

  • Gardez les arguments de constructeur pour les reglages utilisateur.
  • Placez l’etat runtime dans ctx.variables() au lieu des champs de struct.
  • Utilisez les noeuds lifecycle pour la configuration et le nettoyage, pas pour generer des signaux.
  • Gardez la generation de signaux dans les modeles alpha.
  • Gardez le sizing, la soumission, l’annulation, la cloture et la gestion dans les insight pipes.
  • Chainez les noeuds lifecycle quand l’ordre exact compte.
  • Retournez des messages LifecycleResult et UniverseResult clairs afin que les logs et surfaces AQS soient utiles.

Pour le demarrage :

  1. connectez On Start Logic au port lifecycle de la strategie;
  2. utilisez Before generated si l’enregistrement genere d’alphas ou pipes en depend;
  3. initialisez l’etat partage dans ctx.variables();
  4. retournez un LifecycleResult reussi.

Pour l’initialisation par actif :

  1. connectez On Init Logic au port lifecycle d’init;
  2. utilisez l’argument asset pour initialiser l’etat par symbole;
  3. stockez cet etat sous le nom du composant et le symbole.

Pour le teardown :

  1. connectez On Teardown Logic au port lifecycle de teardown;
  2. utilisez can_fail = true sauf si l’echec doit invalider le run;
  3. persistez ou resumez les diagnostics runtime.

Pour la selection d’univers :

  1. creez un noeud Universe Model;
  2. implementez UniverseModel::run(ctx) -> UniverseResult;
  3. retournez uniquement les symboles dont le modele est responsable;
  4. laissez AQE fusionner ces symboles avec l’univers statique et les autres universe models.