Insights
Ce qu’un insight représente
Section intitulée « Ce qu’un insight représente »Un insight est l’unité d’intention de trading d’AQE. Il commence comme trade candidat et peut passer par la soumission, l’exécution, les fills, les clôtures partielles et la clôture finale tout en conservant un historique d’état qu’AQS peut inspecter ensuite.
Les champs principaux incluent :
- symbole
- side
- confiance
- timeframe
- lignée parent/enfant
- quantité
- structure d’entrée
- niveaux de take-profit et stop-loss
- écart de trailing stop
- prix de fill et de clôture
- historique d’état
Structure principale
Section intitulée « Structure principale »pub struct Insight { pub insight_id: Uuid, pub parent_id: Option<Uuid>, pub state: InsightState, pub children: Vec<Insight>, pub order_id: Option<String>, pub side: OrderSide, pub symbol: String, pub quantity: Option<f64>, pub order_type: OrderType, pub order_class: OrderClass, pub limit_price: Option<f64>, pub stop_price: Option<f64>, pub take_profit_levels: Option<Vec<f64>>, pub stop_loss_levels: Option<Vec<f64>>, pub trailing_stop_price: Option<f64>, pub filled_price: Option<f64>, pub close_price: Option<f64>, pub partial_closes: Vec<PartialCloseResult>, pub state_history: Vec<(DateTime<Utc>, InsightState, Option<String>)>,}Cycle de vie
Section intitulée « Cycle de vie »AQE suit les insights via une machine d’état qui inclut :
NewExecutedFilledClosedCancelledRejected
Les chemins typiques ressemblent à :
New -> Executed -> Filled -> ClosedNew -> RejectedExecuted -> CancelledFilled -> Closed
L’expiration, les échecs de pipes, les rejets courtier et les mises à jour de trade alimentent ces transitions.
Créer un insight
Section intitulée « Créer un insight »Le pattern utilisateur le plus courant est :
let mut insight = Insight::new( OrderSide::Buy, "AAPL".to_string(), StrategyType::Testing, ctx.timeframe().clone(), 80, None,);
insight .set_limit_price(Some(200.0)) .set_take_profit_levels(Some(vec![206.0])) .set_stop_loss(Some(197.5)) .set_period_unfilled(Some(5)) .set_period_till_tp(Some(12));
ctx.add_insight(insight);À partir de là, le pipeline d’insights peut ajouter le sizing, les validations ou le comportement de soumission.
Insights enfants
Section intitulée « Insights enfants »AQE prend en charge les insights enfants directement sur le modèle d’insight principal. Un insight parent peut attacher un ou plusieurs insights enfants et préserver cette relation dans le runtime et le modèle de snapshot.
pub fn add_child_insight( &mut self, mut child_insight: Insight, _ctx: &mut dyn StrategyContext,) -> &mut Self { child_insight.strategy_type = StrategyType::Custom(format!("{}-CHILD", self.strategy_type.to_string())); child_insight.parent_id = Some(self.insight_id); if child_insight.quantity.is_none() { child_insight.quantity = self.quantity; }
let child_id = child_insight.insight_id; self.children.push(child_insight);
self.update_state( self.state.clone(), Some(format!("Added child insight: {:?}", child_id)), ); self}Cela donne deux capacités importantes :
- lignée :
les insights enfants restent connectés au parent original via
parent_id - soumission différée : AQE peut mettre les insights enfants en file et les soumettre au bon moment dans la boucle runtime
Les cas d’usage typiques incluent :
- entrées échelonnées
- signaux de suivi dérivés d’un fill parent
- plans de trade multi-étapes nécessitant une trace d’inspection liée
Champs de time-to-live
Section intitulée « Champs de time-to-live »AQE prend en charge deux contrôles de cycle de vie importants :
period_unfilled- s’applique quand l’insight est encore
NewouExecuted - les insights expirés sont rejetés ou une annulation est demandée selon l’état
- s’applique quand l’insight est encore
period_till_tp- s’applique une fois que l’insight est
Filled - l’expiration peut déclencher une demande de clôture
- s’applique une fois que l’insight est
Ces vérifications sont appliquées par le runtime, pas par l’UI.
Historique d’état
Section intitulée « Historique d’état »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.
Jambes gérées par le courtier
Section intitulée « Jambes gérées par le courtier »L’insight stocke la configuration que vous définissez, mais le courtier possède les jambes d’exécution réelles :
- jambes take profit
- jambes stop loss
- jambes trailing stop
Par exemple, un trailing stop est défini sur l’insight comme un écart float, tandis que le courtier crée et gère la vraie jambe de trailing stop pendant l’exécution.
Clôtures partielles
Section intitulée « Clôtures partielles »Les insights peuvent enregistrer des résultats de clôture partielle au fil du temps. C’est important pour :
- les stratégies scale-out
- les sorties multi-cibles
- une inspection précise dans AQS et la revue de backtest
Si une stratégie utilise plus d’un niveau de take-profit, AQE peut clôturer une partie de la quantité tout en laissant la position restante ouverte.
Les insights enfants et les clôtures partielles résolvent des problèmes différents :
- les clôtures partielles gardent un insight ouvert tout en réduisant la taille au fil du temps
- les insights enfants créent des insights liés séparés avec leur propre cycle de vie
Source liée
Section intitulée « Source liée »aq-engine/src/core/insight/insight.rsaq-engine/src/core/insight/snapshot.rsaq-engine/src/core/strategy/mod.rs
Nous utilisons des cookies et du stockage essentiels pour la connexion, la sécurité du compte, les préférences de thème, cet avis et les métriques internes PostHog nécessaires sur l’utilisation, la qualité de session et la fiabilité. Nous n’utilisons pas de cookies publicitaires.