Automatisation des informations compétitives: de 10 à Q aux informations en minutes


Auteur (s): Dave Ginsburg
Publié à l’origine sur Vers l’IA.
Dans le monde du marketing rapide, obtenir un instantané financier rapide mais rigoureux de vos concurrents peut faire la différence entre saisir une opportunité et manquer la marque. Au-delà des communiqués de presse et des blips de nouvelles, la meilleure source d’informations non filtrées réside souvent dans les dépôts de la SEC d’une entreprise – en particulier les rapports trimestriels de 10 à Q. Ces documents présentent tout, des risques émergents aux commentaires des exécutifs sur la performance et la stratégie.
Introduction
Pour éliminer le manuel de téléchargement de PDF, de chasse dans des dizaines de pages et de notes de gribouillage, j’ai construit une boîte à outils Python légère alimentée par Openai et Sec-API. Dans une seule commande, vous pouvez:
- Spécifiez jusqu’à six tickers et tirer automatiquement leurs derniers dépôts 10-Q (point 1a: facteurs de risque et article 2: MD & A).
- Répondre aux données du marché De Yahoo Finance au cours de la dernière année – l’EPS, les revenus, les marges et les mouvements des prix des actions ont tous été indexés sur zéro. Notez que certaines des lignes de tendance sont interdites les limites traditionnelles, car certaines entreprises ont des trimestres non standard.
- Résumer chaque section via l’API Chatgpt, se déchaîner Passages plus longs pour s’adapter dans les limites de contexte. Notez que les invites de mise au point, qui peuvent être modifiées pour souligner d’autres domaines dans les éléments 1a et 2.
- Compiler Les plats distillés à emporter et quatre graphiques personnalisables dans un rapport PDF poli – prêt à partager avec votre équipe.


Alors que SEC-API (à 55 $ / mois) gère le levage de l’extraction SEC, et Chatgpt alimente l’analyse rapide à une dépense minimale de 136K jetons (pour les tickets sélectionnés) avec GPT-4O-MINI, l’ensemble du processus fonctionne en minutes, pas des heures.
Notez que dans le schéma des choses, le coût SEC-API n’est pas hors ligne, et c’est une méthode beaucoup plus stable pour tirer des rapports que de nombreuses alternatives. Les améliorations futures du script pourraient détecter automatiquement les transactions d’initiés ou les événements matériels en temps réel en tirant différents dépôts, mais même dans sa forme actuelle, ce script transforme les dépôts trimestriels d’une corvée en un avantage stratégique.
Les sections suivantes décrivent le script, les approches prises et d’autres outils exploités. Le script Python complet suit cette description, et vous devrez spécifier vos touches API ainsi que le répertoire de base des fichiers.
1. Configuration et configuration
- Clés et clients API
Nous tirons les touches SEC-API et OpenAI à partir des variables d’environnement (avec des défauts de défaut sensibles pour le développement), puis instanciers le Queryapi, extractorapiet le client Openai.
Pourquoi? La centralisation des informations d’identification en haut facilite l’échange dans de nouvelles clés ou le passage à un environnement de test sans chasser le code. - Répertoire de travail et liste de ticker
Toutes les sorties (JSON brut, graphiques, PDF) / Home / Dave / Finance. Nous acceptons jusqu’à six tickers via la ligne de commande, validant immédiatement le nombre d’entrées.
Pourquoi? Une seule «zone de drop» pour les artefacts maintient les choses bien rangées, et la flexibilité de la CLI vous permet de traiter rapidement n’importe quel sous-ensemble d’entreprises.
2. Sec 10-Q Fetch & Extraction
for each ticker:
• Query the latest 10-Q filing
• Pull two key sections:
– Item 1A: Risk Factors
– Item 2: Management Discussion & Analysis (MD&A)
• Save as `_10q.json`
- Pourquoi nous utilisons Sec-API Au lieu de gratter HTML:
Il renvoie des blobs JSON propres pour exactement les sections dont nous avons besoin – pas d’analyse XPATH ou PDF fragile. - Gestion des erreurs par section S’assure que si une extraction échoue, le script se poursuit pour les autres.
3. Données financières et génération de graphiques
for each ticker:
• Download 12 months of daily closing prices via yfinance
• Pull quarterly EPS, Revenue, Gross Profit
• Compute quarterly gross margin % and normalize price to a 0-baseline
• Render four Matplotlib line charts
– EPS
– Revenue
– Gross Margin %
– Indexed Share-Price Change
- Pourquoi matplotlib + boucles simples?
Il est léger, ne nécessite aucun style de fantaisie et est entièrement scriptable dans un environnement de serveur sans tête. - Pourquoi normaliser et agréger trimestriel?
Les instantanés trimestriels lissent le bruit quotidien et donnent une cadence cohérente pour comparaison entre les entreprises.


4. Résumé GPT
Summarize section(text, section, ticker):
1. Split text into ≤15 000-char chunks
2. For each chunk:
– Build a precise GPT prompt:
• “Extract the most important … Respond with at most 8 concise bullet points …”
– Call gpt-4o-mini
– Regex‐extract the JSON array out of the raw reply
– Append and dedupe
3. Return the top 8 unique bullets
- Se déchaîner
De longues sections de la SEC (jusqu’à ~ 130 000 caractères) souffleraient devant la fenêtre de ~ 16 000 personnes de GPT. En tranchant en pièces de 15 000 caractères, chaque appel API reste en toute sécurité dans les limites. - Extraction JSON avec Regex
Même avec des instructions explicites de «sortie JSON uniquement», les modèles ont parfois consacré ou ajoute le texte errant. Un simple re.search (r (. * ) ”) Garantit contre les erreurs par-parie en isolant le tableau JSON. - Déduplication et limitation
Nous rassemblons des balles de chaque morceau, les convertissons explicitement en cordes (en évitant les dicts indemnisables), puis ne gardez que les 8 premiers points uniques. Cela donne un résumé serré et non redondant. - Backoff exponentiel avec gigue
Les limites de taux et les erreurs transitoires sont manipulées en réessayant jusqu’à six fois par morceau, en attendant 30 → 60 → 120 s entre les essais, plus un peu de «gigue» aléatoire pour éviter les appels d’API tonnerre.
5. Assemblage PDF
doc = SimpleDocTemplate('Full_Report.pdf')
for each ticker:
• Heading: ticker symbol
• Subheading: Key Risks
– Bullet list from JSON summary
• Subheading: Management Discussion & Analysis
– Bullet list from JSON summary
• Page break
• Final section: “Financial Performance Overview”
– Embed the four charts (EPS, Revenue, Margin, Price)
doc.build(elements)
- Pourquoi reporterb?
Il s’agit d’une bibliothèque pur-python avec des abstractions de document de flux simple (paragraphes, images, pauses de page) et pas de dépendances externes. - Pourquoi PDF?
Un seul livrable autonome qui peut être envoyé par e-mail, archivé ou imprimé sans se soucier des images manquantes ou des types de fichiers mixtes.
6. Mettre tout cela ensemble
- Rassemblement de données
– Texte de SEC brut + séries chronologiques financières - Analyse et résumé
– Distillation automatisée de la prose - Visualisation
– Effacer des graphiques pour comparer les mesures clés - Déclaration
– Un PDF combinant le récit et les graphiques
Ce pipeline assure la répétabilité, l’évolutivité (ajouter plus de tickers selon les besoins) et la robustesse (rate-limit / backoff, chunking, JSON – SAFEGUARDS). Il peut être intégré dans la nuit emploissignalant des tableaux de bord, ou être adapté à d’autres dépôts SEC (par exemple, 10 kk, 8 k-k) avec un minimum de modifications.


7. Script Python
Disponible à: https://github.com/daveginsburg/financial_reportting.git ou https://gist.github.com/daveginsburg/6cac662c83901d167cbac63e8f8bc410
Publié via Vers l’IA
Source link
