Aller au contenu

Cycle de vie d’un insight

AQE suit les insights via une machine d’état qui inclut :

  • New
  • Executed
  • Filled
  • Closed
  • Cancelled
  • Rejected

Les chemins typiques ressemblent à :

  • New -> Executed -> Filled -> Closed
  • New -> Rejected
  • Executed -> Cancelled
  • Filled -> Closed

L’expiration, les échecs de pipes, les rejets courtier et les mises à jour de trade alimentent ces transitions.

AQE prend en charge deux contrôles de cycle de vie importants :

  • period_unfilled s’applique quand l’insight est encore New ou Executed. Les insights expirés sont rejetés ou une annulation est demandée selon l’état.
  • period_till_tp s’applique une fois que l’insight est Filled. L’expiration peut déclencher une demande de clôture.

Ces vérifications sont appliquées par le runtime, pas par l’UI.

Chaque changement significatif peut être enregistré dans state_history, notamment :

  • transitions d’état
  • soumission
  • acceptation courtier
  • fills
  • clôtures partielles
  • demandes d’annulation
  • rejets
  • gestion de l’expiration

Cet historique rend l’inspecteur partagé dans AQS et Backtest Results utile pour la revue.

Utilisez state_log(...) quand vous voulez attacher une note de revue à un insight sans changer son état de cycle de vie. Le hook de stratégie reçoit les insights par référence partagée, donc ajoutez ces messages depuis un pipe ou un autre chemin runtime qui possède &mut Insight.

use aq_engine::core::insight::{types::InsightState, Insight};
use aq_engine::core::pipeline::{InsightPipe, InsightPipeBuilder, InsightPipeResult};
use aq_engine::core::strategy::StrategyContext;
pub struct ReviewNotePipe;
impl InsightPipe for ReviewNotePipe {
fn version(&self) -> &str {
"1.0"
}
fn run(&mut self, _ctx: &mut dyn StrategyContext, insight: &mut Insight) -> InsightPipeResult {
insight.state_log(Some("Risk check passed".to_string()));
InsightPipeResult::new(
true,
true,
Some("Review note added to insight history".to_string()),
self.name().to_string(),
)
}
}

Enregistrez le pipe sur l’état où vous voulez ajouter la note :

ctx.add_pipe(
InsightPipeBuilder::new(Box::new(ReviewNotePipe))
.target_state(InsightState::Filled)
.build(),
);

state_log(...) conserve l’état courant, met à jour updated_at et ajoute le message fourni dans state_history. Si vous passez None, AQE enregistre "State log entry".

Les snapshots d’insight incluent les champs d’exécution comme filled_price, close_price, broker_realized_pnl, commission et swap. Les runs live synchronisent ces snapshots vers AQS Cloud, et les backtests les persistent dans la base locale de résultats.