Graphiques de recherche et fonctions utilitaires
Après un chargement réussi avec Load data into Rust, les cellules peuvent utiliser les fonctions ci-dessous. Elles sont fournies par AQS pour les notebooks ; ce ne sont pas des API supplémentaires du moteur de stratégie AQE. Après une mise à jour d’AQS, rechargez les données pour installer les nouvelles fonctions dans une session existante.
Données accessibles aux cellules
Section intitulée « Données accessibles aux cellules »data est une collection AqsData indexée par les symboles chargés. Elle encapsule un HashMap<String, DataFrame> et conserve, par déréférencement, l’indexation (data["BTCUSD"]), get, insert et les autres méthodes de la table associative. Ce n’est pas un alias de type pour HashMap. bars reste une copie de travail des données du premier symbole chargé. Les horodatages historiques sont des millisecondes Unix UTC dans une colonne Int64 nommée timestamp.
data.symbols() // Sorted symbol namesdata.summary()?; // Table of symbols, row counts and columnslet mut btc = data.bars("BTCUSD")?;let mut eth = data.bars("ETHUSD")?;Utilisez les symboles exacts du fournisseur, par exemple BTC-USD chez Yahoo. Un symbole absent produit une erreur indiquant les symboles disponibles. Chaque appel à bars retourne une copie de travail Polars indépendante : calculer des indicateurs sur btc ne modifie ni data ni eth. Les fonctions libres équivalentes sont aqs_symbols(&data) et aqs_bars(&data, "BTCUSD")?.
Le sélecteur Loaded symbols du panneau de session peut ajouter une cellule de tableau et de chandeliers prête à l’emploi pour un symbole. Il insère le code sans l’exécuter.
Aperçus de tableaux
Section intitulée « Aperçus de tableaux »aqs_table(&bars, 10)?;aqs_table(frame: &DataFrame, limit: usize) renvoie Result<(), Box<dyn std::error::Error>>. La fonction produit les noms des colonnes et les valeurs mises en forme sans modifier le DataFrame.
Elle inclut au maximum 100 lignes. La visionneuse affiche au maximum 50 colonnes. Ces limites d’aperçu ne tronquent pas le DataFrame disponible pour l’analyse.
Courbes simples et superpositions
Section intitulée « Courbes simples et superpositions »aqs_plot(&bars, "close")?;aqs_plot_many(&bars, &["close", "EMA_20", "EMA_50"])?;aqs_plot(frame: &DataFrame, column: &str) renvoie Result<(), Box<dyn std::error::Error>>. La colonne sélectionnée doit pouvoir être convertie en Float64 ; timestamp doit contenir des millisecondes de type Int64. Une colonne absente ou un type incompatible produit une erreur dans la cellule.
Chaque appel crée un graphique ; aqs_plot_many place plusieurs courbes sur le même axe de prix. Les colonnes nommées doivent déjà exister. Une même cellule peut produire tableaux et graphiques dans l’ordre des appels :
aqs_table(&bars, 5)?;aqs_plot(&bars, "close")?;Chandeliers, moyennes mobiles et panneaux synchronisés
Section intitulée « Chandeliers, moyennes mobiles et panneaux synchronisés »

Configuration et résultat : chandeliers BTCUSD, deux moyennes mobiles, histogramme de volume et courbe ATR dans des panneaux synchronisés. Afficher la capture en taille réelleAfficher la capture en taille réelle.
use aq_engine::core::indicators::{ Indicator, atr::AverageTrueRange, ema::ExponentialMovingAverage,};let mut btc = data.bars("BTCUSD")?;let mut atr = AverageTrueRange::new(14);atr.run(&mut btc)?;let mut ema20 = ExponentialMovingAverage::new(20, "close");ema20.run(&mut btc)?;let mut ema50 = ExponentialMovingAverage::new(50, "close");ema50.run(&mut btc)?;
aqs_chart(&btc) .title("BTCUSD · trend and volatility") .candles() .line("EMA_20").label("EMA 20") .line("EMA_50").label("EMA 50") .pane("Volume", |p| p.histogram("volume")) .pane("ATR", |p| p.line("ATRr_14")) .height(650) .max_points(1000) .show()?;Les indicateurs AQE travaillent sur des DataFrames Polars ordinaires. Chargez un historique suffisant pour couvrir la période la plus longue et sa phase d’initialisation. Le constructeur de graphique trace uniquement des colonnes : passer le nom d’un indicateur à line ne déclenche pas son calcul. Une colonne sans valeur finie produit une erreur dans la cellule.
Les constructeurs du graphique principal et des panneaux acceptent .line(column), .area(column), .histogram(column), .candles() et .ohlc(). .label(text) renomme la dernière série du constructeur concerné. Les chandeliers et les barres OHLC exigent les colonnes open, high, low et close. Toutes les séries temporelles exigent timestamp.
Les graphiques temporels des notebooks proposent le zoom, le déplacement, un axe temporel commun, l’affichage des valeurs au survol, des couleurs de séries automatiques et des séparateurs de panneaux redimensionnables. Chaque panneau possède sa propre échelle verticale ; les superpositions d’un même panneau partagent cette échelle. Placez les données d’unités différentes, telles que le prix et le volume, dans des panneaux distincts. .height(pixels) accepte 240 à 1200 pixels ; la hauteur par défaut augmente avec le nombre de panneaux. Six panneaux et douze séries au total sont pris en charge au maximum.
Échantillonnage des aperçus et intégrité des données
Section intitulée « Échantillonnage des aperçus et intégrité des données »Le graphique trie sa vue par horodatage et convertit les millisecondes en secondes. Lorsque plusieurs lignes correspondent à la même seconde, la dernière ligne source est retenue de façon cohérente pour les superpositions. Les horodatages nuls ou hors plage sont exclus, tout comme les valeurs nulles ou non finies, notamment pendant l’initialisation des indicateurs. Aucune observation n’est inventée pour combler les lacunes ; une courbe peut néanmoins relier visuellement les points restants.
Les grands graphiques temporels utilisent des groupes de lignes communs à tous les panneaux. Une bougie retient la première ouverture valide, le cours le plus haut, le cours le plus bas et la dernière clôture valide de son groupe. Les histogrammes additionnent les valeurs du groupe ; les courbes et les aires prennent la dernière valeur finie. Chaque groupe est positionné à son dernier horodatage. Il s’agit uniquement d’une agrégation d’affichage : le DataFrame source, les calculs de recherche et les backtests ne changent pas. Des bornes OHLC invalides ou un dépassement de capacité numérique provoquent une erreur.
.max_points(n) accepte une cible de 2 à 2000 points par série, avec une valeur par défaut de 1000. La fonction réduit cette cible si nécessaire pour maintenir la sortie totale sous 4000 points et 240 KiB. La légende indique le nombre de lignes source et la taille des groupes. Pour examiner des bougies individuelles, choisissez une période plus courte.
Nuages de points et distributions
Section intitulée « Nuages de points et distributions »aqs_scatter(&btc, "volume", "ATRr_14")?;aqs_histogram(&btc, "ATRr_14", 30)?;aqs_scatter(frame, x_column, y_column) associe les valeurs d’une même ligne source. Les paires contenant une valeur absente ou non finie sont retirées ; au maximum 2000 paires sont échantillonnées pour l’affichage.
aqs_histogram(frame, column, bins) répartit toutes les observations finies dans 2 à 100 intervalles numériques et les compte. Une colonne constante produit un seul intervalle. La légende indique le nombre d’observations absentes ou non finies exclues. Il s’agit d’une distribution, à la différence de .histogram("volume") dans le constructeur de graphique, qui représente des valeurs au fil du temps.
Ces deux types utilisent des axes numériques et des infobulles SVG, sans les commandes de zoom et de déplacement des graphiques temporels. Ils n’exigent pas de colonne d’horodatage.
Comparer des symboles sur une base commune
Section intitulée « Comparer des symboles sur une base commune »aqs_compare(&data, &["BTCUSD", "ETHUSD", "SOLUSD"], "close")?;

Comparez les clôtures BTCUSD, ETHUSD et SOLUSD depuis une même base 100. Les courbes montrent les variations relatives des prix, pas les rendements d’une stratégie. Afficher la comparaison en taille réelleAfficher la comparaison en taille réelle.
Choisissez 2 à 8 symboles distincts parmi ceux chargés. Chaque courbe part de l’indice 100 au premier horodatage exact commun à tous les symboles pour lequel les valeurs sont finies et positives. Les horodatages manquants suivants ne sont pas complétés par propagation de la dernière valeur ; chaque série conserve ses propres observations. Sans point d’ancrage commun, la fonction renvoie une erreur. L’affichage échantillonne chaque série à environ 400 points en conservant sa première et sa dernière observation.
Cette comparaison porte sur des prix normalisés : ce n’est ni une courbe de valeur nette de stratégie, ni un rendement de portefeuille, ni un calcul de corrélation. Elle ne tient pas compte des frais, des opérations sur titres ou des devises pour ajuster les instruments. Utilisez des données d’entrée ajustées adaptées à votre étude.
Sorties structurées personnalisées
Section intitulée « Sorties structurées personnalisées »aqs_emit(value: serde_json::Value) produit un aperçu structuré. Pour les graphiques, préférez les fonctions ci-dessus. La visionneuse conserve aussi la prise en charge historique de table et line :
aqs_emit(serde_json::json!({ "kind": "table", "columns": ["Metric", "Value"], "rows": [["Observations", bars.height().to_string().as_str()]], "totalRows": 1}));
aqs_emit(serde_json::json!({ "kind": "line", "label": "Example series", "points": [ {"time": 1791241200, "value": 1.0}, {"time": 1791241260, "value": 1.2} ]}));Les horodatages des courbes personnalisées sont des secondes Unix, contrairement aux millisecondes du DataFrame. Les noms de colonnes et les valeurs des cellules des tableaux doivent être des chaînes. Les nouvelles fonctions produisent des spécifications chart, scatter, distribution et heatmap en version 1. Pour examiner la structure sans l’afficher, utilisez .build()? au lieu de .show()?. Le HTML fourni par le notebook n’est pas interprété.
Marqueurs de signaux et cartes thermiques
Section intitulée « Marqueurs de signaux et cartes thermiques »Utilisez .signals(&signals)? sur aqs_chart pour superposer des signaux générés ou des entrées exécutées. Un DataFrame de signaux personnalisé doit comporter timestamp en millisecondes UTC, side (Buy ou Sell) et, éventuellement, label.
aqs_chart(&btc).candles().signals(&signals)?.show()?;aqs_heatmap(&monthly, "month", "year", "return_pct")?;Les cartes thermiques acceptent jusqu’à 50 étiquettes par axe et 2 500 cellules. Les valeurs absentes restent vides et ne sont pas remplacées par zéro. Des coordonnées en double produisent une erreur : agrégez-les explicitement avant le tracé. L’échelle de couleurs est centrée sur zéro. Les marqueurs et les cartes thermiques sont conservés dans les instantanés statiques d’articles AQI, comme dans le notebook local.
Pour la lecture des backtests enregistrés, les comparaisons de valeur nette et de repli (drawdown), aqs_returns_heatmap, les rejeux d’alpha et les expériences isolées à partir du graphe, consultez Réutilisation de stratégies et backtests.
Limites de sortie et erreurs
Section intitulée « Limites de sortie et erreurs »La section AQI paper du notebook ouvre l’éditeur complet d’articles avec un bloc contenant le code et les échantillons de résultats enregistrés admissibles. Utilisez Add notebook dans l’éditeur pour sélectionner certaines cellules ou exclure leurs résultats. L’insertion est locale ; vérifiez le contenu, puis enregistrez ou publiez explicitement. Les graphiques temporels des articles utilisent le même moteur TradingView Lightweight Charts que le notebook : superpositions, panneaux synchronisés, marqueurs de signaux et valeurs UTC au réticule sont conservés. Les lecteurs peuvent zoomer et se déplacer dans les échantillons enregistrés ; ces graphiques ne chargent aucune donnée en direct. Les cartes thermiques, les nuages de points et les distributions utilisent le moteur SVG de Research. Des représentations statiques restent disponibles sans JavaScript. Les résultats périmés, en échec ou non vérifiés sont exclus. L’instantané n’intègre pas les jeux de données bruts et ne s’exécute pas sur l’ordinateur du lecteur. Consultez le partage de recherches pour la procédure de vérification et de publication.
Le moteur limite les textes et chaque aperçu enrichi à 256 KiB. Réduisez une sortie volumineuse ou écrivez-la dans un fichier du projet local. La visionneuse accepte jusqu’à 20 aperçus enrichis par évaluation.
Les diagnostics de compilation et d’exécution apparaissent sous la cellule concernée ; stderr interrompt aussi Run all pour vérification. Les résultats restent dans le notebook enregistré et deviennent périmés après une modification ou une réinitialisation. Ces aperçus sont distincts de l’espace de graphiques AQS en direct.
Nous utilisons des cookies et un stockage essentiels pour la connexion, la sécurité du compte, les préférences de thème, cet avis et les mesures internes PostHog nécessaires au suivi de l’utilisation, de la qualité des sessions et de la fiabilité. Nous n’utilisons pas de cookies publicitaires.
