Ho costruito un agente di monitoraggio delle azioni con OpenClaw, Exa e Milvus per $20/mese

  • Tutorials
March 13, 2026
Cheney Zhang

Faccio trading di azioni statunitensi per conto terzi, che è un modo gentile per dire che perdo soldi per hobby. I miei colleghi scherzano sul fatto che la mia strategia è "comprare al massimo sull'eccitazione, vendere al minimo sulla paura, ripetere settimanalmente".

La parte della ripetizione è quella che mi uccide. Ogni volta che osservo il mercato, finisco per fare un'operazione che non avevo previsto. Il petrolio sale e io vendo in preda al panico. Quel titolo tecnologico sale del 4% e lo inseguo. Una settimana dopo, guardando la mia cronologia degli scambi, mi chiedo: non ho fatto esattamente questa cosa lo scorso trimestre?

Ho quindi creato un agente con OpenClaw che osserva il mercato al posto mio e mi impedisce di commettere gli stessi errori. Non fa trading e non tocca il mio denaro, perché sarebbe un rischio troppo grande per la sicurezza. Invece, mi fa risparmiare il tempo speso per osservare il mercato e mi impedisce di commettere gli stessi errori.

Questo agente è composto da tre parti e costa circa 20 dollari al mese:

  • OpenClaw per gestire il tutto con il pilota automatico. OpenClaw gestisce l'agente con un battito cardiaco di 30 minuti e mi segnala solo quando qualcosa è veramente importante, alleviando la FOMO che mi teneva incollato allo schermo. Prima, più guardavo i prezzi, più reagivo d'impulso.
  • Exa per ricerche accurate e in tempo reale. Exa sfoglia e riassume fonti di informazione selezionate a mano in base a un programma, in modo da ottenere un briefing pulito ogni mattina. Prima passavo un'ora al giorno a setacciare lo spam SEO e le speculazioni per trovare notizie affidabili, e non poteva essere automatizzato perché i siti di finanza si aggiornano quotidianamente per combattere gli scrapers.
  • Milvus per la storia e le preferenze personali. Milvus memorizza la mia storia di trading e l'agente la ricerca prima che io prenda una decisione: se sto per ripetere qualcosa di cui mi sono pentito, me lo dice. Prima, rivedere le operazioni passate era abbastanza noioso e non lo facevo, così gli stessi errori continuavano a ripetersi con ticker diversi. Zilliz Cloud è la versione completamente gestita di Milvus. Se desiderate un'esperienza senza problemi, Zilliz Cloud è un'ottima opzione(è disponibile il livello gratuito).

Ecco come l'ho configurato, passo dopo passo.

Passo 1: ottenere informazioni di mercato in tempo reale con Exa

In precedenza, avevo provato a navigare tra le app finanziarie, a scrivere scrapers e a cercare terminali di dati professionali. La mia esperienza? Le app seppellivano il segnale sotto il rumore, gli scrapers si rompevano continuamente e le API professionali erano proibitive. Exa è un'API di ricerca costruita per agenti AI che risolve i problemi di cui sopra.

Exa è un'API di ricerca sul web che restituisce dati strutturati e pronti per l'AI per gli agenti AI. È alimentata da Zilliz Cloud (il servizio completamente gestito di Milvus). Se Perplexity è un motore di ricerca usato dagli esseri umani, Exa è usato dall'IA. L'agente invia una query ed Exa restituisce il testo dell'articolo, le frasi chiave e i riassunti in formato JSON, un output strutturato che l'agente può analizzare e utilizzare direttamente, senza bisogno di scraping.

Exa utilizza anche la ricerca semantica, in modo che l'agente possa eseguire query in linguaggio naturale. Una query del tipo "Perché le azioni NVIDIA sono scese nonostante i forti guadagni del quarto trimestre 2026" restituisce le analisi di Reuters e Bloomberg, non una pagina di clickbait SEO.

Exa ha un livello gratuito - 1.000 ricerche al mese - che è più che sufficiente per iniziare. Per seguire la procedura, installate l'SDK e inserite la vostra chiave API:

pip install exa-py

Ecco la chiamata principale:

from exa_py import Exa

exa = Exa(api_key=“your-api-key”)

# Semantic search — describe what you want in plain language result = exa.search( “Why did NVIDIA stock drop despite strong Q4 2026 earnings”, type=“neural”, # semantic search, not keyword num_results=10, start_published_date=“2026-02-25”, # only search for latest information contents={ “text”: {“max_characters”: 3000}, # get full article text “highlights”: {“num_sentences”: 3}, # key sentences “summary”: {“query”: “What caused the stock drop?”} # AI summary } )

for r in result.results: print(f"[{r.published_date}] {r.title}") print(f" Summary: {r.summary}") print(f" URL: {r.url}\n")

Il parametro contents fa la maggior parte del lavoro pesante: text estrae l'intero articolo, highlights estrae le frasi chiave e summary genera un riassunto mirato basato su una domanda fornita dall'utente. Una chiamata all'API sostituisce venti minuti di navigazione tra le schede.

Questo schema di base copre molte cose, ma ho finito per creare quattro varianti per gestire le diverse situazioni in cui mi imbatto regolarmente:

  • Filtro per credibilità della fonte. Per l'analisi degli utili, voglio solo Reuters, Bloomberg o il Wall Street Journal, non le content farm che riscrivono i loro report dodici ore dopo.
# Only financial reports from trusted sources
earnings = exa.search(
    "NVIDIA Q4 2026 earnings analysis",
    category="financial report",
    num_results=5,
    include_domains=["reuters.com", "bloomberg.com", "wsj.com"],
    contents={"highlights": True}
)
  • Trovare analisi simili. Quando leggo un buon articolo, voglio altre prospettive sullo stesso argomento senza doverle cercare manualmente.
# "Show me more analysis like this one"
similar = exa.find_similar(
    url="https://fortune.com/2026/02/25/nvidia-nvda-earnings-q4-results",
    num_results=10,
    start_published_date="2026-02-20",
    contents={"text": {"max_characters": 2000}}
)
  • Ricerca approfondita per domande complesse. Alcune domande non possono trovare risposta in un singolo articolo, come ad esempio l'impatto delle tensioni in Medio Oriente sulle catene di fornitura dei semiconduttori. La ricerca profonda sintetizza più fonti e restituisce sintesi strutturate.
# Complex question — needs multi-source synthesis
deep_result = exa.search(
    "How will Middle East tensions affect global tech supply chain and semiconductor stocks",
    type="deep",
    num_results=8,
    contents={
        "summary": {
            "query": "Extract: 1) supply chain risk 2) stock impact 3) timeline"
        }
    }
)
  • Monitoraggio delle notizie in tempo reale. Durante l'orario di mercato, ho bisogno di notizie dell'ultima ora filtrate solo per il giorno corrente.
# Breaking news only — today' iss date 2026-03-05
breaking = exa.search(
    "US stock market breaking news today",
    category="news",
    num_results=20,
    start_published_date="2026-03-05",
    contents={"highlights": {"num_sentences": 2}}
)

Ho scritto una dozzina di modelli utilizzando questi schemi, che coprono la politica della Fed, gli utili del settore tecnologico, i prezzi del petrolio e gli indicatori macro. Vengono eseguiti automaticamente ogni mattina e inviano i risultati al mio telefono. Quello che prima richiedeva un'ora di navigazione ora richiede cinque minuti di lettura dei riassunti davanti a un caffè.

Fase 2: memorizzare la storia del trading in Milvus per prendere decisioni più intelligenti

Exa ha risolto il mio problema di informazioni. Ma continuavo a ripetere le stesse operazioni: panic-selling durante i ribassi che si riprendevano nel giro di pochi giorni, e inseguimento del momentum in titoli che erano già sopravvalutati. Agivo in base alle emozioni, me ne pentivo e dimenticavo la lezione quando si ripresentava una situazione simile.

Avevo bisogno di una base di conoscenza personale: qualcosa che potesse memorizzare le mie operazioni passate, i miei ragionamenti e i miei errori. Non qualcosa che dovessi rivedere manualmente (ci avevo provato e non avevo mai continuato), ma qualcosa che l'agente potesse cercare da solo ogni volta che si presentava una situazione simile. Se sto per ripetere un errore, voglio che l'agente me lo dica prima che io prema il pulsante. La corrispondenza tra "situazione attuale" ed "esperienza passata" è un problema di ricerca di similarità che i database vettoriali risolvono, quindi ne ho scelto uno per memorizzare i miei dati.

Ho usato Milvus Lite, una versione leggera di Milvus che funziona localmente. Non ha server ed è perfetta per la prototipazione e la sperimentazione. Ho suddiviso i miei dati in tre collezioni. La dimensione dell'embedding è 1536 per corrispondere al modello text-embedding-3-small di OpenAI, che può essere utilizzato direttamente:

from pymilvus import MilvusClient, DataType
from openai import OpenAI

milvus = MilvusClient(“./my_investment_brain.db”) llm = OpenAI()

def embed(text: str) -> list[float]: return llm.embeddings.create( input=text, model=“text-embedding-3-small” ).data[0].embedding

# Collection 1: past decisions and lessons # Every trade I make, I write a short review afterward milvus.create_collection( “decisions”, dimension=1536, auto_id=True )

# Collection 2: my preferences and biases # Things like “I tend to hold tech stocks too long” milvus.create_collection( “preferences”, dimension=1536, auto_id=True )

# Collection 3: market patterns I’ve observed # “When VIX > 30 and Fed is dovish, buy the dip usually works” milvus.create_collection( “patterns”, dimension=1536, auto_id=True )

Le tre raccolte corrispondono a tre tipi di dati personali, ciascuno con una diversa strategia di recupero:

TipoCosa memorizzaCome l'agente li usa
PreferenzePregiudizi, tolleranza al rischio, filosofia di investimento ("tendo a tenere i titoli tecnologici troppo a lungo")Caricato nel contesto dell'agente a ogni esecuzione
Decisioni e modelliOperazioni specifiche del passato, lezioni apprese, osservazioni di mercato.Recuperati tramite ricerca per similarità solo quando si presenta una situazione rilevante
Conoscenza esternaRapporti di ricerca, documenti SEC, dati pubbliciNon memorizzate in Milvus - ricercabili tramite Exa

Ho creato tre raccolte diverse, perché unirle in un'unica raccolta significherebbe appesantire ogni richiesta di informazioni con la cronologia degli scambi irrilevante, oppure perdere i pregiudizi fondamentali quando non corrispondono abbastanza alla query corrente.

Una volta create le raccolte, avevo bisogno di un modo per popolarle automaticamente. Non volevo copiare e incollare le informazioni dopo ogni conversazione con l'agente, quindi ho costruito un estrattore di memoria che viene eseguito alla fine di ogni sessione di chat.

L'estrattore fa due cose: estrae e deduplica. L'estrattore chiede all'LLM di estrarre dalla conversazione informazioni strutturate (decisioni, preferenze, schemi, lezioni) e le indirizza alla giusta raccolta. Prima di memorizzare qualcosa, controlla la somiglianza con ciò che è già presente. Se una nuova intuizione è simile per più del 92% a una voce esistente, viene saltata.

import json

def extract_and_store_memories(conversation: list[dict]) -> int: “"” After each chat session, extract personal insights and store them in Milvus automatically. “"” # Ask LLM to extract structured memories from conversation extraction_prompt = “"” Analyze this conversation and extract any personal investment insights. Look for: 1. DECISIONS: specific buy/sell actions and reasoning 2. PREFERENCES: risk tolerance, sector biases, holding patterns 3. PATTERNS: market observations, correlations the user noticed 4. LESSONS: things the user learned or mistakes they reflected on

Return a JSON array. Each item has:
- "type": one of "decision", "preference", "pattern", "lesson"
- "content": the insight in 2-3 sentences
- "confidence": how explicitly the user stated this (high/medium/low)

Only extract what the user clearly expressed. Do not infer or guess.
If nothing relevant, return an empty array.
&quot;&quot;&quot;</span>

response = llm.chat.completions.create(
    model=<span class="hljs-string">&quot;gpt-4o&quot;</span>,
    messages=[
        {<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;system&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: extraction_prompt},
        *conversation
    ],
    response_format={<span class="hljs-string">&quot;type&quot;</span>: <span class="hljs-string">&quot;json_object&quot;</span>}
)

memories = json.loads(response.choices[<span class="hljs-number">0</span>].message.content)
stored = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> mem <span class="hljs-keyword">in</span> memories.get(<span class="hljs-string">&quot;items&quot;</span>, []):
    <span class="hljs-keyword">if</span> mem[<span class="hljs-string">&quot;confidence&quot;</span>] == <span class="hljs-string">&quot;low&quot;</span>:
        <span class="hljs-keyword">continue</span>    <span class="hljs-comment"># skip uncertain inferences</span>

    collection = {
        <span class="hljs-string">&quot;decision&quot;</span>: <span class="hljs-string">&quot;decisions&quot;</span>,
        <span class="hljs-string">&quot;lesson&quot;</span>: <span class="hljs-string">&quot;decisions&quot;</span>,
        <span class="hljs-string">&quot;preference&quot;</span>: <span class="hljs-string">&quot;preferences&quot;</span>,
        <span class="hljs-string">&quot;pattern&quot;</span>: <span class="hljs-string">&quot;patterns&quot;</span>
    }.get(mem[<span class="hljs-string">&quot;type&quot;</span>], <span class="hljs-string">&quot;decisions&quot;</span>)

    <span class="hljs-comment"># Check for duplicates — don&#x27;t store the same insight twice</span>
    existing = milvus.search(
        collection,
        data=[embed(mem[<span class="hljs-string">&quot;content&quot;</span>])],
        limit=<span class="hljs-number">1</span>,
        output_fields=[<span class="hljs-string">&quot;text&quot;</span>]
    )

    <span class="hljs-keyword">if</span> existing[<span class="hljs-number">0</span>] <span class="hljs-keyword">and</span> existing[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;distance&quot;</span>] &gt; <span class="hljs-number">0.92</span>:
        <span class="hljs-keyword">continue</span>    <span class="hljs-comment"># too similar to existing memory, skip</span>

    milvus.insert(collection, [{
        <span class="hljs-string">&quot;vector&quot;</span>: embed(mem[<span class="hljs-string">&quot;content&quot;</span>]),
        <span class="hljs-string">&quot;text&quot;</span>: mem[<span class="hljs-string">&quot;content&quot;</span>],
        <span class="hljs-string">&quot;type&quot;</span>: mem[<span class="hljs-string">&quot;type&quot;</span>],
        <span class="hljs-string">&quot;source&quot;</span>: <span class="hljs-string">&quot;chat_extraction&quot;</span>,
        <span class="hljs-string">&quot;date&quot;</span>: <span class="hljs-string">&quot;2026-03-05&quot;</span>
    }])
    stored += <span class="hljs-number">1</span>

<span class="hljs-keyword">return</span> stored

Quando mi trovo di fronte a una nuova situazione di mercato e mi viene voglia di fare trading, l'agente esegue una funzione di richiamo. Descrivo ciò che sta accadendo e l'agente cerca in tutte e tre le raccolte lo storico pertinente:

def recall_my_experience(situation: str) -> dict:
    """
    Given a current market situation, retrieve my relevant
    past experiences, preferences, and observed patterns.
    """
    query_vec = embed(situation)
<span class="hljs-comment"># Search all three collections in parallel</span>
past_decisions = milvus.search(
    <span class="hljs-string">&quot;decisions&quot;</span>, data=[query_vec], limit=<span class="hljs-number">3</span>,
    output_fields=[<span class="hljs-string">&quot;text&quot;</span>, <span class="hljs-string">&quot;date&quot;</span>, <span class="hljs-string">&quot;tag&quot;</span>]
)
my_preferences = milvus.search(
    <span class="hljs-string">&quot;preferences&quot;</span>, data=[query_vec], limit=<span class="hljs-number">2</span>,
    output_fields=[<span class="hljs-string">&quot;text&quot;</span>, <span class="hljs-string">&quot;type&quot;</span>]
)
my_patterns = milvus.search(
    <span class="hljs-string">&quot;patterns&quot;</span>, data=[query_vec], limit=<span class="hljs-number">2</span>,
    output_fields=[<span class="hljs-string">&quot;text&quot;</span>]
)

<span class="hljs-keyword">return</span> {
    <span class="hljs-string">&quot;past_decisions&quot;</span>: [h[<span class="hljs-string">&quot;entity&quot;</span>] <span class="hljs-keyword">for</span> h <span class="hljs-keyword">in</span> past_decisions[<span class="hljs-number">0</span>]],
    <span class="hljs-string">&quot;preferences&quot;</span>: [h[<span class="hljs-string">&quot;entity&quot;</span>] <span class="hljs-keyword">for</span> h <span class="hljs-keyword">in</span> my_preferences[<span class="hljs-number">0</span>]],
    <span class="hljs-string">&quot;patterns&quot;</span>: [h[<span class="hljs-string">&quot;entity&quot;</span>] <span class="hljs-keyword">for</span> h <span class="hljs-keyword">in</span> my_patterns[<span class="hljs-number">0</span>]]
}

# When Agent analyzes current tech selloff: context = recall_my_experience( “tech stocks dropping 3-4% due to Middle East tensions, March 2026” )

# context now contains: # - My 2024-10 lesson about not panic-selling during ME crisis # - My preference: “I tend to overweight geopolitical risk” # - My pattern: “tech selloffs from geopolitics recover in 1-3 weeks”

Ad esempio, quando i titoli tecnologici sono scesi del 3-4% a causa delle tensioni in Medio Oriente all'inizio di marzo, l'agente ha richiamato tre cose: una lezione dell'ottobre 2024 su come evitare il panic-selling durante un calo geopolitico, una nota di preferenza secondo cui tendo a sovrappesare il rischio geopolitico e uno schema che avevo registrato (i ribassi tecnologici guidati dalla geopolitica si riprendono in genere in una o tre settimane).

Il commento del mio collega: se i dati di allenamento sono un record perdente, cosa sta imparando esattamente l'IA? Ma è proprio questo il punto: l'agente non sta copiando le mie operazioni, ma le sta memorizzando in modo da potermi dissuadere dalla prossima.

Fase 3: insegnare all'agente ad analizzare con le competenze di OpenClaw

A questo punto, l'agente dispone di informazioni affidabili(Exa) e di una memoria personale(Milvus). Ma se si consegnano entrambe a un LLM e gli si dice "analizza questo", si ottiene una risposta generica, con una copertura di tutto. Cita ogni possibile angolazione e conclude con "gli investitori dovrebbero soppesare i rischi". Tanto valeva non dire nulla.

La soluzione è scrivere il proprio quadro analitico e fornirlo all'agente sotto forma di istruzioni esplicite. Dovete dirgli quali indicatori vi interessano, quali situazioni considerate pericolose e quando essere prudenti o aggressivi. Queste regole sono diverse per ogni investitore, quindi dovete definirle voi stessi.

OpenClaw lo fa attraverso le Skills, file markdown in una directory skills/. Quando l'agente incontra una situazione rilevante, carica la Skill corrispondente e segue il vostro schema invece di andare a ruota libera.

Eccone una che ho scritto per valutare i titoli azionari dopo una relazione sugli utili:

---
name: post-earnings-eval
description: >
  Evaluate whether to buy, hold, or sell after an earnings report.
  Trigger when discussing any stock's post-earnings price action,
  or when a watchlist stock reports earnings.
---

Post-Earnings Evaluation Framework

When analyzing a stock after earnings release:

Step 1: Get the facts

Use Exa to search for:

  • Actual vs expected: revenue, EPS, forward guidance
  • Analyst reactions from top-tier sources
  • Options market implied move vs actual move

Step 2: Check my history

Use Milvus recall to find:

  • Have I traded this stock after earnings before?
  • What did I get right or wrong last time?
  • Do I have a known bias about this sector?

Step 3: Apply my rules

  • If revenue beat > 5% AND guidance raised → lean BUY
  • If stock drops > 5% on a beat → likely sentiment/macro driven
    • Check: is the drop about THIS company or the whole market?
    • Check my history: did I overreact to similar drops before?
  • If P/E > 2x sector average after beat → caution, priced for perfection

Step 4: Output format

Signal: BUY / HOLD / SELL / WAIT Confidence: High / Medium / Low Reasoning: 3 bullets max Past mistake reminder: what I got wrong in similar situations

IMPORTANT: Always surface my past mistakes. I have a tendency to let fear override data. If my Milvus history shows I regretted selling after a dip, say so explicitly.

L'ultima riga è la più importante: "Riemergere sempre dai miei errori passati. Ho la tendenza a lasciare che la paura prevalga sui dati. Se la mia storia Milvus mostra che mi sono pentito di aver venduto dopo un calo, ditelo esplicitamente". In questo modo dico all'agente esattamente dove sbaglio, in modo che sappia quando reagire. Se si costruisce il proprio, questa è la parte da personalizzare in base ai propri pregiudizi.

Ho scritto Skill simili per l'analisi del sentiment, gli indicatori macro e i segnali di rotazione settoriale. Ho anche scritto delle Skill che simulano il modo in cui gli investitori che ammiro valuterebbero la stessa situazione: il quadro di valore di Buffett, l'approccio macro di Bridgewater. Non si tratta di decisioni, ma di prospettive aggiuntive.

Un avvertimento: non lasciate che i LLM calcolino indicatori tecnici come RSI o MACD. Hanno numeri allucinanti e sicuri. Calcolateli voi stessi o chiamate un'API dedicata, e inserite i risultati nello Skill come input.

Fase 4: Avviare l'agente con OpenClaw Heartbeat

Tutto quanto detto sopra richiede ancora di essere attivato manualmente. Se si deve aprire un terminale ogni volta che si desidera un aggiornamento, si torna praticamente a scorrere l'applicazione di intermediazione durante le riunioni.

Il meccanismo Heartbeat di OpenClaw risolve questo problema. Un gateway invia un ping all'agente ogni 30 minuti (configurabile) e l'agente controlla un file HEARTBEAT.md per decidere cosa fare in quel momento. Si tratta di un file markdown con regole basate sul tempo:

# HEARTBEAT.md — runs every 30 minutes automatically

## Morning brief (6:30-7:30 AM only)

  • Use Exa to search overnight US market news, Asian markets, oil prices
  • Search Milvus for my current positions and relevant past experiences
  • Generate a personalized morning brief (under 500 words)
  • Flag anything related to my past mistakes or current holdings
  • End with 1-3 action items
  • Send the brief to my phone

Price alerts (during US market hours 9:30 AM - 4:00 PM ET)

  • Check price changes for: NVDA, TSM, MSFT, AAPL, GOOGL
  • If any stock moved more than 3% since last check:
    • Search Milvus for: why I hold this stock, my exit criteria
    • Generate alert with context and recommendation
    • Send alert to my phone

End of day summary (after 4:30 PM ET on weekdays)

  • Summarize today’s market action for my watchlist
  • Compare actual moves with my morning expectations
  • Note any new patterns worth remembering

Risultati: Meno tempo sullo schermo, meno compravendite impulsive

Ecco cosa produce il sistema giorno per giorno:

  • Brief mattutino (7:00 AM). L'agente esegue Exa durante la notte, estrae le mie posizioni e la cronologia rilevante da Milvus e invia un riepilogo personalizzato al mio telefono - meno di 500 parole. Cosa è successo durante la notte, come si riferisce alle mie partecipazioni e da uno a tre punti di azione. Lo leggo mentre mi lavo i denti.
  • Avvisi infragiornalieri (9:30-16:00 ET). Ogni 30 minuti, l'agente controlla la mia watchlist. Se un titolo si muove più del 3%, ricevo una notifica con il contesto: perché l'ho comprato, dove si trova il mio stop-loss e se mi sono già trovato in una situazione simile.
  • Revisione settimanale (fine settimana). L'agente raccoglie l'intera settimana: i movimenti del mercato, il loro confronto con le mie aspettative mattutine e i modelli da ricordare. Il sabato dedico 30 minuti alla lettura. Il resto della settimana sto deliberatamente lontano dallo schermo.

Quest'ultimo punto è il cambiamento più importante. L'agente non solo fa risparmiare tempo, ma mi libera anche dall'osservazione del mercato. Non si può vendere nel panico se non si guardano i prezzi.

Prima di questo sistema, dedicavo 10-15 ore alla settimana alla raccolta di informazioni, al monitoraggio del mercato e alla revisione delle transazioni, sparpagliate tra riunioni, spostamenti e scorrimento notturno. Ora sono circa due ore: cinque minuti per il briefing mattutino ogni giorno, più 30 minuti per la revisione nel fine settimana.

Anche la qualità delle informazioni è migliore. Leggo i riassunti di Reuters e Bloomberg invece di quello che è diventato virale su Twitter. Inoltre, grazie all'agente che richiama i miei errori passati ogni volta che sono tentato di agire, ho ridotto in modo significativo le mie operazioni impulsive. Non posso ancora provare che questo mi abbia reso un investitore migliore, ma mi ha reso un investitore meno avventato.

Il costo totale: 10 dollari al mese per OpenClaw, 10 dollari al mese per Exa e un po' di elettricità per far funzionare Milvus Lite.

Conclusione

Continuavo a fare le stesse operazioni impulsive perché le mie informazioni erano sbagliate, rivedevo raramente la mia cronologia e stare tutto il giorno a guardare il mercato peggiorava la situazione. Ho quindi costruito un agente AI che risolve questi problemi facendo tre cose:

  • Raccoglie notizie di mercato affidabili con Exa, sostituendo un'ora di scrolling tra spam SEO e siti a pagamento.
  • Ricorda le mie operazioni passate con Milvus e mi avverte quando sto per ripetere un errore di cui mi sono già pentito.
  • Funziona con il pilota automatico di OpenClaw e mi avvisa solo quando qualcosa è veramente importante.

Costo totale: 20 dollari al mese. L'agente non fa trading e non tocca il mio denaro.

Il cambiamento più importante non è stato quello dei dati o degli avvisi. È che ho smesso di guardare il mercato. Mercoledì scorso me ne sono completamente dimenticato, cosa che non è mai successa in anni di trading. A volte perdo ancora denaro, ma molto meno spesso, e mi godo di nuovo i miei fine settimana. I miei colleghi non hanno ancora aggiornato la battuta, ma dategli tempo.

Anche per costruire l'agente ci sono voluti solo due fine settimana. Un anno fa, la stessa configurazione avrebbe comportato la scrittura di scheduler, pipeline di notifica e gestione della memoria da zero. Con OpenClaw, la maggior parte del tempo è stata impiegata per chiarire le mie regole di trading, non per scrivere l'infrastruttura.

Inoltre, una volta costruita per un caso d'uso, l'architettura è portatile. Sostituendo i modelli di ricerca Exa e le competenze OpenClaw, si ottiene un agente che monitora i documenti di ricerca, segue i concorrenti, osserva i cambiamenti normativi o segue le interruzioni della catena di approvvigionamento.

Se volete provarlo:

  • Milvus quickstart - per ottenere un database di vettori in esecuzione a livello locale in meno di cinque minuti.
  • OpenClaw docs - configurare il primo agente con Skills e Heartbeat
  • Exa API - 1.000 ricerche gratuite al mese per cominciare

Avete domande, volete aiuto per il debug o volete semplicemente mostrare ciò che avete costruito? Iscrivetevi al canale Slack di Milvus: è il modo più veloce per ricevere aiuto dalla comunità e dal team. E se preferite parlare della vostra configurazione da soli, prenotate un'ora d'ufficio Milvus di 20 minuti .

Continua a leggere

Like the article? Spread the word

Continua a Leggere