Signal Pilot
🔴 Avanzato • Lezione 57 di 82

Automazione del trading: programma il tuo vantaggio, togli l'emozione

15 min di lettura • Esecuzione automatizzata e API
Signal Pilot
Formazione professionale sul trading
0%
Stai facendo progressi!
Continua a leggere per completare questa lezione

Le 3 di notte. Il tuo setup di sweep scatta. Tu dormi.

Il tuo bot piazza l'operazione, mette lo stop e punta a 3R. Mentre tu sogni.

Le 6 del mattino. Ti svegli. Posizione chiusa. +2,8R di profitto. Il caffè ha un altro sapore.

🎯 La promessa dell'automazione

Niente FOMO. Niente paura. Nessuna esitazione. Solo codice che esegue le tue regole alla perfezione, ogni singola volta.

Non è fantascienza. È così che operano i professionisti nel 2024.

📉 CASO DI STUDIO: la margin call da 19.000 $ di Mike

Impostazione: Mike Sullivan (esempio composito), sviluppatore Python, conto da 200.000 $. Bot sull'API di Alpaca (compra SPY con RSI<30). Backtest 2020-2023: 67 % di win rate, +140.000 $. Messo in produzione con ZERO controlli di sicurezza.

Il disastro (una mattina di shock sull'inflazione): Il bot ha funzionato per 8 settimane (+14.000 $, 71 % di win rate). SPY apre in gap del -2,8 % a 510 $. Il bot vede l'RSI a 22 e continua a comprare: 200.000 $ a 510 $, 505 $, 495 $ e 490 $ = posizione da 800.000 $ (leva 4, prezzo medio di carico 499,87 $). Alle 15: SPY a 488 $ — il 7 % sotto la chiusura precedente — la posizione vale 781.000 $, in perdita di 19.005 $, e arriva la richiesta di margine. Mike era al lavoro e non ha potuto fare nulla.

Ripresa: Conto dopo il botto: 195.000 $. Ricostruito con 5 controlli: posizione massima da 50.000 $, VIX>25 = disattivato, massimo 3 operazioni al giorno, avviso al -5 % dai massimi, spegnimento totale al -10 %. Risultato nei 8 mesi successivi: 195.000 $ → 218.000 $ (+12 %), e nessun controllo ha mai mancato di scattare.

Lezione: Programma PRIMA i controlli di sicurezza: (1) limiti di posizione, (2) filtri di volatilità, (3) stacco al drawdown massimo, (4) pulsante di arresto. I backtest mentono: si lasciano fuori i cigni neri.

Quiz: il bot di Mike si è preso una richiesta di margine in UNA SOLA MATTINA. Qual è stata la causa?

A) Slippage in esecuzione e problemi di latenza
B) La connessione all'API è caduta durante il crollo
C) ZERO controlli di sicurezza: il bot ha mediato al ribasso 4 volte durante un calo del 7 % in giornata, arrivando a una posizione da 800.000 $ (leva 4) su un conto da 200.000 $
D) Un bug nel codice ha generato ordini duplicati
Risposta corretta: C. Mike ha programmato «compra con l'RSI ipervenduto» ma non ha mai programmato limiti di posizione, filtri di volatilità o pulsanti di arresto. Il bot ha costruito una posizione a leva 4 durante il crollo: 19.005 $ di perdita e una richiesta di margine prima che potesse arrivare a una tastiera. Recupero: aggiunti 5 controlli di sicurezza, da 195.000 $ a 218.000 $ in 8 mesi. Programma PRIMA i controlli di sicurezza.
⚡ Risultati rapidi per domani (clicca per aprire)
  1. Parti dal paper trading — Non mettere mai capitale reale dietro un'automazione non testata. Prima il paper trading, e secondo la Parte 2 significa mesi, non settimane.
  2. Aggiungi limiti di posizione — Scrivi nel codice una dimensione massima di posizione: 2 % di rischio del conto per operazione E un tetto al nozionale, perché il 2 % di rischio non è il 2 % di esposizione.
  3. Costruisci un pulsante di arresto — Crea uno spegnimento manuale che disattivi ogni attività del bot con un clic o un comando.
Parte 1: perché automatizzare il tuo trading?

Il problema umano nel trading

Hai passato 6 mesi a perfezionare una strategia. L'hai messa in backtest. Testata in avanti. Win rate: 62 %. R medio: 2,3. Vantaggio confermato.

Cominci a operarla in reale. Il risultato?

Mese Performance della strategia (se seguita alla perfezione) La tua performance reale Il problema
Mese 1 +4.200 $ (62 % di win rate) +1.800 $ (48 % di win rate) Saltati 3 setup (paura dopo una serie di perdite)
Mese 2 +3.900 $ (60 % di win rate) -2.100 $ (38 % di win rate) Operazioni per vendetta, size raddoppiata dopo le perdite
Mese 3 +5.100 $ (65 % di win rate) +900 $ (52 % di win rate) Esitazioni sui setup di breakout, perso il 40 % dei segnali

La verità brutale: Hai una strategia profittevole. Ma l'anello debole sei TU.

I tre killer dell'esecuzione

1. Esitazione (saltare per paura)

  • Hai appena incassato 2 perdite. Arriva il setup n. 3. Pensi: «Forse aspetto una conferma…».
  • Aspetti. Il prezzo parte senza di te. Era un vincente da 4R. L'hai perso per paura.
  • Effetto: Saltare i vincenti distrugge l'aspettativa positiva

2. Overtrading (ingressi da FOMO)

  • Il mercato scappa al rialzo. La tua strategia dice «nessun setup». Ma non reggi a guardare. Entri lo stesso.
  • Nessuno stop. Nessun piano. Solo speranza. Gira. Perdi.
  • Effetto: Gli ingressi casuali diluiscono il tuo vantaggio nel rumore

3. Size di posizione incoerente

  • Setup A: rischi l'1 % (prudente dopo l'ultima perdita)
  • Setup B: rischi il 5 % (sicuro di te, «lo sento»)
  • Il setup A guadagna 3R. Fai il 3 %. Il setup B perde 1R. Perdi il 5 %. Netto: -2 %.
  • Effetto: Una sola decisione sbagliata sulla size cancella 3 buone operazioni

💡 Cosa risolve l'automazione

Un bot di trading automatizzato esegue con disciplina perfetta:

  • Nessuna esitazione: Arriva il setup → l'operazione parte (anche dopo 5 perdite di fila)
  • Nessun FOMO: Il setup non arriva → il bot aspetta (per quanto noioso sia il mercato)
  • Size perfetta: Ogni operazione rischia esattamente il 2 % (o quello che hai programmato), ogni singola volta

Risultato: La tua performance in backtest diventa la tua performance reale. Il vantaggio che hai testato è il vantaggio che ottieni.

Il problema della scala (i limiti del trading manuale)

Il trading manuale mette un tetto al tuo potenziale:

Vincolo Limite manuale Potenziale automatizzato
Mercati Seguire 1-3 simboli (limite dell'attenzione umana) Monitorare più di 50 simboli insieme
Orizzonti temporali Seguire al massimo 1-2 orizzonti Scansionare 5m, 15m, 1h e giornaliero tutti insieme
Ore Operare 6-8 ore al giorno (rischio di esaurimento) Operare senza sosta (cripto) o su tutta la seduta (azioni)
Setup Prendere 5-10 setup a settimana (realistico per un discrezionale) Prendere 50-200 setup a settimana (il bot non dorme e non si distrae)

Esempio: Un trader manuale segue ES (futures sull'S&P) sul grafico a 15 minuti. Prende circa 8 setup a settimana. Guadagna in media 3.200 $ al mese, circa 92 $ per setup.

Lo stesso trader, automatizzato: Il bot scansiona ES, NQ e RTY (futures sugli indici) più GC e CL (metalli ed energia) su 5m, 15m e 1h. Prende circa 24 setup a settimana. Agli stessi 92 $ per setup, fanno 9.600 $ al mese.

Lo sblocco: Non stai operando meglio. Stai operando DI PIÙ — senza bruciarti.

E il tetto: ES, MES, SPY e QQQ sono in larga parte la stessa operazione. Aggiungere simboli correlati moltiplica il numero di segnali senza moltiplicare il vantaggio — e moltiplica il rischio quando quattro scattano insieme. Conta le occasioni non correlate, non i ticker.

Quando l'automazione ha senso (e quando no)

L'automazione funziona meglio con:

  • Strategie a regole: Criteri di ingresso e uscita chiari (es. «compra quando il prezzo spazza un minimo e poi lo riprende»)
  • Setup frequenti: Strategie che scattano più di 10 volte a settimana (il volume giustifica il tempo di programmazione)
  • Esecuzione noiosa: Strategie in cui la discrezionalità non aggiunge valore (vantaggi meccanici)

L'automazione fatica con:

  • Setup discrezionali: «Lo opero solo quando *me lo sento*» (l'intuito non si programma)
  • Operazioni legate al contesto: «Questo breakout funziona se il volume supera 2 volte la media E c'è un catalizzatore di notizie» (un contesto complesso è difficile da quantificare)
  • Strategie a bassa frequenza: Setup che scattano 1-2 volte al mese (non vale lo sforzo di programmarli)

⚠️ L'automazione non ripara una strategia sbagliata

Errore comune: «La mia strategia non funziona a mano. Forse un bot la rende profittevole?»

Realtà: L'automazione esegue la tua strategia ESATTAMENTE come l'hai scritta. Se la tua strategia non ha vantaggio, il bot perderà con costanza — solo più in fretta e con più efficienza.

Regola: Automatizza SOLO strategie con aspettativa positiva dimostrata su più di 100 operazioni manuali. L'automazione amplifica i vantaggi. Non li crea.

Parte 2: scegliere API e broker

Confronto tra le API dei broker

Non tutti i broker supportano il trading automatizzato. E quelli che lo fanno cambiano moltissimo per qualità, costi e funzioni.

Le migliori API di broker per il trading automatizzato

Broker Classi di attivo Qualità dell'API Costi Ideale per
Alpaca Azioni, ETF, cripto ⭐⭐⭐⭐⭐ Eccellente (RESTful + WebSocket, ben documentata) Azioni senza commissioni, 0,1-0,25 % su cripto Principianti (l'API più semplice, paper trading gratuito, libreria Python)
Interactive Brokers (IBKR) Azioni, opzioni, futures, forex, CFD (mercati globali) ⭐⭐⭐⭐ Buona (potente ma complessa, curva di apprendimento ripida) 0,005 $ per azione, 0,65 $ per contratto di opzioni Trader avanzati (vogliono automatizzare opzioni e futures, accesso globale)
Binance Cripto (oltre 600 coppie; la piattaforma principale è chiusa ai residenti USA — Binance.US è una sede separata e molto più piccola) ⭐⭐⭐⭐⭐ Eccellente (REST + WebSocket, throughput elevato) 0,1 % a pronti, 0,02-0,04 % sui futures (con sconto BNB) Trader algoritmici di cripto (mercati senza orario, alta liquidità)
Schwab (ex TD Ameritrade / thinkorswim) Azioni, opzioni, futures ⭐⭐⭐ Discreta (la vecchia API di TD Ameritrade è stata dismessa nel 2024; l'ha sostituita la Schwab Trader API, ancora in fase di maturazione) 0 $ sulle azioni, 0,65 $ per contratto di opzioni Clienti Schwab già attivi (hanno il conto e vogliono automatizzare)
TradeStation Azioni, opzioni, futures ⭐⭐⭐⭐ Buona (programmazione in EasyLanguage, backtesting integrato) 0 $ sulle azioni, 0,60 $ per contratto di opzioni Trader attivi (vogliono una piattaforma integrata, senza programmare fuori)

Guida rapida alla scelta

Scegli Alpaca se: stai imparando l'automazione (l'API più semplice, paper trading gratuito, la documentazione migliore). Scegli Interactive Brokers se: ti servono opzioni, futures o mercati globali (tutte le classi di attivo, 0,005 $ per azione, livello istituzionale). Scegli Binance se: fai solo cripto (mercati senza orario, oltre 600 coppie, 0,1 % di commissioni).

💡 Consiglio da professionista: parti sempre dal paper trading

Ogni broker elencato sopra offre il paper trading (operatività simulata con dati reali).

Calendario consigliato:

  1. Settimane 1-2: Collegarsi all'API e testare l'invio base degli ordini (acquisto, vendita, stop loss)
  2. Settimane 3-8: Programmare la strategia, metterla in paper trading, controllarla ogni giorno
  3. Settimane 9-12: Validare la performance della strategia (coincide con il backtest?)
  4. Dal mese 4: Se è profittevole per 3 mesi di fila in paper trading, passa in reale con il 10 % del capitale
  5. Dal mese 6: Se resta profittevole, sali all'allocazione piena

Non saltare mai il paper trading. Mike (il caso di studio qui sopra) l'ha saltato e si è preso una richiesta di margine in una mattina.

Parte 3: costruire la tua prima strategia automatizzata

Dall'idea di trading al codice eseguibile

Hai una strategia manuale. Come la traduci in codice che un bot possa eseguire?

Il framework in 5 passi per tradurre una strategia

Passo 1: definire le condizioni di ingresso (solo regole esplicite)

Il trader manuale pensa: «Compro quando il prezzo spazza un minimo e rimbalza».

Troppo vago per un bot. Un bot ha bisogno di logica precisa:

  • Cos'è uno «sweep»? → Il minimo della candela attuale scende almeno lo 0,3 % sotto il minimo di swing precedente
  • Cosa vuol dire «rimbalza»? → Il prezzo chiude di nuovo sopra il minimo di swing entro 1-3 candele
  • Cos'è un «minimo di swing»? → Il minimo più basso delle ultime 20 candele

Versione in codice:

swing_low = min([bar.low for bar in last_20_bars])
current_low = current_bar.low
current_close = current_bar.close

if current_low < swing_low * 0.997:  # spazzato dello 0,3 % sotto
    if current_close > swing_low:     # ripreso
        ENTRY = True  # setup di sweep confermato

Passo 2: definire le condizioni di uscita (stop e obiettivo)

Il trader manuale: «Metto lo stop sotto lo sweep e prendo profitto a un rapporto rischio-rendimento di 3:1».

Versione in codice:

entry_price = current_close
stop_loss = swing_low * 0.995  # appena sotto lo sweep
stop_distance = entry_price - stop_loss
target = entry_price + (stop_distance * 3)  # obiettivo 3R

Passo 3: definire la size di posizione (gestione del rischio)

Il trader manuale: «Rischio circa il 2 % per operazione».

Versione in codice:

account_equity = 100000  # conto da 100.000 $
risk_per_trade = 0.02    # 2 %
risk_amount = account_equity * risk_per_trade  # 2.000 $

stop_distance = entry_price - stop_loss
position_size = risk_amount / stop_distance  # azioni da comprare

# Esempio: ingresso 520 $, stop 518 $, distanza 2 $
# Size di posizione = 2.000 $ / 2 $ = 1.000 azioni
# ...cioe 520.000 $ di SPY su un conto da 100.000 $. Una regola del
# 2 % non dice nulla sul nozionale: uno stop stretto compra leva.
max_notional = account_equity * 1.5   # tetto rigido: 1,5 volte il capitale
position_size = min(position_size, max_notional / entry_price)
# Con il tetto: 288 azioni. Il rischio vero e 576 $, non 2.000 $ -
# questo e il prezzo da pagare, ed e cio che ti tiene in gioco.

Passo 4: definire la gestione dell'operazione (facoltativo)

Esci a scaglioni? Trascini lo stop? Prendi profitti parziali?

Esempio: «Prendo il 50 % di profitto a 2R e lascio correre il resto fino a 3R».

if current_price >= entry_price + (stop_distance * 2):
    SELL_HALF = True  # chiudere il 50 % a 2R
    # Spostare lo stop a pareggio per il restante 50 %

Passo 5: definire i filtri (evitare i setup cattivi)

Quali condizioni invalidano il setup?

  • Filtro orario: Operare solo nelle prime 2 ore di seduta (9:30-11:30 ET)
  • Filtro di volatilità: Saltare le operazioni quando il VIX supera 30 (troppo nervoso)
  • Filtro di trend: Setup long solo quando il prezzo è sopra l'EMA a 50 periodi
if VIX > 30:
    SKIP_TRADE = True  # mercato troppo volatile

if current_time < "09:30" or current_time > "11:30":
    SKIP_TRADE = True  # fuori dalla finestra operativa

✅ Esempio completo di strategia (logica del bot di sweep)

I 5 passi combinati in pseudocodice eseguibile:

# Passo 1: condizioni di ingresso
swing_low = min([bar.low for bar in last_20_bars])
if current_bar.low < swing_low * 0.997:  # sweep
    if current_bar.close > swing_low:     # ripreso

        # Passo 2: uscite
        entry = current_bar.close
        stop = swing_low * 0.995
        target = entry + ((entry - stop) * 3)

        # Passo 3: size di posizione
        risk_amount = account_equity * 0.02
        size = risk_amount / (entry - stop)

        # Passo 4: gestione dell'operazione (50 % a 2R)
        profit_target_partial = entry + ((entry - stop) * 2)

        # Passo 5: filtri
        if VIX < 30 and time_in_window():
            PLACE_ORDER(symbol, size, entry, stop, target)

Ora è eseguibile. Un bot può seguire queste regole alla perfezione, ogni singola volta.

Implementazione completa del bot (strategia sweep e inversione)

import alpaca_trade_api as tradeapi
from alpaca_trade_api.rest import TimeFrame
import os, time

# Configurazione
API_KEY = os.getenv('ALPACA_API_KEY')  # MAI scriverla nel codice!
API_SECRET = os.getenv('ALPACA_API_SECRET')
api = tradeapi.REST(API_KEY, API_SECRET, 'https://paper-api.alpaca.markets')

MAX_NOTIONAL_MULT = 1.5   # mai tenere piu di 1,5 volte il capitale
MAX_DAILY_LOSS = 0.03     # pulsante di arresto: si chiude la giornata a -3 %

def get_swing_low(bars, lookback=20):
    # Escludi la candela in corso. Se la includi, il minimo di swing E il
    # minimo attuale, il test di sweep non e mai vero e il bot non parte mai.
    lows = [bar.l for bar in bars[-(lookback + 1):-1]]
    return min(lows)

def check_sweep(current_price, current_low, swing_low):
    # Sweep = minimo attuale < minimo di swing (0,3 %), poi lo riprende
    if current_low < swing_low * 0.997 and current_price > swing_low:
        return True
    return False

def calculate_position_size(api, entry, stop):
    equity = float(api.get_account().equity)
    risk_amount = equity * 0.02                        # 2 % di rischio
    by_risk = risk_amount / (entry - stop)
    by_notional = (equity * MAX_NOTIONAL_MULT) / entry  # il controllo che Mike non aveva
    return int(min(by_risk, by_notional))

def kill_switch_tripped(api):
    acct = api.get_account()
    move = (float(acct.equity) - float(acct.last_equity)) / float(acct.last_equity)
    return move <= -MAX_DAILY_LOSS

def in_position(api, symbol):
    # Chiedi al broker; non fidarti di una variabile locale. Un bracket
    # eseguito e chiuso di notte non deve bloccare il setup di domani.
    try:
        api.get_position(symbol)
        return True
    except Exception:
        return False

def place_bracket_order(api, symbol, size, entry, stop, target):
    try:
        order = api.submit_order(
            symbol=symbol, qty=size, side='buy', type='limit',
            limit_price=entry, time_in_force='gtc',
            order_class='bracket',
            stop_loss={'stop_price': stop},
            take_profit={'limit_price': target}
        )
        print(f"✓ Ordine: {size} azioni @ ${entry} | Stop: ${stop} | Obiettivo: ${target}")
        return order
    except Exception as e:
        print(f"✗ Ordine fallito: {e}")
        return None

def run_bot(symbol='SPY'):
    print(f"Bot avviato. Sorveglio {symbol} in cerca di setup di sweep...")

    while True:
        try:
            if not api.get_clock().is_open:      # controllo 1: orari di mercato
                time.sleep(60)
                continue
            if kill_switch_tripped(api):         # controllo 2: perdita giornaliera
                print("🛑 Limite di perdita giornaliera raggiunto. Mi fermo.")
                break

            bars = api.get_bars(symbol, TimeFrame.Minute, limit=50)
            current_price = bars[-1].c
            current_low = bars[-1].l
            swing_low = get_swing_low(bars)

            if not in_position(api, symbol) and check_sweep(current_price, current_low, swing_low):
                print(f"🎯 Sweep rilevato @ ${current_price}")
                entry = current_price
                stop = swing_low * 0.995
                target = entry + (entry - stop) * 3  # 3R
                size = calculate_position_size(api, entry, stop)   # controllo 3: tetto nozionale
                if size > 0:
                    place_bracket_order(api, symbol, size, entry, stop, target)

            time.sleep(60)  # controlla ogni minuto
        except Exception as e:
            print(f"Errore: {e}")
            time.sleep(60)

run_bot()  # ~75 righe - e le tre che contano di piu sono i controlli.

Cosa fa: Si collega ad Alpaca, scarica le candele a 1 minuto di SPY, rileva le inversioni dopo lo sweep (il minimo spazza sotto il minimo di swing e poi lo riprende), calcola la size sul 2 % di rischio con tetto sul nozionale, piazza un ordine bracket (ingresso + stop + obiettivo 3R) e ripete ogni 60 secondi — ma solo a mercato aperto, solo quando il broker dice che non ci sono posizioni, e mai se la giornata è a -3 %. Disciplina perfetta, zero emozione e tre freni.

💡 il momento della verità

Hai appena tolto lo strato umano. Basta «lo prendo o no?». Basta «forse aspetto».

Arriva il setup → il bot opera. Non arriva → il bot aspetta. Disciplina perfetta.

Parte 4: messa in produzione (la parte difficile)

Paper trading ≠ trading reale

Il tuo bot funziona alla perfezione in paper trading. Lo metti in reale. Va in crash. Gli ordini vengono rifiutati. Non ci capisci più nulla.

Benvenuto in produzione.

Errori comuni (e come gestirli)

Errori comuni: Timeout di connessione, ordine rifiutato, esecuzioni parziali, limiti di richieste, mercato chiuso. Rimedi: Logica di riprova (3× con attesa esponenziale), controlli preventivi (fondi, orari, prezzo), gestione delle esecuzioni parziali, limitazione delle richieste (200 al minuto), controllo degli orari (9:30-16 ET). I bot professionali gestiscono gli errori con eleganza.

Logica di riprova (indispensabile)

import uuid

def place_order_with_retry(api, **order_params):
    """Riprova l'invio dell'ordine fino a 3 volte"""
    max_retries = 3

    # Lo stesso id a ogni tentativo. Se la prima richiesta e davvero arrivata
    # al broker e si e persa solo la risposta, la riprova viene rifiutata come
    # duplicato invece di raddoppiarti la posizione.
    order_params.setdefault('client_order_id', f"bot-{uuid.uuid4()}")

    for attempt in range(max_retries):
        try:
            order = api.submit_order(**order_params)
            return order  # Fatto!

        except Exception as e:
            if attempt < max_retries - 1:
                wait = 2 ** attempt  # 1s poi 2s (attesa esponenziale)
                print(f"Ordine fallito: {e}. Riprovo tra {wait}s...")
                time.sleep(wait)
            else:
                # Ultimo tentativo fallito
                print(f"Ordine fallito dopo {max_retries} tentativi: {e}")
                # Invia un avviso (email, SMS)
                raise  # Rilancia l'eccezione

Monitoraggio e avvisi (critico)

Il tuo bot gira su un VPS nel cloud. Tu sei a cena. Incappa in un errore.

Sei arrivato a metà percorso. Hai imparato le strategie chiave.

Ottimi progressi! Se serve, fai una breve pausa per sgranchirti, poi entreremo nei concetti avanzati che seguono.

Come lo scopri?

Risposta: Con gli avvisi.

import smtplib
from email.mime.text import MIMEText

def send_alert(subject, message):
    """Invia un avviso via email"""
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = 'bot@yourbot.com'
    msg['To'] = 'you@gmail.com'

    # Invio via SMTP di Gmail - serve una password per le app di Gmail,
    # non quella dell'account; l'autenticazione base e stata chiusa nel 2022.
    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login('bot@yourbot.com', os.getenv('EMAIL_PASSWORD'))
        server.send_message(msg)

# Utilizzo
try:
    # Logica di trading
    pass
except Exception as e:
    send_alert(
        subject="🚨 Errore del bot di trading",
        message=f"Il bot ha incontrato un errore: {e}"
    )
    raise

Adesso scopri in pochi minuti se qualcosa si rompe.

🚨 Pulsante di arresto (non negoziabile)

Il tuo bot deve smettere di operare automaticamente se:

  • Il drawdown giornaliero supera il -3 % (la ricostruzione di Mike spegneva anche del tutto al -10 % dai massimi)
  • Arrivano 5 perdite consecutive
  • Gli errori dell'API superano i 10 all'ora
  • Viene rilevato un comportamento inatteso

Programma questo. Testalo. Il tuo conto ne dipende.

Hosting: dove far girare il bot

Perché il PC di casa fallisce

  • Blackout: Il PC si spegne, il bot si ferma
  • Internet giù: Nessuna connessione = operazioni perse
  • Aggiornamenti di Windows: Riavvio automatico alle 3 di notte = bot morto
  • Tu: «Riavvio giusto un attimo il PC…»

Disponibilità: 95 % (inaccettabile per il trading algoritmico)

Perché vince il VPS nel cloud

  • 99,9 % di disponibilità: AWS, DigitalOcean, Linode
  • Niente blackout: Alimentazione ridondata, backup
  • Internet veloce: Bassa latenza verso le API dei broker
  • Riavvio automatico: Il bot va in crash? Riparte in 30 secondi

Costo: 5-20 $ al mese (l'amplificatore di vantaggio più economico che comprerai mai)

Parte 5: la prova della realtà

L'automazione non è «imposta e dimentica»

Metti in produzione il bot. Opera per un mese. Tasso di successo: 65 %. Come nel backtest. Sei entusiasta.

Mese 2: il tasso di successo scende al 48 %. Non capisci.

Cosa è successo?

Il regime di mercato è cambiato. La tua strategia funziona nei mercati in trend. Il mercato è passato in laterale. Il tuo bot ha continuato a operare. I risultati ne hanno risentito.

🚨 La verità scomoda

L'automazione amplifica il tuo vantaggio. Ma non si adatta da sola ai cambi di regime.

Devi comunque monitorare, rivedere e correggere. Solo meno spesso.

Checklist mensile di manutenzione del bot

1. Metriche di performance: Win rate entro il 5 % dal backtest? R medio positivo? Drawdown accettabile? Slippage peggiorato? 2. Registri degli errori: Errori di connessione, ordini rifiutati, casi limite. 3. Verifica del regime: Il mercato favorisce ancora la strategia? VIX elevato → mettere in pausa. Volatilità bassa → i breakout faticano.

🎓 Punti chiave

  • L'automazione toglie l'emozione, ma non ripara una strategia sbagliata
  • Parti con Alpaca (azioni) o Binance (cripto) per un accesso facile all'API
  • Fai 3-6 mesi di paper trading prima di passare in reale
  • La gestione degli errori è cruciale: riprove, avvisi, pulsante di arresto
  • Ospita il bot su un VPS nel cloud (5-20 $ al mese) per il 99,9 % di disponibilità
  • Controlla ogni mese: performance, errori, coerenza con il regime

📝 Esercizio pratico

Costruisci il tuo primo script di trading con API

  1. Apri un conto di paper trading Alpaca
    • Iscriviti su alpaca.markets (paper trading gratuito)
    • Genera la chiave API e il secret
    • Installa la libreria Python: pip install alpaca-trade-api
  2. Programma uno script di strategia semplice
    • Collegati all'API di Alpaca
    • Recupera il prezzo di SPY ogni 60 secondi
    • Implementa una logica di base: se il prezzo incrocia sopra la SMA a 20 periodi, invia un ordine di acquisto
    • Aggiungi il calcolo della size di posizione (2 % di rischio per operazione)
    • Inserisci uno stop loss a -1R
  3. Aggiungi la gestione degli errori
    • Racchiudi le chiamate all'API in blocchi try/except
    • Registra tutti gli errori su file
    • Implementa la logica di riprova (3 tentativi)
  4. Testa per 1 settimana in paper trading
    • Controlla l'esecuzione: gli ordini vengono eseguiti bene?
    • Guarda i log: ci sono errori di connessione?
    • Rivedi la performance: coincide con il tuo backtest?

Obiettivo: Costruisci e metti in funzione il tuo primo script di trading automatizzato in paper trading. Padroneggia le basi prima di rischiare capitale vero.

🎮 Metti alla prova quello che hai capito (senza pressione)

Domanda 1: hai scritto un bot che funziona alla perfezione in paper trading. Qual è il periodo minimo di test prima di passare in reale?

A) 1 settimana (se funziona, si parte!)
B) 1 mese (abbastanza per capire se è profittevole)
C) 3-6 mesi (verificare la costanza in condizioni di mercato diverse)
D) Nessun test necessario (basta il backtest)

Domanda 2: il tasso di successo del tuo bot era il 65 % nel backtest, ma è il 48 % in reale dopo 2 mesi. Qual è la causa più probabile?

A) Il broker sabota le tue operazioni
B) Il tuo codice ha un bug (comportamento casuale)
C) È cambiato il regime di mercato (la strategia non si adatta alle condizioni attuali)
D) Il backtesting è inutile (fallisce sempre in reale)

Se sei arrivato fin qui, hai capito che automatizzare non è magia: è esecuzione disciplinata su larga scala. Programma il tuo vantaggio. Testa con rigore. Metti in produzione con prudenza. Monitora sempre.

Lezioni correlate

Avanzato n. 55

Machine learning nel trading

Usa modelli di ML per generare segnali di trading automatizzati.

Leggi la lezione →
Intermedio #32

Backtesting avanzato

Testa le tue strategie automatizzate prima di metterle in reale.

Leggi la lezione →
Avanzato #59

Attribuzione della performance

Analizza quali strategie automatizzate contribuiscono ai rendimenti.

Leggi la lezione →

⏭️ Prossimamente

Lezione #58: teoria avanzata di portafoglio — Teoria moderna di portafoglio, frontiera efficiente, risk parity e framework professionali di costruzione del portafoglio.

💬 Discussione (0 commenti)

0/1000

Caricamento dei commenti…

← Lezione precedente Lezione successiva →
Solo a scopo educativo. Il trading comporta un rischio sostanziale di perdita. Non è una consulenza finanziaria. I risultati passati non garantiscono risultati futuri.