Ho uno screener azionario fatto su misura. L’ha costruito Google AI Studio, io ho fatto il capo.
L’idea era semplice. Forse troppo.
Volevo uno strumento mio per analizzare le azioni — qualcosa che prendesse un ticker, tirasse fuori Free Cash Flow, ROIC e PEG Ratio, e mi dicesse se quell’azienda valeva la pena approfondire. Niente abbonamenti da 50€ al mese a piattaforme che fanno il 90% di cose che non mi servono. Roba mia, locale, gratis.
Il problema è che le mie conoscenze in materia di programmazione si fermano al basic del glorioso C64.
Poi ho pensato: e se non fossi io a scriverlo?
Google AI Studio come sviluppatore personale
Ho aperto Google AI Studio, ho caricato Gemini, e ho iniziato a trattarlo esattamente come tratterei un programmatore a cui sto commissionando un lavoro.
Il primo prompt che ho scritto non conteneva una sola riga di codice richiesta. Anzi, ho esplicitamente vietato all’AI di scriverne.
“Ciao. Sto sviluppando un tool di analisi fondamentale per uso personale in Python. Il progetto si chiama ‘Value Investing Screener’. Voglio usare: Python come linguaggio, Streamlit per l’interfaccia web locale, yfinance come fonte dati, Pandas per la manipolazione dati. Il mio obiettivo è inserire un Ticker azionario e ottenere un’analisi basata su Free Cash Flow, ROIC e PEG Ratio. Comportati come un Senior Python Developer esperto in FinTech. Non scrivere ancora codice, confermami solo che hai capito lo stack tecnologico e l’obiettivo.”
Perché vietargli di scrivere codice subito? Perché l’errore più comune — l’ho capito dopo — è chiedere all’AI di costruire tutto al primo messaggio. Il risultato è quasi sempre un’accozzaglia di funzioni ingestibili che sembra funzionare ma crolla al primo cambiamento.
Assegnare una persona specifica (“Senior Python Developer esperto in FinTech”) ha un effetto concreto: forza l’AI a usare librerie e pattern di design professionali invece di soluzioni improvvisate. E chiedere di non scrivere codice ha permesso di allinearci sulla visione globale prima di sporcarci le mani.
Ha funzionato. L’AI ha confermato tutto, ha fatto domande pertinenti, e solo dopo siamo partiti.
La lezione più importante: vago vs. preciso
A un certo punto volevo aggiungere la possibilità di caricare un CSV con una lista di ticker — uno screener vero, non solo l’analisi di una singola azienda. E qui ho fatto il mio primo errore serio.
Il prompt che ho scritto inizialmente era questo:
“Aggiungi la possibilità di caricare un CSV con i ticker. Mostra i risultati in una tabella e fai in modo che se clicco su un’azienda vedo i suoi grafici.”
Risultato: l’app si ricaricava ad ogni click perdendo tutti i dati, il caricamento lungo non aveva nessuna barra di progresso, e l’interfaccia era un disastro. L’AI aveva fatto esattamente quello che gli avevo chiesto — il problema era che avevo chiesto la cosa sbagliata.
Ho riscritto il prompt da zero, questa volta descrivendo l’esatto flusso utente:
“Modifica l’app Streamlit per supportare due modalità: Modalità Singola e Modalità Screener (Upload CSV). Il CSV deve avere una colonna ‘Ticker’. Quando il file è caricato: leggi la lista, esegui un ciclo per scaricare i dati e mostra una Barra di Progresso. Mostra una tabella riassuntiva con semafori — applica uno stile condizionale (Pandas Styler) per colorare lo sfondo delle celle di Verde o Rosso in base ai target. Implementa una logica di selezione: l’utente deve poter selezionare una riga dalla tabella e vedere sotto la Scheda di Approfondimento.”
La differenza non sta nella lunghezza. Sta nel fatto che invece di descrivere il risultato desiderato in modo generico, ho descritto il comportamento preciso dell’interfaccia, ho citato le librerie specifiche (Pandas Styler, Session State di Streamlit) e ho esplicitato l’architettura che volevo (Master-Detail). L’AI ha capito immediatamente cosa serviva e ha prodotto codice solido al primo tentativo.
Quando i dati fanno i capricci: il prompt chirurgico
Il codice era perfetto. I dati no.
Quando ho testato lo screener con azioni italiane, i risultati erano completamente sballati. Ho impiegato un po’ a capire perché — poi ho trovato il problema. Il ticker di Poste Italiane è PST — ma solo se aggiungi .MI, il suffisso della borsa di Milano. Senza suffisso, Yahoo Finance trova PST sul mercato americano: un prodotto ProShares, roba completamente diversa.
Anche qui, il prompt con cui ho descritto il problema ha fatto la differenza.
Non ho scritto “il codice non va, aggiustalo”. Ho scritto questo:
“La tabella funziona sicuramente con i ticker delle aziende US. Ci sono problemi invece con i ticker delle altre nazioni. Nello specifico ho fatto un CSV con solo ticker italiani e i risultati sono sballati. Ad esempio il ticker di Poste Italiane è PST e lo script lo legge come un prodotto ProShares americano.”
Sintomo esatto. Caso reale. Niente genericità.
L’AI ha attinto alla sua conoscenza di dominio — le API di Yahoo Finance richiedono il suffisso .MI per la borsa di Milano — e non si è limitata a correggere il bug. Ha proposto e implementato una soluzione strutturale: un menù a tendina nella sidebar per selezionare il mercato di riferimento (USA, Milano, Parigi, Francoforte), applicando dinamicamente il suffisso corretto a tutto il CSV.
Un fix puntuale sarebbe durato una settimana. Una soluzione strutturale dura per sempre.
Cosa ho ottenuto alla fine
Dopo diverse sessioni di lavoro, lo screener è diventato qualcosa di più grande di quanto avessi immaginato all’inizio. Analisi fondamentale con FCF, ROIC e PEG Ratio. Analisi tecnica con RSI, Medie Mobili e Bollinger Bands, sintetizzate in un “Timing Score” da 0 a 100. Caricamento di file CSV con decine di ticker elaborati in parallelo. E una funzione che mi ha sorpreso più di tutte: un generatore di prompt precompilato con tutti i dati dell’azienda, pronto da incollare in Claude o ChatGPT per ottenere l’analisi qualitativa — il cosiddetto “moat”, il vantaggio competitivo — che nessun numero da solo può raccontare.
C’è però un limite strutturale che ho scoperto lungo la strada e che vale la pena nominare: il Temporal Mismatch. I dati di bilancio che Yahoo Finance fornisce gratuitamente hanno un ritardo fisiologico rispetto al prezzo attuale. Stai dividendo il prezzo di oggi per utili o cash flow di un anno fa. Tutti i multipli ne risentono. Non è un bug del codice — è un limite intrinseco dei dati gratuiti. L’unico modo per arginarlo è affiancare sempre un’analisi qualitativa ragionata, che è esattamente a cosa serve il prompt generator integrato.
La regola d’oro che mi porto a casa
Se c’è una cosa sola che questo esperimento mi ha insegnato è questa: tratta l’AI come un programmatore Junior geniale ma completamente privo di contesto aziendale. Sa tutto sulla sintassi, conosce le librerie, scrive codice pulito — ma non sa niente del tuo problema specifico finché non glielo spieghi bene.
Più contesto dai, più vincoli espliciti, più esempi reali — meno tempo passi a correggere output che tecnicamente funzionano ma risolvono il problema sbagliato.
Ho passato più tempo a costruire i prompt giusti che a testare il codice. All’inizio mi sembrava un paradosso. Adesso mi sembra ovvio.
Il codice dello screener è pubblico su GitHub: github.com/AlvioInsights/Value-Investing-and-Timing-Suite. Puoi scaricarlo, usarlo, modificarlo.
Se ti stai chiedendo perché proprio FCF, ROIC e PEG Ratio e non altre metriche, lo puoi scoprire qui. Quelle tre scelte non sono casuali — e la storia dietro merita spazio a parte.
