grid trading bot funzionamento onesto
Un bot di grid trading compra a ogni gradino in discesa e vende a ogni gradino in salita entro un intervallo fisso. Scopri la forma di mercato che paga il meccanismo e quella che lo
Un bot di grid trading posiziona una scala di ordini a intervalli di prezzo fissi: un acquisto a ogni gradino sotto il prezzo corrente, una vendita a ogni gradino sopra. Ogni volta che il mercato scende, il bot acquista. Ogni volta che risale, il bot vende ciò che ha comprato più in basso. Il meccanismo raccoglie l'oscillazione e accumula una posizione aperta ogni volta che il mercato si allontana dalla scala in una direzione e continua.
Questa pagina smonta il meccanismo, poi misura le due forme di mercato che ne determinano il risultato. Ogni pannello qui sotto è una query memorizzata su prezzi reali di azioni US, ancorata a date fisse in modo che i dati rimangano riproducibili.
Come funziona un bot di grid trading
Tre impostazioni definiscono una griglia: i limiti superiore e inferiore dell'intervallo, il numero di linee al suo interno e la dimensione dell'ordine su ogni linea. La spaziatura tra le linee deriva dalle prime due.
Ecco l'aritmetica, usando numeri tondi scelti per chiarezza e non da una quotazione reale. Supponiamo che un'azione venga scambiata vicino a $100 e che un operatore imposti una griglia da $95 a $105 con undici linee distanti un dollaro l'una dall'altra e 100 azioni per linea. Il prezzo scende a $99 e l'ordine di acquisto in attesa viene eseguito. Il prezzo torna a $100 e il corrispondente ordine di vendita viene eseguito, chiudendo la coppia per un profitto lordo di $100. Entrambi gli ordini si riarmano. Nulla è cambiato nell'azienda in quell'ora. La posizione ha semplicemente completato un viaggio di andata e ritorno tra due gradini adiacenti.
Due varianti appaiono nei progetti open-source che circolano pubblicamente. Una griglia aritmetica distanzia le linee di un importo fisso in dollari. Una griglia geometrica le distanzia di una percentuale fissa, che mantiene costante la percentuale di profitto per viaggio di andata e ritorno su un'ampia gamma. La documentazione separa anche una griglia neutra, che parte piatta e lavora in entrambe le direzioni, da una griglia long, che parte detenendo inventario e vende in fase di forza.
La forma del payoff merita una frase semplice. Il profitto su un viaggio di andata e ritorno completato è limitato a un passo della griglia meno i costi. La posizione aperta che si accumula quando il prezzo esce dall'intervallo non ha un limite corrispondente.
La forma di mercato di cui una griglia ha bisogno
Una griglia viene pagata per il viaggio, non per la direzione. Due azioni possono terminare un periodo allo stesso prezzo dopo aver percorso distanze molto diverse. Sommando la dimensione assoluta di ogni movimento giornaliero si ottiene la distanza totale percorsa. Dividendo il movimento netto per quella distanza si ottiene un rapporto di efficienza, una misura standard di quanto direzionale sia stato un percorso. Un rapporto basso descrive un percorso che ha vagato. Un rapporto alto descrive una marcia diritta.
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY','KO','PG','JNJ','VZ','MO','XOM','JPM','WMT','NVDA','TSLA','NFLX')
AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2024-01-02') AND toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, dt
),
steps AS (
SELECT ticker, dt, c,
c / lagInFrame(c) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret
FROM daily
)
SELECT ticker,
round(sum(abs(ret)) * 100, 0) AS travel_pct,
round(abs(argMax(c, dt) / argMin(c, dt) - 1) * 100, 1) AS net_move_pct,
round(100 * abs(argMax(c, dt) / argMin(c, dt) - 1) / sum(abs(ret)), 1) AS efficiency_pct
FROM steps
WHERE ret > -0.5 AND ret < 0.5
GROUP BY ticker
ORDER BY efficiency_pctLeggi insieme la prima e l'ultima riga. PG ha coperto 527% del movimento giornaliero cumulativo ed è finita 0.9% da dove era partita, con un'efficienza di 0.2%. SPY si trova all'estremo opposto con 14.3%, trasformando 415% di viaggio in un movimento netto di 59.2%. Una scala a griglia posizionata sul primo percorso incontra i propri gradini più e più volte. La stessa scala posizionata sul secondo percorso viene lasciata indietro.
Calmo e range-bound sono proprietà correlate ma distinte. Un'azione può salire lentamente con incrementi giornalieri molto piccoli e lasciare comunque una griglia bloccata, che è uno dei motivi per cui i nomi studiati nella letteratura sull'anomalia della bassa volatilità non sono automaticamente materiale per griglie.
Contare i viaggi di andata e ritorno
L'efficienza è una lente. Il reddito della griglia dipende da qualcosa di più concreto: quante volte il prezzo rivisita effettivamente un livello. Ancorandosi alla prima chiusura di ogni anno solare e contando le sessioni la cui chiusura cade sul lato opposto di quell'ancora, si ottiene il numero di attraversamenti che una singola linea di griglia avrebbe catturato. Coca-Cola (KO) è il soggetto qui, un nome large-cap liquido del settore consumer che la documentazione sulle griglie tende a presentare.
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2019-01-01') AND toDate('2025-12-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
anchored AS (
SELECT toYear(dt) AS year, dt, c,
first_value(c) OVER (PARTITION BY toYear(dt) ORDER BY dt) AS anchor
FROM daily
),
sided AS (
SELECT year, dt, c, anchor,
if(c >= anchor, 1, 0) AS side,
row_number() OVER (PARTITION BY year ORDER BY dt) AS rn,
lagInFrame(if(c >= anchor, 1, 0)) OVER (PARTITION BY year ORDER BY dt) AS prev_side
FROM anchored
)
SELECT year,
countIf(rn > 1 AND side != prev_side) AS crossing_count,
count() AS sessions,
round((argMax(c, dt) / any(anchor) - 1) * 100, 1) AS net_change_pct
FROM sided
GROUP BY year
ORDER BY yearIn 2019 la chiusura ha attraversato il proprio livello di apertura 8 volte in 252 sessioni, terminando l'anno 17.9% da quel livello. In 2025 il conteggio è stato 6 in 250 sessioni, con una variazione netta di 13%. Una linea, un'azione, e la materia prima per una griglia varia di diverse volte da un anno all'altro senza alcun modo di conoscere in anticipo il conteggio dell'anno successivo.
Quella variabilità è il problema silenzioso. Il rendimento pubblicizzato di una griglia è solitamente quotato per viaggio di andata e ritorno completato, e il numero di viaggi di andata e ritorno è stabilito dal mercato piuttosto che dalle impostazioni.
Dove una griglia si rompe
La modalità di fallimento ha una forma specifica. Fissa una griglia su un intervallo, poi lascia che il mercato lo abbandoni. Qui sotto, il soffitto e il pavimento sono la chiusura più alta e più bassa delle prime venti sessioni del 2024, mantenute costanti per i successivi trenta mesi, con la chiusura mensile del tracker dell'S&P 500 tracciata rispetto ad esse.
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2024-01-02') AND toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
opening_20 AS (
SELECT c FROM daily ORDER BY dt LIMIT 20
),
band AS (
SELECT min(c) AS grid_low, max(c) AS grid_high FROM opening_20
),
monthly AS (
SELECT toStartOfMonth(dt) AS month_start, argMax(c, dt) AS close_px
FROM daily
GROUP BY month_start
)
SELECT formatDateTime(monthly.month_start, '%Y-%m') AS month,
round(monthly.close_px, 2) AS spy_close,
round(band.grid_high, 2) AS grid_top,
round(band.grid_low, 2) AS grid_bottom
FROM monthly, band
ORDER BY monthly.month_startLa fascia va da $467.27 a $491.26. Il primo mese della serie ha chiuso a $482.92, al suo interno. L'ultimo dei 30 mesi ha chiuso a $746.32, ben al di sopra del soffitto, e il grafico mostra la linea che lascia la fascia per non tornarvi mai più.
Percorri cosa fa la scala lungo quel percorso. Salendo attraverso l'intervallo, il bot vende inventario gradino per gradino, accantonando un passo di profitto ogni volta. Sopra il soffitto detiene liquidità e osserva. Ogni ulteriore punto del rialzo è un guadagno a cui l'operatore non partecipa più, che è la versione lieve del fallimento.
La versione grave è l'immagine speculare. Il prezzo scende sotto il pavimento e il bot ha acquistato a ogni gradino lungo la discesa, quindi ora detiene l'intera scala di inventario a un costo medio superiore al mercato, con ogni ulteriore passo che allarga la perdita non realizzata. Un intervallo che una volta produceva operazioni costanti, piccole e visibilmente redditizie si trasforma in un'unica posizione concentrata. Il marketing delle griglie descrive questo come il bot "bloccato"; su un estratto conto di intermediazione è un drawdown aperto senza un'uscita incorporata.
I costi scalano con il numero di operazioni
Una griglia completa molte piccole operazioni, e ognuna paga il costo completo di un viaggio di andata e ritorno: lo spread, più commissioni o commissioni di cambio ove applicabili. Lo spread denaro-lettera è l'elemento più spesso omesso dalla matematica delle griglie, poiché non appare mai su un estratto conto come voce separata.
L'aritmetica illustrativa è rapida. Su un'azione a $100 con uno spread di un centesimo, un viaggio di andata e ritorno che attraversa lo spread su entrambi i lati rinuncia a circa due centesimi, o lo 0,02% del nozionale. Rispetto a un passo della griglia di un dollaro, si tratta di circa il 2% del profitto lordo per viaggio. Allarga lo spread a cinque centesimi, una cifra di routine su un titolo più sottile, e lo stesso viaggio rinuncia a dieci centesimi contro un dollaro di lordo, o il 10%. Restringere la griglia a passi di dieci centesimi per catturare più oscillazione riduce il lordo per viaggio a dieci centesimi lasciando il costo invariato, e lo spread di cinque centesimi ora consuma l'intera operazione.
Questa relazione stabilisce un pavimento sotto la spaziatura utile della griglia: i passi devono rimanere grandi rispetto ai costi di andata e ritorno, e più la griglia è stretta, più il suo reddito appartiene alla venue piuttosto che all'operatore.
Perché i backtest lusingano i bot di grid trading
Le strategie di grid trading producono backtest insolitamente attraenti, e quattro ragioni strutturali spiegano la maggior parte del fenomeno.
- Selezione dell'intervallo con il senno di poi. I limiti scelti dopo aver visto i dati conterranno i dati. Una griglia adattata a un periodo che è stato range-bound mostrerà un alto tasso di successo su quel periodo.
- La scala non chiusa. Un test che si ferma a una data finale scelta spesso conta i viaggi di andata e ritorno realizzati mentre tratta generosamente l'inventario rimanente. La contabilità onesta valuta la posizione aperta al mercato nell'ultimo giorno e include quella perdita nel risultato.
- Ipotesi di esecuzione. Gli ordini in attesa simulati vengono eseguiti ogni volta che il prezzo li tocca. Le code reali non vengono sempre eseguite al tocco, e i viaggi che non riescono a essere eseguiti sono sproporzionatamente quelli redditizi nei mercati veloci.
- Densità dei parametri. Limiti, numero di linee, spaziatura e dimensione dell'ordine danno quattro manopole su una singola serie di prezzi, che è sufficiente per adattarsi a quasi tutte le finestre storiche.
I conteggi degli attraversamenti sopra sono il contrappeso a tutti e quattro. Provengono dalla sola storia dei prezzi, senza impostazioni allegate, e variano di anno in anno in un modo che nessuna scelta di parametri controlla. Chiunque valuti un'affermazione su una griglia può porre una singola domanda: quanti viaggi di andata e ritorno completati presuppone, e da dove proviene quel conteggio? Un periodo di pratica su un simulatore, con la scala aperta valutata al mercato alla fine, risponde più onestamente di un grafico di viaggi realizzati.
FAQ
I bot di grid trading fanno davvero soldi?
Una griglia guadagna un profitto limitato su ogni viaggio di andata e ritorno completato e porta una posizione aperta senza limiti quando il prezzo esce dal suo intervallo. Se i viaggi realizzati superino la posizione aperta in un dato periodo dipende da quanto il mercato ha oscillato all'interno di quell'intervallo, che è una proprietà del mercato piuttosto che del software.
Quali condizioni di mercato sono adatte a un bot a griglia?
Il meccanismo è costruito per un prezzo che rivisita ripetutamente gli stessi livelli: distanza totale percorsa alta rispetto al movimento netto. Nel pannello di dodici nomi sopra, i rapporti di efficienza andavano da 0.2% all'estremità vagante a 14.3% all'estremità direzionale, e il meccanismo a scala incontra i propri gradini solo alla prima estremità.
Cosa succede quando il prezzo esce dall'intervallo della griglia?
Sopra l'intervallo, il bot ha venduto il suo inventario e si siede in contanti mentre il mercato continua senza di esso. Sotto l'intervallo, detiene ogni gradino che ha acquistato lungo la discesa, a un costo medio superiore al prezzo corrente, e ogni ulteriore calo allarga quella perdita non realizzata.
In che modo il grid trading è diverso dal dollar-cost averaging?
Entrambi acquistano di più quando il prezzo scende, e qui finiscono le somiglianze. Il dollar-cost averaging aggiunge un importo fisso con una cadenza fissa senza regola di uscita e senza limite superiore. Una griglia acquista e vende su trigger di prezzo all'interno di un intervallo scelto in anticipo, e il suo comportamento cambia completamente una volta che il prezzo lascia quell'intervallo.
Una spaziatura della griglia più stretta produce più reddito?
Una spaziatura più stretta aumenta il numero di viaggi di andata e ritorno e riduce il profitto lordo su ciascuno, mentre il costo del viaggio di andata e ritorno rimane lo stesso. Oltre un punto fissato dallo spread, i viaggi aggiuntivi sottraggono dal totale piuttosto che aggiungervi.
Ogni dato sopra proviene da una query memorizzata e versionata su prezzi azionari reali; apri il SQL sotto qualsiasi pannello per verificarlo, o misura il viaggio rispetto al movimento netto sulla tua lista di nomi sul terminale Strasmore.