Come leggere un simbolo di opzione nel formato OSI
Scopri come decodificare root, scadenza, call o put e strike a otto cifre nei simboli OSI, inclusi adjusted roots e SPXW, con l’esempio 00007500.
Un simbolo di opzione è un’unica stringa che contiene quattro informazioni: il root del sottostante, la data di scadenza, l’indicazione call o put e lo strike price. Il formato si chiama OSI, dall’Options Symbology Initiative adottata dal settore delle opzioni statunitensi nel 2010. Ogni ordine e ogni data feed si basa su questo formato. Una volta imparate le quattro componenti, si può decodificare a colpo d’occhio qualsiasi simbolo di opzione statunitense quotata.
Quali sono le quattro componenti di un simbolo di opzione?
Un simbolo OSI canonico è composto da 21 caratteri, in ordine fisso:
- Il root, di sei caratteri, allineato a sinistra e completato a destra con spazi quando il root del sottostante è più corto di sei caratteri.
- La scadenza, di sei cifre, nel formato YYMMDD. 260116 corrisponde al 16 gennaio 2026.
- Il right, di un carattere: C per una call, P per una put.
- Lo strike, di otto cifre, espresso in millesimi di dollaro senza virgola decimale.
La maggior parte dei broker e dei siti web elimina gli spazi di riempimento e mostra il formato compatto. Alcuni feed inseriscono davanti alla stringa un indicatore come O:. Nessuno dei due elementi modifica la decodifica. Gli ultimi 15 caratteri sono sempre la data, il right e lo strike. Il root è quindi tutto ciò che precede questi elementi. Il pannello sotto scompone contratti reali secondo questa regola e mostra i campi decodificati accanto alla scadenza riportata dal record del contratto.
L'esatto SQL dietro ogni numero
SELECT
contract,
substring(contract, 1, length(contract) - 15) AS root,
substring(contract, length(contract) - 14, 6) AS expiry_field,
substring(contract, length(contract) - 8, 1) AS right_code,
substring(contract, length(contract) - 7, 8) AS strike_field,
toFloat64(substring(contract, length(contract) - 7, 8)) / 1000 AS strike_dollars,
listed_expiration
FROM
(
SELECT
replaceRegexpOne(ticker, '^O:', '') AS contract,
formatDateTime(any(expiration_date), '%b %e, %Y') AS listed_expiration
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND expiration_date = '2026-01-16'
AND toFloat64(strike_price) IN (500, 600, 650, 700)
AND date >= '2025-12-01'
AND date < '2026-01-01'
GROUP BY contract
)
ORDER BY strike_dollars ASC, right_code ASCLa prima riga restituisce un root pari a SPY, un campo data pari a 260116, un right pari a C e un campo strike pari a 00500000, che diviso per il relativo fattore corrisponde a uno strike di $500. Il record della scadenza del contratto riporta Jan 16, 2026, in linea con le sei cifre contenute nella stringa. Il pannello comprende 8 contratti: gli stessi strike quotati sia come call sia come put. Un solo carattere distingue una call dalla put corrispondente. Per questo è il carattere da controllare due volte su un ordine. Se questi campi ricordano quelli mostrati dal broker, leggere una option chain illustra le colonne che li circondano.
Come leggere un simbolo di opzione dalla riga di comando
La decodifica non richiede librerie né accesso alla rete. I campi hanno larghezza fissa e si misurano a partire da destra. In bash è quindi sufficiente un’espansione di sottostringa. Incolla questo comando in un terminale:
SYM=SPY260116C00650000
echo "root ${SYM:0:$(( ${#SYM} - 15 ))}"
echo "expiry ${SYM: -15:6}"
echo "right ${SYM: -9:1}"
echo "strike ${SYM: -8}"
Lo spazio davanti a ciascun offset negativo è obbligatorio. Senza quello spazio, bash interpreta :- come un’espansione con valore predefinito e restituisce un risultato errato.
Per un elenco di simboli, awk esegue lo stesso calcolo usando posizioni basate sull’indice uno:
awk '{
n = length($0)
root = substr($0, 1, n - 15)
expiry = substr($0, n - 14, 6)
right = substr($0, n - 8, 1)
strike = substr($0, n - 7, 8)
printf "%-6s 20%s-%s-%s %-4s $%.3f\n",
root,
substr(expiry, 1, 2), substr(expiry, 3, 2), substr(expiry, 5, 2),
(right == "C" ? "call" : "put"),
strike / 1000
}' <<'EOF'
SPY260116C00650000
SPY260116P00650000
SPXW260116C05500000
XYZ1260116C00007500
EOF
Una versione in python3 gestisce nello stesso modo il formato con 21 caratteri e spazi di riempimento e il prefisso del feed. Non usa nulla al di fuori della standard library:
from datetime import datetime
def parse_osi(symbol):
s = symbol.strip()
if s.startswith("O:"):
s = s[2:]
s = s.replace(" ", "")
return {
"root": s[:-15],
"expiry": datetime.strptime(s[-15:-9], "%y%m%d").date(),
"right": "call" if s[-9] == "C" else "put",
"strike": int(s[-8:]) / 1000,
}
samples = [
"SPY 260116C00650000",
"O:SPY260116P00650000",
"SPXW 260116C05500000",
"XYZ1 260116C00007500",
]
for sym in samples:
f = parse_osi(sym)
print("{:<6} {} {:<4} ${:,.3f}".format(f["root"], f["expiry"], f["right"], f["strike"]))
Entrambi gli snippet funzionano su un’immagine stock di Ubuntu, senza installare altro oltre ad awk e python3. Nessuno dei due accede alla rete. L’output sarà quindi identico oggi e tra cinque anni.
Perché 00007500 corrisponde a uno strike di $7.50?
Il campo dello strike è composto da otto cifre senza virgola decimale. L’unità di misura è il millesimo di dollaro. Per ottenere il valore in dollari bisogna dividere per 1.000. 00007500 equivale a 7.500 millesimi, cioè $7.50. 07500000 equivale a 7.500.000 millesimi, cioè $7,500. I due valori differiscono per tre zeri inseriti in una sequenza di zeri. È l’errore di lettura più comune dell’intero formato. La larghezza fissa mantiene tutti i simboli della stessa lunghezza. L’unità in millesimi consente inoltre di rappresentare strike che, dopo un’azione societaria, corrispondono a frazioni di centesimo.
Un solo campo deve coprire tutti gli strike quotati, da un’azione a basso prezzo fino a un indice con un livello a quattro cifre. Il pannello sotto legge lo strike minimo e massimo di diversi sottostanti e mostra le otto cifre esattamente come compaiono nel simbolo.
L'esatto SQL dietro ogni numero
SELECT
underlying,
round(toFloat64(min(strike)), 2) AS lowest_strike,
argMin(strike_field, strike) AS lowest_strike_field,
round(toFloat64(max(strike)), 2) AS highest_strike,
argMax(strike_field, strike) AS highest_strike_field,
uniqExact(strike) AS strike_count
FROM
(
SELECT
underlying_symbol AS underlying,
strike_price AS strike,
substring(replaceRegexpOne(ticker, '^O:', ''),
length(replaceRegexpOne(ticker, '^O:', '')) - 7, 8) AS strike_field
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('KO', 'NVDA', 'AAPL', 'SPY', 'SPX')
AND date >= today() - 7
)
GROUP BY underlying
ORDER BY highest_strike ASCNel periodo considerato, KO quota strike compresi tra $32.5 e $125, indicati rispettivamente come 00032500 e 00125000 nel simbolo. All’estremo superiore del pannello, SPY arriva a $1480, ossia 01480000, distribuiti su 462 strike distinti. Le otto cifre e il divisore restano gli stessi, qualunque sia il livello del prezzo.
Opzioni adjusted: cosa indica un numero alla fine del root
Un’opzione standard su azioni consente di ricevere 100 azioni. Le azioni societarie possono modificare questo rapporto: uno split con un rapporto non intero, una fusione pagata in parte in contanti, uno spinoff o un dividendo straordinario in contanti oltre la soglia prevista. L’OCC rettifica i contratti aperti e assegna loro un nuovo root, ottenuto aggiungendo una cifra al root precedente. ABC diventa ABC1 alla prima rettifica e ABC2 alla seconda. Il formato non cambia, quindi il parser continua a funzionare. Cambia però il sottostante da consegnare, e il simbolo non lo indica.
Una cifra finale identifica anche i mini contract, contrassegnati dal 7, che hanno come deliverable 10 azioni invece di 100. In entrambi i casi, il numero segnala che bisogna leggere i termini del contratto prima di confrontare lo strike con qualsiasi altro valore. La nostra nota su come gli split azionari influenzano le opzioni illustra il calcolo del rapporto sia per lo strike sia per il deliverable.
Le serie adjusted ricevono raramente nuove scadenze. Un root come ABC1 si riduce man mano che le date quotate arrivano a scadenza, invece di essere integrato con nuove date. Può scomparire completamente dalla chain quando scade l’ultima opzione. I termini sono riportati nel memo di rettifica dell’OCC relativo a quel contratto, non nella stringa. Il memo indica il nuovo deliverable, l’eventuale componente in contanti e il multiplier associato. Prima di leggere quel memo, uno strike adjusted e uno strike standard sullo stesso sottostante sono due elementi diversi che mostrano le stesse otto cifre.
SPX, SPXW e il significato della W
Le opzioni su indice hanno root propri. Il complesso S&P 500 è quello che la maggior parte degli operatori incontra per primo. SPX e SPXW fanno riferimento allo stesso indice e condividono lo stesso formato di 21 caratteri. La W non indica più una quotazione weekly, nonostante quanto suggerisca il nome. SPX è il root con regolamento AM: il contratto del terzo venerdì, il cui valore di settlement è calcolato sulla base dei prezzi di apertura dei componenti dell’indice quel venerdì di scadenza. Le negoziazioni terminano il giovedì precedente. SPXW è il root con regolamento PM e comprende tutte le altre date del calendario: dalle scadenze giornaliere dal lunedì al venerdì fino ai contratti di fine mese. Ogni contratto resta negoziabile fino alla chiusura del giorno di scadenza.
Anche il calendario segue la stessa distinzione. Per ogni ciclo mensile, un contratto con scadenza il terzo venerdì e regolamento AM appartiene al root SPX. Tutte le altre date future dell’indice appartengono a SPXW. In una chain completa, rappresentano la maggior parte delle scadenze visualizzate. La stringa, da sola, non mostra nessuno di questi dettagli. Il root è un’indicazione, mentre la specifica del contratto è l’autorità di riferimento. Due root, un indice, un’unica schermata e meccanismi di settlement che le opzioni con regolamento AM e PM analizza in dettaglio.
Cosa non indica mai un simbolo di opzione
Le quattro componenti identificano completamente un contratto, ma ne descrivono solo in minima parte le caratteristiche. In particolare:
- Il multiplier. Un’opzione standard statunitense su azioni copre 100 azioni, ma la stringa non contiene alcun campo che lo indichi. Le serie adjusted e le mini serie sono diverse, mentre i prodotti su indice stabiliscono i propri parametri.
- Il tipo di settlement. Il simbolo non indica se il regolamento è AM o PM, né se avviene per contanti o tramite consegna fisica. Per i root su indice, la convenzione può fornire un’indicazione, ma solo la specifica del contratto è autorevole.
- Il deliverable. Dopo una rettifica, l’ipotesi delle 100 azioni non è più valida. Il simbolo appare identico, salvo la cifra aggiunta.
- Il tempo residuo. Il campo della data indica una scadenza, non un conto alla rovescia. Per calcolare i giorni alla scadenza bisogna effettuare autonomamente il calcolo sul calendario.
- La liquidità. Due simboli con struttura identica possono avere livelli molto diversi di volume e open interest.
FAQ
Quanti caratteri ha un simbolo di opzione?
Ventuno nel formato OSI canonico: sei per il root, sei per la data, uno per l’indicazione call o put e otto per lo strike. I root più corti di sei caratteri vengono completati con spazi. La maggior parte delle schermate elimina questi spazi, quindi un root di tre lettere viene normalmente visualizzato come una stringa di 18 caratteri.
Cosa indica il numero dopo il root in un simbolo di opzione?
Indica che i termini del contratto non sono più standard. Una cifra aggiunta dall’OCC identifica una serie adjusted dopo un’azione societaria. Il 7 identifica invece un mini contract che copre 10 azioni anziché 100. I campi della data e dello strike vengono comunque decodificati nello stesso modo.
Perché lo strike è composto da otto cifre?
Il campo contiene lo strike in millesimi di dollaro come numero intero a larghezza fissa. In questo modo può rappresentare valori da un decimo di centesimo fino a $99,999.999 senza usare la virgola decimale. Per leggere il valore in dollari bisogna dividere le otto cifre per 1.000: 00007500 corrisponde a $7.50.
SPXW è uguale a SPX?
Entrambi fanno riferimento allo stesso indice e usano lo stesso formato del simbolo. Il settlement è diverso. I contratti SPX regolano su un valore calcolato dai prezzi di apertura del venerdì mattina e cessano di essere negoziati il giorno precedente. I contratti SPXW restano negoziabili fino alla chiusura del giorno di scadenza e regolano sul livello di chiusura dell’indice.
Un simbolo di opzione indica se l’opzione è weekly o monthly?
Per le azioni statunitensi, no. Una weekly e una monthly sullo stesso sottostante condividono il root e differiscono soltanto nelle sei cifre della data. È la convenzione del terzo venerdì a far apparire una data come mensile. I complessi su indice, invece, usano root separati.
Ogni pannello della pagina contiene, sotto un expander, l’SQL esatto che lo ha prodotto. È quindi possibile vedere come ogni campo viene estratto dalla stringa. Per scomporre un simbolo che si sta osservando in questo momento, basta richiederlo in inglese semplice sul terminale Strasmore.