Documentation1.0 (latest)
PagesScreener · 22 / 29

Screener

Le Screener filtre un univers de plus de 10 000 actions américaines selon leurs états financiers et affiche les correspondances dans un tableau triable. Construisez un filtre avec des lignes de filtres sans code, ou écrivez un Screener Script Python pour une logique que les lignes de filtres ne peuvent pas exprimer. Un filtre enregistré peut aussi choisir les symboles d'une exécution forward en masse ou d'un backtest.

Les filtres reposent uniquement sur les données fondamentales. Il n'y a ni cours en direct ni données sectorielles, donc le tableau de résultats n'a pas de colonnes Market Cap / Last / Net Change par défaut — la description industry SIC tient lieu de secteur. La capitalisation boursière, la valeur d'entreprise et le cours de fin de période sont disponibles comme champs du groupe Valuation ; vous pouvez donc filtrer dessus ou les ajouter comme colonnes ; ils reflètent la fin de chaque période, pas la cotation du jour. Les cryptomonnaies sont exclues : elles n'ont pas d'états financiers.

Vous devez être connecté — les données fondamentales sont téléchargées depuis les serveurs QuantCraft.


Où trouver cela dans l'interface

OùComment y accéder
Page ScreenerBarre de navigation → Screener (juste après Trade)
Fichier Screener ScriptIDE QuantCraft → New File → type Screener Script
Cible d'exécution forward en masseAutoTrading ou QuantCloud → nouvelle exécution en masse → cible Screener
Symboles de backtestIDE QuantCraft → Run backtest → Symbol source → Screener
AgentsLa fenêtre Test d'un agent (Scheduler → Symbol source → Screener) et les cibles de New Agent Bulk Run
Screener dans sa propre fenêtrePage Screener → le bouton Pop out à côté du titre de la page

La page comporte deux cartes : Filters (avec les onglets No-Code et Python Script) et Results. Run se trouve dans le pied de la carte des filtres, à côté de Reset filters. Le chevron de la carte Filters (Collapse filters) la replie pour donner plus de place aux résultats.

Le bouton Pop out à côté du titre ouvre le Screener dans une fenêtre séparée, afin de garder un filtre sur un second écran pendant que vous travaillez dans l'IDE ou sur un graphique. La fenêtre est la même page — les préréglages et les Screener Scripts sont partagés avec la fenêtre principale — mais chaque fenêtre conserve ses propres filtres et ses propres résultats, et un filtre ne s'exécute que dans une fenêtre à la fois. Fermez-la avec ← Return to main window ; l'application ne se ferme pas tant qu'une fenêtre détachée est ouverte.

Lorsque QuantCraft AI pilote une fenêtre Screener, vous voyez « The AI is using this window » et les commandes sont verrouillées jusqu'à la fin.


Télécharger les données fondamentales

La première fois que vous utilisez le Screener, il télécharge tout le corpus de données fondamentales sur votre machine. Tant que ce cache ne contient pas de données, les cartes Filters et Results sont remplacées par un écran d'attente avec un bouton Download Fundamentals.

Le téléchargement démarre à l'ouverture de l'application, pas à l'ouverture du Screener — le temps d'arriver sur la page, il est généralement déjà en cours ou terminé. Cliquer sur Run pendant un téléchargement n'en lance jamais un second.

  • Une première exécution à froid prend des minutes. Chaque exécution suivante prend des secondes.
  • La bannière d'exécution indique la phase (connecting → universe → download → convert → screen), un compteur de fragments comme shard 14 of 32, un compte analysés/total et un bouton Cancel. Une exécution à chaud n'affiche que la phase de filtrage.
  • La bannière compte le temps écoulé vers le haut et n'affiche aucune estimation — une exécution dont la durée varie de plusieurs minutes ne peut pas être prédite honnêtement. À la fin, vous obtenez un résumé du type 12 matched in 3m 20s, suivi de · Fundamentals updated <time>. Si certains symboles n'ont pas pu être récupérés, un lien cliquable N unavailable ouvre la liste.
  • Un téléchargement interrompu reprend à l'exécution suivante au lieu de repartir de zéro. Annuler en cours de téléchargement est sans risque : la partie inachevée sera simplement récupérée à nouveau la prochaine fois.
  • Un téléchargement continue même si vous quittez la page.

Fréquence de mise à jour des données

QuandCe qui est téléchargé
Votre tout premier filtreTout l'univers
Tout filtre ultérieur le même jour UTCRien
Le premier filtre du jour suivantUniquement les symboles dont le dépôt le plus récent date de plus de 62 jours

62 jours correspond à peu près à un trimestre ; une société n'est donc revérifiée que lorsque son prochain dépôt est vraisemblablement disponible.

À droite de la bannière d'exécution, vous verrez une ligne comme 10,384 symbols cached · 250 MB avec un bouton Clear cache (masqué pendant l'exécution d'un filtre, désactivé tant que l'IA utilise la fenêtre). L'effacement demande confirmation — Clear cache ou Keep it — car il jette un téléchargement de plusieurs minutes. Le cache est une donnée régénérable qu'une désinstallation ne supprime pas, c'est pourquoi il est visible et récupérable ici.

Après une mise à jour de l'application qui modifie le format du cache, le filtre suivant retélécharge tout l'univers une fois (c'est arrivé lorsque Per Share, Valuation et Scores ont été ajoutés).


Construire un filtre (No-Code)

Chaque ligne de filtre se lit de gauche à droite : Period → Field → Filter type → champ(s) de valeur. Utilisez + pour ajouter une ligne et − pour en retirer une. Le bouton + demande si la nouvelle ligne est une ligne Fundamentals ou une ligne Industry.

Les lignes se combinent avec AND — un symbole doit satisfaire chaque ligne activée. (Un préréglage créé par l'IA ou importé depuis un fichier peut utiliser OR à la place — « Any filter can match » ; Load Preset l'indique.)

La ligne de départ par défaut (Quarterly / Total Revenue / % Change / 1 period back / min 0 %) est valide telle quelle, donc Run fonctionne immédiatement. Avant le début d'une exécution, chaque ligne activée est validée ; si l'une est incomplète, vous obtenez une notification et une erreur en ligne sur cette ligne, et l'exécution ne démarre pas — un balayage de plusieurs minutes ne doit pas commencer sur une requête inutilisable.

Un exemple concret : Quarterly / Total Revenue / % Change / periods back 3 / min 1 / max 3 trouve les sociétés dont le chiffre d'affaires a augmenté de 1 % à 3 % sur les trois derniers trimestres.

Types de filtres

Chaque filtre lit la dernière valeur, sauf indication contraire.

FiltreParamètresCe qu'il retient
Rangemin, maxLa dernière valeur est comprise entre min et max, bornes incluses. Laissez un côté vide pour ne pas le borner.
AbovevalueLa dernière valeur est supérieure à value.
BelowvalueLa dernière valeur est inférieure à value.
Equalsvalue, toleranceLa dernière valeur est à ± tolerance de value.
Has a value—La dernière valeur existe. Utile avec Financials Extended.
% Changeperiods back, min %, max %Variation en pourcentage depuis n périodes en arrière jusqu'à la dernière. Échoue si la valeur de départ est zéro.
Absolute Changeperiods back, min, maxDifférence brute (dernière − n en arrière).
QoQ Change %min %, max %Variation en pourcentage par rapport au trimestre précédent. Trimestriel uniquement — le sélecteur de période est verrouillé.
YoY Change %min %, max %Variation en pourcentage par rapport à il y a un an. Le décalage est automatique — 4 pour le trimestriel, 1 pour l'annuel.
CAGR %periods back, min %, max %Taux de croissance annualisé. Les deux extrémités doivent être positives.
Average over Nperiods back, min, maxMoyenne des N dernières périodes. Toute valeur manquante dans la fenêtre fait échouer le symbole.
Grew N in a rowperiods backLa valeur a augmenté à chaque période de la fenêtre.
Fell N in a rowperiods backLa valeur a diminué à chaque période de la fenêtre.
Above X for Nvalue, periods backChacune des N dernières périodes est supérieure à value.
Below X for Nvalue, periods backChacune des N dernières périodes est inférieure à value.
Top N by fieldnFiltre de classement — conserve les n meilleurs symboles parmi tout ce qui a été analysé.
Percentile rank ≥min %Filtre de classement — conserve les symboles situés au moins à ce centile parmi tout ce qui a été analysé.

Les deux filtres de classement sont décidés sur l'ensemble de la population, et non symbole par symbole ; ils sont donc tranchés une fois tous les symboles analysés. Un symbole sans valeur pour le champ classé ne peut jamais en gagner un.

Le plus grand nombre de periods back utilisable est 40.

Choisir un champ

Le sélecteur de champ est consultable et regroupe les champs dans cet ordre :

Ratios → Valuation → Scores → Per Share → Income Statement → Balance Sheet → Cash Flow → Financials Extended → Earnings History

Les ratios viennent en premier car ce sont les plus pertinents pour un screener et ils sont déjà normalisés en unités. Les champs de valeur suivent l'unité du champ — $, %, jours, actions, montants par action, nombres, ou un nombre brut selon le cas. Voir la Référence des champs de données fondamentales pour le contenu de chaque groupe.

  • Tous les groupes prennent en charge trimestriel et annuel, sauf Earnings History, qui est uniquement trimestriel, et les champs CAGR (revenueCagr3y, revenueCagr5y, …), qui sont uniquement annuels et disparaissent du sélecteur trimestriel. Changer de période efface le champ s'il n'existe pas pour la nouvelle période.
  • « Periods back » compte les lignes dans la période choisie. Trimestriel + 3 signifie trois trimestres ; annuel + 3 signifie trois exercices. Les deux ne se mélangent pas.
  • Les multiples de Valuation sont sur douze mois glissants, même sur une ligne trimestrielle.
  • Les champs Financials Extended varient selon le symbole. Ils n'apparaissent dans le sélecteur qu'une fois le cache de données fondamentales téléchargé et sont marqués « varies by symbol ». Un filtre sur un champ qu'une société ne publie pas fait simplement échouer cette société — associez-le à Has a value lorsque cela compte.
  • Les fins de période datées du futur sont ignorées, donc « dernière » n'est jamais une période qui n'a pas encore eu lieu.
  • Non filtrables : Company Info, Earnings Trend, Earnings Annual, TTM, la valorisation la plus récente (à ce jour), la provenance des métriques, les composantes des scores Piotroski / Beneish, et les clés textuelles ou oui/non comme priceBasis ou approximate. Elles ne portent soit aucune période de reporting à comparer, soit ne sont pas des nombres.

Champs retirés. Huit anciens champs Financials Extended ont été retirés car de meilleures versions existent désormais : ebitda, ebitdaMargin, enterpriseValue, priceToEarnings, priceToBook, priceToSales, evToEbitda, evToRevenue. Un filtre enregistré qui en utilisait un perd cette ligne (ou colonne) au chargement — reconstruisez-le à partir du groupe Valuation, qui calcule ces valeurs sur douze mois glissants ; les valeurs diffèrent donc des anciennes. (ratios.debtToEquity a simplement été renommé ratios.debtToEquityRatio et se charge toujours.)

Lignes Industry

Une ligne Industry remplace les commandes champ/type/valeur par une sélection multiple d'industries ; un symbole passe si son industrie fait partie de celles choisies. Au moins une industrie doit être sélectionnée. La liste est construite à partir des données réellement téléchargées.


Mode Python Script

Choisissez Python Script lorsqu'un empilement de comparaisons reliées par AND ne suffit pas — arithmétique sur plusieurs champs, logique conditionnelle ou votre propre score de classement.

Créez le fichier dans l'IDE QuantCraft via New File → Screener Script ; il arrive avec un modèle fonctionnel. Tout fichier .py de votre espace de travail qui définit un filter() de niveau supérieur est aussi admissible. L'onglet Python Script du Screener les liste (étiquetés par chemin de dossier pour que les fichiers de dossiers différents restent distincts) et affiche un aperçu de celui qui est sélectionné. Vos autres fichiers d'espace de travail sont envoyés avec l'exécution, de sorte que votre script peut importer vos propres modules d'aide.

def filter(fundamentals, symbol): q = fundamentals["incomeStatement"]["quarterly"] if len(q) < 4: return {"result": False} latest, year_ago = q[-1]["totalRevenue"], q[-4]["totalRevenue"] if latest is None or not year_ago: return {"result": False} growth = (latest - year_ago) / abs(year_ago) return {"result": growth > 0.10, "value": growth} def rank(value, symbol): return min(max(value, 0), 1) * 100

filter(fundamentals, symbol) est appelée une fois par ticker et doit renvoyer un dict avec un "result" booléen. "value" est optionnel et correspond à ce que vous voulez transmettre au classement. Un script qui lève une exception, renvoie un simple True ou renvoie un dict sans "result" booléen compte comme aucune correspondance pour ce ticker seulement — un mauvais ticker n'interrompt jamais l'exécution.

rank(value, symbol) est optionnelle et ne s'exécute que pour les tickers qui correspondent. Renvoyez un vrai nombre — n'importe quelle échelle convient (0-1, 1-10, 0-100), et plus haut signifie toujours meilleur. Elle alimente la colonne triable Rank, qui n'apparaît qu'en mode Python Script. Un rank() qui échoue n'annule pas la correspondance de la ligne ; la ligne garde sa correspondance et son rang affiche —, trié en dernier.

L'argument symbol est optionnel dans les deux fonctions — les anciennes versions à un seul argument filter(fundamentals) et rank(value) fonctionnent toujours.

L'argument fundamentals

{ "symbol": "AAPL", "entityName": "Apple Inc.", "sicDescription": "ELECTRONIC COMPUTERS", "balanceSheet": {"quarterly": [...], "yearly": [...]}, "incomeStatement": {"quarterly": [...], "yearly": [...]}, "cashFlow": {"quarterly": [...], "yearly": [...]}, "ratios": {"quarterly": [...], "yearly": [...]}, "perShare": {"quarterly": [...], "yearly": [...]}, "valuation": {"quarterly": [...], "yearly": [...]}, "scores": {"quarterly": [...], "yearly": [...]}, "financialsExtended": {"quarterly": [...], "yearly": [...]}, "earnings": {"history": [...]}, }

Rien « à la date du téléchargement » n'atteint un script : ttm, valuation.latest, metricsInputs et metricsHealth ne portent pas de période, et un filtre compare des périodes entre symboles. Les multiples de valuation sont sur douze mois glissants même sur une ligne trimestrielle, et un multiple None à côté d'un rendement signé signifie un dénominateur non positif, pas une donnée manquante.

  • Les valeurs sont des nombres ou None — jamais des chaînes comme "1234.00". Les clés qui ne sont pas des nombres sont omises : beforeAfterMarket, reportDate et currency dans earnings.history, les détails piotroskiComponents / beneishComponents dans scores, et les indicateurs textuels comme priceBasis / approximate dans valuation.
  • Les lignes sont de la plus ancienne à la plus récente ; rows[-1] est donc la dernière période. Chaque ligne porte une date (sa fin de période).
  • Vous obtenez au plus les 12 derniers trimestres et les 6 dernières années, ce qui plafonne la profondeur d'historique d'un script.

Tout ce que votre script print() est capturé et affiché par le bouton Output logs à côté de Run — y compris pour les exécutions en échec, afin de voir ce qui s'est affiché juste avant un plantage. Le tampon contient 200 000 caractères et supprime les plus anciennes sorties au-delà. Une exécution no-code n'efface pas les journaux de la dernière exécution de script.

Run est bloqué avec une notification si aucun script n'est sélectionné ou si le fichier sélectionné n'a pas de filter().


Résultats

Chaque ligne affiche une étoile et un bouton de graphique, Rank (mode Python Script uniquement), Symbol, Company, Industry et As of, plus une colonne par ligne de filtre indiquant la valeur qui a correspondu (mode No-Code) et tous les champs supplémentaires que vous ajoutez.

« As of » est la fin de période la plus récente utilisée pour ce symbole — la période fiscale sur laquelle vos filtres ont réellement été évalués. Ce n'est jamais une période future.

CommandeCe qu'elle fait
En-tête de colonneTrie tout le tableau, pas seulement la page. Les valeurs vides sont toujours triées en dernier, dans les deux sens.
Sélecteur de colonnesAjoute ou réordonne les colonnes de résultats. Ne relance jamais le filtre — un champ réellement nouveau ne récupère que cette colonne pour les lignes affichées.
Zone de rechercheFiltre les lignes que vous avez déjà.
Tradable onlyMasque les symboles absents des listes de symboles négociables de votre compte de courtier.
ÉtoileAjoute le symbole à une liste de suivi. Les symboles suivis apparaissent sous forme de pastilles au-dessus du tableau et persistent entre les sessions.
Symbole (clic)Ouvre une fenêtre de détail des données fondamentales du symbole, avec un onglet Factor Exposure.
Bouton de graphiqueOuvre un graphique Trade pour ce symbole dans une fenêtre détachée (symboles négociables uniquement).

Les correspondances apparaissent toutes d'un coup à la fin de l'exécution ; le tableau reste donc vide pendant qu'un filtre est en cours — suivez la progression dans la bannière.

Les résultats ne sont pas enregistrés. Recharger l'application efface le tableau volontairement, car un résultat périmé est pire que pas de résultat. Vos filtres, colonnes, symboles suivis, onglet actif et script sélectionné sont mémorisés.


Préréglages

Un préréglage est un instantané nommé de vos lignes de filtres, de leur jointure et de vos colonnes de résultats.

BoutonCe qu'il fait
Save PresetNomme et enregistre le filtre courant. Désactivé tant que vous n'avez rien modifié par rapport au défaut — choisir uniquement des colonnes ne compte pas.
Load PresetParcourt les préréglages enregistrés, avec leur description, la manière dont leurs filtres sont combinés en AND (« All filters must match ») ou en OR (« Any filter can match »), et un résumé en langage clair de leurs filtres.
Update {name}Remplace le préréglage chargé, au lieu d'en créer un nouveau. Save Preset devient ce bouton dès que vous modifiez un préréglage chargé.
Reset filtersSupprime le lien avec le préréglage chargé, et le bouton redevient Save Preset.

Dans Load Preset, vous pouvez aussi :

  • Delete preset — le supprime après confirmation.
  • Export preset — l'enregistre dans un fichier JSON que vous pouvez partager ou sauvegarder.
  • Import preset — charge un préréglage depuis un tel fichier JSON.

Utiliser un filtre pour choisir des symboles

Exécutions forward en masse

Dans l'onglet Targets de la fenêtre New Run, choisissez la portée Screener. L'exécution trade ce qu'un préréglage enregistré ou un Screener Script retient, en refiltrant tous les Refresh interval (days) tant qu'elle est active. Include tickers with open positions garde une position dans la rotation après qu'elle a cessé de correspondre. Les cibles Screener sont limitées aux actions. Avec Use fundamentals activé, chaque symbole du filtre courant reçoit automatiquement ses données fondamentales, et l'ensemble suit chaque nouveau filtrage.

Sur QuantCloud, l'exécuteur conserve sa propre copie des données fondamentales dont le filtre a besoin. La première exécution Screener sur un nouvel exécuteur télécharge tout, ce qui prend un certain temps ; ensuite, elle ne se rafraîchit qu'une fois par jour. L'exécuteur utilise votre connexion pour télécharger et ne peut pas la renouveler seul ; sur une exécution de plusieurs jours, les nouveaux filtrages continuent donc d'utiliser les données déjà présentes une fois la connexion expirée.

ChampRemarques
Screener sourceScreener preset ou Python script.
Preset / Screener scriptLequel exécuter.
Sort column / DirectionComment les correspondances du préréglage sont classées avant l'application de la limite.
Rank directionPour les scripts — quelle extrémité du score rank() du script prendre en premier.
LimitCombien de symboles trader. 0 prend toutes les correspondances.
Refresh interval (days)Fréquence de relance du filtre pendant l'exécution. Minimum et défaut : 1 jour.
Refresh time (ET)Heure de la journée de chaque nouveau filtrage. 16:30 par défaut (une demi-heure après la clôture du marché américain).
Include tickers with open positionsAjoute les symboles dans lesquels vous avez déjà une position, même s'ils ne correspondent plus, afin qu'une exécution en direct n'abandonne jamais silencieusement une position.

Pourquoi 16:30 ET par défaut. Prendre en compte un nouvel univers redémarre l'exécution ; un nouveau filtrage à 11:00 interromprait donc le trading en direct. L'ancrer à une heure après la clôture signifie que le rafraîchissement a lieu pendant qu'aucun échange n'est en cours et que la nouvelle liste de symboles est prête avant l'ouverture de la séance suivante.

  • L'heure est toujours l'heure du marché (ET), quel que soit votre fuseau horaire. Le texte d'aide sous le champ affiche votre équivalent local, donc 16:30 ET · 21:30 your time est le même instant, et non deux réglages.
  • La modifier est possible à tout moment. Si vous choisissez une heure dans la séance 09:30–16:00 ET, un avertissement sous le champ explique que le redémarrage interrompra le trading, mais l'exécution démarre quand même — le choix vous appartient.
  • L'intervalle et l'heure fonctionnent ensemble. 1 jour à 16:30 refiltre chaque jour après la clôture ; 3 jours à 16:30 refiltre après la clôture tous les trois jours.
  • Laisser le champ vide ou saisir autre chose que HH:MM bloque l'exécution avec une erreur en ligne.

Voir AutoTrading et QuantCloud pour la fenêtre New Run complète.

Backtests

Dans l'onglet Symbol & data de la fenêtre Run backtest, réglez Symbol source sur Screener. Au lieu de trader une liste fixe, le backtest relance votre filtre au fil de l'eau et trade ce qui correspondait à ce moment de la simulation.

RéglageCe qu'il fait
Screener sourceScreener preset ou Python script.
Sort column / DirectionComment les correspondances du préréglage sont classées avant l'application de la limite.
Rank directionPour les scripts — quelle extrémité de votre score rank() prendre en premier.
LimitCombien de symboles trader par rééquilibrage. 0 prend toutes les correspondances.
Refresh interval (days)Fréquence de relance du filtre, en jours calendaires simulés. Les scripts exigent 7 jours ou plus.
Keep tickers with an open positionGarde un symbole négociable après qu'il a cessé de correspondre, afin qu'une position ouverte puisse encore être gérée.

Les données fondamentales suivent le filtre. Avec Uses fundamentals activé, chaque symbole filtré reçoit automatiquement ses données fondamentales dans on_bar / on_tick — inutile de les choisir. Elles sont lues depuis le cache du Screener ; un symbole déjà téléchargé par le Screener ne coûte donc aucun téléchargement supplémentaire. Passez toujours symbol=symbol pour les lire — voir Données fondamentales.

« Keep tickers with an open position » concerne le trading, pas la valorisation. Activé, un symbole que vous détenez toujours continue de recevoir des barres après être sorti du filtre, de sorte que votre stratégie peut en sortir. Désactivé, le symbole cesse de recevoir des callbacks et la position reste simplement ouverte jusqu'à la fin du backtest. Dans les deux cas, la position est toujours valorisée au vrai prix du symbole, donc votre courbe de capital et vos métriques sont corrects.

on_init est rappelée à chaque rééquilibrage. Lorsqu'une source de symboles Screener est active, le moteur appelle de nouveau on_init(symbols=<ticker list>) chaque fois que le filtre est relancé. Cela permet à votre stratégie de réagir à un nouvel univers sans redémarrer la simulation. Points clés :

  • Au démarrage de l'exécution, on_init est déclenchée deux fois d'affilée — l'appel d'initialisation standard (avec symbols=None) suivi immédiatement du résultat initial du filtre.
  • Chaque nouvel appel voit l'état de niveau module laissé par l'appel précédent. L'état n'est pas réinitialisé entre les rééquilibrages.
  • Les stratégies qui déclarent def on_init(): (sans paramètre) ne sont pas affectées — les arguments optionnels sont associés par nom, donc le symbols manquant est simplement ignoré.

Données de calendrier pour un univers filtré

Include calendar data fonctionne avec une source de symboles Screener. Les calendriers se chargent une fois que le filtre a résolu la liste complète des tickers pour un rééquilibrage — il n'y a pas de latence de recherche à chaque tick. À savoir :

  • Les symboles retenus par le filtre mais sans barres de prix (hors de la plage de dates ou radiés avant le début de l'exécution) ne coûtent aucune requête de calendrier.
  • Un filtre large retient souvent des symboles sans calendrier sur le serveur — typiquement des tickers plus petits ou moins couverts. Le journal d'exécution indique leur nombre au lieu de faire échouer l'exécution.
  • Les calendriers sont rafraîchis à chaque rééquilibrage pour couvrir les tickers nouvellement ajoutés.

Les résultats apparaissent dans un onglet Screener Output à côté de Logs, avec chaque rééquilibrage sous forme de date repliable. Cliquez sur + pour déplier une date et voir les symboles tradés sur cette fenêtre, ou utilisez Expand all. Comme le filtre est résolu avant la première barre, tout le calendrier est disponible dès le départ.

Exigences à connaître : un backtest piloté par un screener a besoin de dates de début et de fin explicites ; les intervalles de temps supplémentaires ne sont pas pris en charge (donc get_bar renvoie None — utilisez les décalages bar.close[i] propres à chaque ticker pour l'historique) ; et Debug Test ne peut pas utiliser une source de symboles Screener — passez à Selected symbols pour déboguer. Voir Backtests.

Point-in-time et biais de survie

Chaque rééquilibrage ne voit que les rapports réellement déposés à cette date. Un filtre au 5 mai 2021 ne verra pas un trimestre clos en avril mais publié seulement en juin. L'exception est une période sans date de dépôt enregistrée, qui est admise à partir de sa fin de période — rare, mais cela signifie qu'une petite part d'anticipation est possible à cet endroit. C'est ce qui rend le résultat honnête, et c'est aussi pourquoi les sélections d'un backtest ne correspondent pas à ce que vous obtenez en filtrant la même date avec les données d'aujourd'hui.

Deux éléments reflètent encore aujourd'hui, et non la date simulée :

  • Sur un flux de courtier connecté, les correspondances sont filtrées sur les symboles négociables chez votre courtier à l'instant présent ; une société radiée depuis est donc écartée même d'un rééquilibrage où elle était parfaitement négociable. Un flux QuantCraft (B2) ignore cette vérification.
  • L'univers en cache ne contient que les sociétés que le corpus de données fondamentales conserve encore ; une société radiée de longue date n'apparaîtra donc pas du tout.

La précision point-in-time s'applique aux valeurs lues par un filtre, pas à l'existence des sociétés qu'il contient. Gardez cela à l'esprit pour les résultats sur le long terme.


Interpréter les résultats

Ne pas avoir assez d'historique fait échouer un symbole — il ne passe jamais discrètement. Demander « Grew 8 in a row » pour une société qui n'a que cinq trimestres de données l'exclut. Exclure plutôt que laisser passer garantit qu'un jeu de résultats ne surestime jamais.

Autres cas où un symbole est exclu plutôt que retenu :

  • % Change ne peut pas se calculer à partir d'une valeur de départ nulle.
  • CAGR % exige que les deux extrémités soient positives.
  • Average over N échoue si une valeur de la fenêtre manque — les nuls ne sont pas ignorés.
  • Un champ que la société ne publie pas la fait échouer, ce qui compte surtout pour Financials Extended.
  • Les filtres de classement rejettent les symboles sans valeur pour le champ classé.

Une particularité du classement : les valeurs ex æquo ne partagent pas un rang centile, donc deux valeurs identiques peuvent tomber de part et d'autre d'un seuil Percentile rank ≥.

Si le serveur est injoignable, vous obtenez une erreur claire plutôt qu'un repli silencieux et lent, et une exécution qui reste silencieuse pendant 90 secondes est signalée comme une erreur au lieu de se bloquer.


Voir aussi

  • AutoTrading — exécutions forward en masse, y compris la portée de cible Screener
  • QuantCloud — exécuteurs cloud avec tâches en masse pilotées par le Screener
  • Backtests — utiliser un filtre comme source de symboles d'un backtest
  • Données fondamentales — lire les données fondamentales dans les callbacks de stratégie, et la référence des champs
  • QuantCraft AI — laisser l'IA construire et exécuter des filtres pour vous
  • Facteurs Fama-French — les données de facteurs derrière l'onglet Factor Exposure de la fenêtre de détail
Screener — Documentation (1.0 (latest)) | QuantCraft