IOC vs FOK, ordini a mercato e limite: i tipi di ordine per l’esecuzione algoritmica nel forex Novembre 4, 2026 – Posted in: Arbitrage Software, Forex trading
IOC, FOK, a mercato o limite: scegliere l’ordine giusto per il trade
Un tipo di ordine è una decisione su che cosa preferisci subire: un prezzo peggiore, un’esecuzione più piccola o nessuna esecuzione. Questa guida mostra come si comporta ogni istruzione nel book, nei messaggi FIX e in presenza di last look, con esempi numerici per un algoritmo che deve scegliere in pochi millisecondi.
Risposta breve: IOC vs FOK. Un ordine Immediate-or-Cancel (IOC) prende ciò che è disponibile in quel momento al tuo prezzo o a un prezzo migliore e cancella il resto, quindi è possibile un’esecuzione parziale. Un ordine Fill-or-Kill (FOK) deve essere eseguito per intero e immediatamente, altrimenti viene cancellato del tutto: o ottieni tutto o niente. Usa IOC quando qualsiasi parte della size ti è utile, e FOK quando una posizione parziale sarebbe peggio di nessuna posizione.
- Tipo di ordine e time in force sono due decisioni
- Gli ordini a mercato nel forex
- Ordini limite, marketable limit e stop
- Time in force: IOC, FOK, GTC, Day, GTD
- IOC vs FOK vs mercato: un book, tre risultati
- Come appaiono gli ordini in FIX
- Liquidità full-amount e last look
- Dove mettere il limite: un modello con i numeri
- Gestire le esecuzioni parziali
- Quale ordine per quale strategia
- Sette passi per configurare l’esecuzione
- Errori comuni
- Che cosa misurare
- Domande frequenti
Tipo di ordine e time in force sono due decisioni separate
La maggior parte dei glossari elenca mercato, limite, stop, IOC e FOK come se fossero cinque opzioni dello stesso menu. Non è così. Dietro ci sono due domande indipendenti, e un algoritmo deve rispondere a entrambe per ogni ordine:
- Quale prezzo sono disposto ad accettare? Questo è il tipo di ordine: a mercato (qualsiasi prezzo), limite (questo prezzo o migliore), stop (si attiva quando un trigger viene scambiato o quotato).
- Per quanto tempo può restare attivo l’ordine? Questo è il time in force, o TIF: immediatamente (IOC, FOK), fino alla fine della sessione (Day), fino alla cancellazione (GTC) o fino a un orario prestabilito (GTD).
Quindi IOC e FOK non sono alternative a un ordine limite: sono durate associate a esso. «Limit IOC» e «Limit FOK» sono le due istruzioni aggressive più comuni nel forex algoritmico, e il protocollo FIX tiene le due decisioni in campi separati: OrdType (tag 40) e TimeInForce (tag 59).
Ordini a mercato nel forex: che cosa significa davvero «a mercato»
Un ordine a mercato dice: eseguimi subito, il prezzo è secondario. Non ha limite, quindi offre la massima certezza di esecuzione e nessuna protezione sul prezzo che ottieni. Se il book si è mosso o è sottile, l’ordine risale i livelli disponibili finché la size non è completata. Questo costo è lo slippage, trattato a fondo nella nostra guida su come misurare e ridurre lo slippage nel forex.
Il forex aggiunge due dettagli che le spiegazioni basate sulle borse trascurano:
- Non esiste un unico book centrale. Il tuo broker o ECN mostra un flusso aggregato di diversi fornitori di liquidità. «A mercato» significa al miglior prezzo che la tua sede di esecuzione riesce a ottenere da quel flusso, non a un prezzo di mercato universale.
- Anche un ordine a mercato ha una durata implicita. Molte sedi trattano internamente gli ordini a mercato come IOC o FOK: eseguono ciò che è eseguibile subito e riportano il resto. Alcune consentono di aggiungere una deviazione massima, che di fatto trasforma l’ordine in un limite. Non dare nulla per scontato: leggi le specifiche della sede.
Il ruolo pratico di un ordine a mercato in un algoritmo è ristretto. Serve dove il pericolo maggiore è non operare, ad esempio per chiudere una posizione che ha perso la copertura.
Ordini limite, marketable limit e stop
Ordini limite passivi
Un ordine limite piazzato lontano dal prezzo corrente resta nel book e attende. Un buy limit sotto l’ask non prende liquidità: la offre. Puoi guadagnare lo spread invece di pagarlo, ma ti assumi il rischio di coda e la selezione avversa: gli ordini passivi tendono a essere eseguiti proprio quando il mercato li sta attraversando. Gli ordini passivi si abbinano normalmente a Day, GTC o GTD.
Ordini marketable limit
Un buy limit con prezzo pari o superiore all’ask corrente viene eseguito subito, come un ordine a mercato, ma non può essere eseguito oltre il suo limite. Questo «marketable limit» è il cavallo di battaglia dell’esecuzione automatizzata. Combinato con IOC significa: prendi la liquidità adesso, fino a questo prezzo, e non lasciare nulla nel book.
Il miglioramento di prezzo è un punto spesso frainteso. Un limite è il prezzo peggiore accettabile, non il prezzo di esecuzione. Se compri con un limite a 1.08510 e l’ask è 1.08502, dovresti ricevere 1.08502 o i livelli successivi fino al tuo limite.
Ordini stop e stop-limit
Un ordine stop resta dormiente finché non viene raggiunto il trigger, poi diventa un ordine a mercato. Uno stop-limit diventa invece un ordine limite. Il primo garantisce l’attivazione, non il prezzo. Il secondo fissa un tetto al prezzo, ma può lasciarti senza esecuzione proprio quando il mercato fa un gap, una caratteristica sgradevole per uno stop di protezione. Conta anche dove risiede lo stop: uno stop tenuto sulla sede sopravvive alla tua disconnessione, mentre uno simulato nel tuo software no.
Time in force: l’elenco completo
| Istruzione | FIX 59 | Durata | Esecuzione parziale? | Uso tipico |
|---|---|---|---|---|
| Day | 0 | Fino alla fine della sessione | Sì | Quotazioni passive durante una sessione definita |
| GTC (Good Till Cancel) | 1 | Fino alla cancellazione | Sì | Ingressi in attesa, ordini take-profit e stop |
| IOC (Immediate or Cancel) | 3 | Eseguito subito, il resto viene cancellato | Sì | Prendere liquidità quando qualsiasi parte della size è utile |
| FOK (Fill or Kill) | 4 | Tutta la size subito o niente | No | Ingressi tutto-o-niente e gambe a size fissa |
| GTD (Good Till Date) | 6 | Fino a un orario specificato (tag 126 o 432) | Sì | Quotazioni con scadenza rigida, ad esempio prima di una notizia |
I valori provengono dalla specifica FIX 4.4. Le sedi di norma supportano solo una parte dell’elenco e alcune limitano un TIF a determinati tipi di ordine, quindi le regole operative del tuo broker prevalgono su qualsiasi tabella pubblicata in un articolo.
IOC vs FOK vs mercato: un book, tre risultati
Prendiamo un caso concreto. Un algoritmo vuole comprare 2,000,000 EURUSD. Il miglior ask è 1.08500 e questo è il lato offerta visibile all’arrivo dell’ordine:
| Prezzo ask | Size disponibile | Cumulata |
|---|---|---|
| 1.08500 | 500,000 | 500,000 |
| 1.08501 | 500,000 | 1,000,000 |
| 1.08503 | 1,000,000 | 2,000,000 |
| 1.08506 | 2,000,000 | 4,000,000 |

| Istruzione | Eseguito | Prezzo medio | Costo rispetto al miglior ask | Risultato |
|---|---|---|---|---|
| A mercato, 2M | 2,000,000 | 1.085018 | 0.175 pip, circa $35 | Completato, a un prezzo che non hai scelto |
| Limit 1.08502 IOC, 2M | 1,000,000 | 1.085005 | 0.05 pip, circa $5 | Metà della size, 1M cancellato |
| Limit 1.08502 FOK, 2M | 0 | Nessuno | $0 | Cancellato: solo 1M pari o sotto il limite |
| Limit 1.08503 FOK, 2M | 2,000,000 | 1.085018 | 0.175 pip, circa $35 | Eseguito: il limite era abbastanza ampio |
L’ultima riga è quella più sottile. Un decimo di pip in più ha trasformato il FOK da nessun trade a esecuzione completa, con una media migliore del suo limite. FOK non significa «stretto». Significa «l’intera size deve stare sotto questo prezzo in questo momento». IOC e FOK con lo stesso limite vedono la stessa liquidità. Si differenziano solo per ciò che fanno quando non basta.
Non esiste nemmeno un’istruzione più economica in assoluto. L’IOC da $5 sembra un affare rispetto all’ordine a mercato da $35, ma ha consegnato metà della posizione. Se il restante 1M va comprato più tardi a un prezzo peggiore, il confronto cambia. Il costo della size mancante è l’argomento del resto di questa guida.
Come appaiono gli ordini in FIX
Su una connessione FIX API dichiari ogni istruzione in modo esplicito in un messaggio NewOrderSingle (35=D). Ridotto ai campi che contano, l’ordine IOC dell’esempio si presenta così:
Cambia 59=3 in 59=4 e lo stesso ordine diventa FOK. Togli il prezzo e imposta 40=1 e diventa un ordine a mercato. Header, checksum, timestamp e campi del conto sono omessi, e il formato del simbolo varia a seconda della sede: alcune usano ID numerici.
| Tag | Campo | Valori che incontrerai |
|---|---|---|
| 40 | OrdType | 1 A mercato, 2 Limite, 3 Stop, 4 Stop-limit, D Già quotato |
| 59 | TimeInForce | 0 Day, 1 GTC, 3 IOC, 4 FOK, 6 GTD |
| 110 | MinQty | Quantità minima da eseguire, dove supportata |
| 150 | ExecType | 0 Nuovo, F Trade, 4 Cancellato, 8 Rifiutato, C Scaduto |
| 39 | OrdStatus | 0 Nuovo, 1 Parzialmente eseguito, 2 Eseguito, 4 Cancellato, 8 Rifiutato, C Scaduto |
| 14 / 151 | CumQty / LeavesQty | Eseguito finora / ancora aperto. LeavesQty 0 significa che l’ordine è concluso |
| 31 / 32 / 6 | LastPx / LastQty / AvgPx | Prezzo e size di questa esecuzione / media di tutte le esecuzioni |
La parte difficile non è inviare l’ordine, ma leggere la risposta. Un solo IOC può produrre una sequenza di ExecutionReport (35=8), e il modo in cui viene riportato il residuo dipende dalla sede.

Alcune sedi inviano una conferma aggiuntiva (150=0) prima delle esecuzioni. Altre consegnano un’unica esecuzione aggregata. Le sessioni FIX 4.2 usano per le esecuzioni valori ExecType (1 e 2) diversi da FIX 4.3 e successivi (F). Un handler robusto si basa quindi su CumQty, LeavesQty e OrdStatus, non su un numero fisso di messaggi. La guida passo per passo al protocollo FIX spiega il livello di sessione sottostante a questi messaggi.
Liquidità full-amount e last look: perché il forex è diverso
Le spiegazioni pensate per il mercato azionario presuppongono un book centrale in cui l’offerta esposta è ferma. Le sedi forex possono comportarsi diversamente in due modi che incidono direttamente su IOC e FOK.
Liquidità sweepable vs full-amount. In un book sweepable un ordine può prendere più livelli da più fornitori, come nell’esempio qui sopra. Nel pricing full-amount un fornitore quota un solo prezzo per l’intera size e i livelli non si sommano, quindi un FOK da 2M va confrontato con il livello da 2M, non con la somma delle quotazioni da 1M. Una schermata di profondità dall’aspetto identico può quindi significare cose diverse.
Last look. Dove un fornitore applica il last look, il tuo ordine è una richiesta che può ancora essere rifiutata dopo una breve attesa. Un FOK può essere rifiutato anche se il book mostrava una size sufficiente al momento dell’invio, e un IOC può tornare più piccolo di quanto esposto. Il FX Global Code (il codice di condotta globale del mercato dei cambi) chiede ai fornitori che usano il last look di comunicare questa pratica ai clienti, quindi chiedi tale informativa. I rifiuti da last look sono visibili nel tuo log solo se li registri. Il meccanismo è trattato nella nostra guida a esecuzione del broker, A-book, B-book e last look.
Dove mettere il limite: un modello con i numeri
Per un IOC o un FOK il parametro chiave non è il TIF ma il prezzo limite. Se lo metti alla quotazione corrente, la maggior parte dei segnali va persa. Se non lo limiti, le esecuzioni peggiori si mangiano il vantaggio. Tra questi due estremi esiste una risposta calcolabile.
Considera un segnale di breve durata con un vantaggio atteso di 1.2 pip al netto delle commissioni, misurato dal prezzo del segnale. Tra il segnale e l’arrivo alla sede il prezzo si muove. Ipotizza due regimi: nell’80% dei casi il prezzo si sposta di circa 0.2 pip contro di te (deviazione standard 0.3 pip), e nel 20% un movimento rapido lo porta a circa 2 pip di distanza (deviazione standard 1 pip). Questi input sono illustrativi. In pratica li stimi dal tuo log degli ordini.

| Tolleranza del limite dal prezzo del segnale | Tasso di esecuzione | Netto medio per esecuzione | Netto atteso per segnale |
|---|---|---|---|
| 0 pip (limite al prezzo del segnale) | 20.7% | 1.38 pip | 0.29 pip |
| 0.3 pip | 51.3% | 1.18 pip | 0.61 pip |
| 0.6 pip | 74.3% | 1.05 pip | 0.78 pip |
| 1.2 pip (pari al vantaggio) | 84.2% | 0.98 pip | 0.82 pip |
| 2.0 pip | 90.0% | 0.89 pip | 0.80 pip |
| Nessun limite (ordine a mercato) | 100% | 0.64 pip | 0.64 pip |
Tre conclusioni valgono ben oltre questo esempio:
- Il limite migliore è il prezzo di pareggio, non la quotazione. Conviene accettare qualsiasi esecuzione che lasci ancora un profitto atteso positivo. In questo modello il massimo si trova esattamente dove la tolleranza è pari al vantaggio, perché l’esecuzione marginale successiva guadagna zero.
- La curva è piatta vicino al massimo. Tra 0.8 e 2 pip il profitto atteso cambia pochissimo. Non ti serve una tolleranza precisa, ma te ne serve una.
- Il prezzo medio di esecuzione è un obiettivo fuorviante. Il limite più stretto ha il miglior prezzo per esecuzione (1.38 pip) e il peggior risultato per segnale (0.29 pip), perché il 79% dei segnali non diventa mai un trade.
Il modello ignora gli effetti di coda e presuppone che l’intera size venga eseguita ogni volta che il limite viene raggiunto. Per ordini più grandi ripeti il calcolo con la tua profondità reale, perché il limite decide anche quanta size può essere eseguita. Verifica le ipotesi con i dati: la nostra guida al divario tra backtest ed esecuzione live mostra come portare il tempo di esecuzione in un test.
Gestire le esecuzioni parziali senza creare nuovi rischi
Un’esecuzione parziale non è un errore, ma è un nuovo stato per il quale l’algoritmo deve avere una regola. FOK evita questo stato all’ingresso; IOC sposta il problema nella tua logica. Decidi la politica prima di andare live:
| Politica sul residuo | Quando è adatta | Rischio da controllare |
|---|---|---|
| Accettare e gestire ciò che è stato eseguito | Ingressi con un vantaggio indipendente dalla size | Posizione troppo piccola per coprire i costi fissi |
| Reinviare il residuo a un nuovo prezzo | Segnale ancora valido, vantaggio ancora sopra la tolleranza | Rincorrere il prezzo. Limita i tentativi e ricontrolla il vantaggio ogni volta |
| Coprire o completare su un’altra sede | Trade multi-gamba | Lot step diversi e una seconda possibilità di mancata esecuzione |
| Chiudere la parte eseguita | Un’esecuzione sotto la size minima sostenibile | Pagare lo spread due volte |
I trade a due gambe richiedono la massima attenzione. Supponi che un trade coperto compri 2M sulla sede A con IOC e venda sulla sede B. Se A esegue 1M e l’algoritmo vende comunque i 2M previsti, resta con 1M short aperto. Con circa $100 per pip per milione su EURUSD, un movimento di 10 pip contro quella posizione costa $1,000, cifra che supera facilmente il vantaggio di molti trade. La regola è semplice: dimensiona la seconda gamba dal CumQty della prima, mai dalla quantità richiesta.
Converti anche sulla griglia di size della seconda sede. Se la prima gamba esegue 1,370,000 e la sede B accetta step da 100,000, puoi coprire 1,400,000 o 1,300,000, non la size esatta. Stabilisci una regola anche per questo residuo e tratta un residuo non coperto come un limite di rischio.
FOK sulla prima gamba elimina il disallineamento di size ma genera più casi di mancato trade. FOK sulla seconda gamba è di solito una scelta sbagliata: quando la prima gamba è già eseguita, una copertura cancellata ti lascia completamente esposto. È proprio su quella seconda gamba che vale la pena pagare per la certezza di esecuzione.
Quale ordine per quale strategia

| Situazione | Scelta predefinita ragionevole | Motivazione |
|---|---|---|
| Ingresso di arbitraggio di latenza | Limit IOC al prezzo di pareggio | Il vantaggio svanisce in millisecondi; un’esecuzione parziale guadagna comunque e il limite taglia la coda |
| Prima gamba di una coppia coperta | Limit FOK o IOC con copertura basata su CumQty | FOK protegge il dimensionamento; IOC guadagna in tasso di esecuzione ma richiede una logica migliore |
| Seconda gamba, quando la prima è eseguita | Mercato o IOC ampio | Restare scoperti è il rischio maggiore |
| Ingresso sulle notizie | Limit IOC, size contenuta | Spread e profondità cambiano rapidamente, e un ordine a mercato non ha un tetto |
| Uscita di emergenza o stop-out | Mercato o IOC ampio, ripetuto fino ad azzerare la posizione | Prima la certezza; FOK può lasciare la posizione aperta |
| Pair trading o trade statistici | Limit IOC o limite passivo di breve durata | L’holding period è più lungo, quindi lo spread pagato conta più della velocità |
| Cattura dello spread e ribilanciamento | Limite passivo, Day o GTD | Vieni pagato per attendere, e devi cancellare prima di notizie e rollover |
L’esecuzione dipende anche dal timing. Intorno a rollover e notizie gli spread si allargano e la profondità si assottiglia, quindi un limite che funziona bene a mezzogiorno di Londra può fallire o diventare costoso in quelle finestre. Fai dipendere tolleranza e size dallo spread corrente invece di fissarle per tutta la giornata. Un approfondimento sulle strategie sensibili alla velocità è disponibile nella nostra guida all’arbitraggio di latenza.
Sette passi per configurare l’esecuzione degli ordini
Errori comuni nella gestione automatizzata degli ordini
- Dare per scontato che la size richiesta sia stata eseguita. La posizione deve derivare dagli execution report, non dall’ordine inviato.
- Trattare un FOK cancellato come un errore di sistema. È un esito normale. Un avviso per ognuno ti abitua a ignorare gli avvisi; imposta invece l’avviso sul tasso.
- Ritentare allo stesso prezzo in un ciclo. Se il prezzo si è mosso, anche il nuovo tentativo fallisce, e i tentativi rapidi possono violare i limiti di messaggi. Riprezza o fermati.
- Ignorare lo stato sconosciuto. Quando non arriva risposta, l’ordine può essere ancora attivo o già eseguito. Interrogalo con un OrderStatusRequest (
35=H) o riconcilia la posizione dopo la riconnessione, prima di inviare un ordine sostitutivo. - Riutilizzare i valori ClOrdID. Un tag 11 univoco per ogni ordine, compreso ogni nuovo tentativo, è ciò che rende possibile la riconciliazione.
- Usare prezzi non aggiornati per il limite. Un limite calcolato da una quotazione in ritardo è troppo stretto o troppo generoso. Un feed di prezzi veloce dà senso alla tolleranza.
- Testare con esecuzioni perfette. Un backtest che esegue ogni ordine per intero alla quotazione non può distinguere il mercato da IOC e FOK. Modella profondità e rifiuti, oppure fai un forward test con size ridotte.
- Trasferire le impostazioni tra sedi. Una tolleranza ottimizzata su un broker dice poco su un altro, perché profondità, last look e latenza sono tutti diversi.
Che cosa misurare
Scegliere un tipo di ordine è una questione empirica, e solo un log completo può dare la risposta. I report devono coprire segnali e tentativi, non solo i trade completati.
| Metrica | Definizione | Che cosa ti dice |
|---|---|---|
| Fill ratio | Quantità eseguita / quantità richiesta | Se è troppo basso, il limite è stretto o la profondità è scarsa |
| Tasso di rifiuto | Ordini rifiutati o cancellati / ordini inviati | Un aumento improvviso indica cambiamenti nella liquidità o nel broker |
| Slippage | Prezzo di esecuzione meno prezzo di riferimento al segnale, con segno | Costo di esecuzione per trade eseguito |
| Tempo di andata e ritorno | Dall’invio dell’ordine al primo execution report | Se la sede sta rallentando, per fascia oraria |
| Netto per segnale | Risultato totale / tutti i segnali, compresi quelli mancati | Il numero che dovrebbe guidare la tolleranza |
Suddividi questi dati per simbolo, sede, ora e tipo di ordine e confronta i risultati prima e dopo ogni modifica. SharpTrader mostra ordini e statistiche di performance con PnL, slippage e tempo di esecuzione: una base pratica per questo tipo di revisione. I tipi di ordine e i valori TIF disponibili in una data configurazione dipendono dal connettore e dal broker, quindi verificali per il tuo conto.
Costruisci l’esecuzione sui tuoi dati
SharpTrader si collega ai broker tramite FIX API e altri protocolli, esegue strategie di arbitraggio e non di arbitraggio e registra slippage e tempo di esecuzione per ogni ordine. Per ottimizzare i parametri su questi dati, SharpTrader Optimizer automatizza la ricerca.
Scanner di arbitraggio gratuito + breve corso via email
Ricevi il link allo scanner gratuito e alcune email brevi e pratiche di Boris: cosa significa davvero un divario di prezzo dopo i costi, come testare una strategia prima di rischiare denaro reale e quali strumenti sono adatti al tuo mercato. Niente promesse esagerate. Le email sono in inglese.
Domande frequenti
Qual è la differenza tra IOC e FOK?
Entrambi vengono eseguiti immediatamente e non restano mai nel book. IOC accetta un’esecuzione parziale e cancella il residuo non eseguito. FOK richiede che l’intera quantità venga eseguita subito, altrimenti tutto l’ordine viene cancellato e non avviene alcun trade.
FOK è meglio di IOC?
In generale nessuno dei due è migliore. FOK è adatto ai trade in cui una posizione parziale è inutile o complica la copertura. IOC di solito opera più spesso, perché una parte della size viene eseguita, ma il tuo algoritmo deve gestire correttamente le esecuzioni parziali.
Un ordine FOK può essere eseguito parzialmente?
No. Per definizione un ordine FOK viene eseguito per intero oppure per niente. Se vedi un’esecuzione parziale, l’ordine non era un vero FOK su quella sede: verifica come il broker mappa l’istruzione.
Che cosa succede alla parte non eseguita di un ordine IOC?
Viene cancellata immediatamente e non resta mai nel book. Su FIX ricevi un execution report che chiude l’ordine, di solito come Canceled o Expired a seconda della sede, con LeavesQty pari a 0.
Un ordine a mercato è la stessa cosa di un ordine IOC?
Non esattamente. Un ordine a mercato non ha un limite di prezzo, mentre un IOC di norma ce l’ha. Molte sedi eseguono gli ordini a mercato con un comportamento IOC o FOK, quindi la durata può coincidere, ma solo un limite protegge il prezzo.
Quali sono i valori FIX per IOC e FOK?
Nel campo TimeInForce, tag 59, IOC è 3 e FOK è 4. Il tipo di ordine si imposta separatamente nel tag 40, dove 1 è mercato e 2 è limite.
Tutti i broker forex supportano IOC e FOK?
No. Il supporto dipende dal broker, dalla piattaforma e dal tipo di connessione. Le connessioni FIX API di solito offrono più controllo, ma ogni sede pubblica il proprio elenco di combinazioni accettate di tipo di ordine e time in force.
Questo articolo ha finalità educative e non costituisce consulenza finanziaria. Il book e il modello sono esempi illustrativi, non risultati di trading. Il trading sui cambi comporta un rischio significativo di perdita.