Options Symbol OSI Format کیسے پڑھیں
Options symbol میں OSI root، expiry، call یا put flag اور eight-digit strike decode کریں۔ adjusted roots، SPXW اور 00007500 سے $7.50 کی وضاحت بھی شامل ہے۔
An options symbol ایک single string ہوتا ہے جس میں چار معلومات شامل ہوتی ہیں: underlying کا root، expiration date، call یا put کا flag، اور strike price۔ اس layout کو Options Symbology Initiative کے نام پر OSI کہا جاتا ہے، جسے US options industry نے 2010 میں اپنایا تھا۔ ہر order ticket اور data feed اسی layout پر مبنی ہوتا ہے۔ یہ چار fields ایک بار سمجھ لیں تو آپ کسی بھی listed US option symbol کو دیکھتے ہی decode کر سکتے ہیں۔
Option symbol میں چار fields کون سے ہوتے ہیں؟
Canonical OSI symbol 21 characters پر مشتمل ہوتا ہے، اور fields ایک مقررہ ترتیب میں آتے ہیں:
- Root: چھ characters۔ اسے بائیں جانب align کیا جاتا ہے، اور جب underlying کا root چھ characters سے چھوٹا ہو تو دائیں طرف spaces سے padding کی جاتی ہے۔
- Expiration: چھ digits، YYMMDD ترتیب میں۔ 260116 کا مطلب January 16, 2026 ہے۔
- Right: ایک character۔ call کے لیے C اور put کے لیے P۔
- Strike: آٹھ digits، جنہیں decimal point کے بغیر dollar کے thousandths میں لکھا جاتا ہے۔
زیادہ تر brokers اور websites padding ہٹا کر compact form دکھاتے ہیں، جبکہ بعض feeds string کے شروع میں O: جیسا marker بھی لگاتے ہیں۔ اس سے parsing تبدیل نہیں ہوتی۔ آخری 15 characters ہمیشہ date، right اور strike ہوتے ہیں۔ اس لیے root وہ حصہ ہوتا ہے جو ان کے سامنے موجود ہو۔ نیچے دیا گیا panel اسی اصول کے تحت حقیقی contracts کو تقسیم کرتا ہے اور parsed fields کے ساتھ وہ expiration بھی دکھاتا ہے جو خود contract record میں درج ہے۔
ہر عدد کے پیچھے موجود درست SQL
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 ASCپہلی row میں root SPY، date field 260116، right C اور strike field 00500000 آتے ہیں۔ Strike field کو divide کرنے پر strike $500 بنتا ہے۔ Contract کے اپنے expiration record میں Jan 16, 2026 درج ہے، جو string کے اندر موجود چھ digits سے مطابقت رکھتا ہے۔ Panel میں 8 contracts شامل ہیں: یہی strikes calls اور puts، دونوں صورتوں میں listed ہیں۔ صرف ایک character call کو اس کے matching put سے الگ کرتا ہے۔ اسی لیے order ticket پر اس character کو دوبارہ check کرنا ضروری ہے۔ اگر یہ fields آپ کو broker screen سے مانوس لگتی ہیں تو option chain پڑھنے کی تحریر ان کے اردگرد موجود columns کی وضاحت کرتی ہے۔
Command line پر options symbol کیسے پڑھیں
اس parsing کے لیے کسی library یا network access کی ضرورت نہیں۔ Fields fixed width کے ہوتے ہیں اور دائیں جانب سے ناپے جاتے ہیں، اس لیے bash میں substring expansion کافی ہے۔ اسے terminal میں paste کریں:
SYM=SPY260116C00650000
echo "root ${SYM:0:$(( ${#SYM} - 15 ))}"
echo "expiry ${SYM: -15:6}"
echo "right ${SYM: -9:1}"
echo "strike ${SYM: -8}"
ہر negative offset سے پہلے موجود space ضروری ہے۔ اس کے بغیر bash :- کو default value expansion سمجھتا ہے اور غلط نتیجہ دکھاتا ہے۔
Symbols کی فہرست کے لیے awk بھی one-based positions کے ساتھ یہی arithmetic کرتا ہے:
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
python3 کا version padded 21-character form اور feed prefix، دونوں کو ایک ہی function میں handle کرتا ہے، اور 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"]))
دونوں snippets stock Ubuntu image پر awk اور python3 کے علاوہ کچھ install کیے بغیر چلتے ہیں۔ دونوں network سے connect نہیں ہوتے، اس لیے آج اور پانچ سال بعد بھی output یکساں رہے گا۔
00007500 کا مطلب $7.50 strike کیوں ہے؟
Strike field آٹھ digits پر مشتمل ہوتا ہے۔ اس میں decimal point نہیں ہوتا، اور اس کی unit dollar کا one-thousandth ہے۔ Dollars حاصل کرنے کے لیے اسے 1,000 سے divide کریں۔ 00007500 کا مطلب 7,500 thousandths، یعنی $7.50 ہے۔ 07500000 کا مطلب 7,500,000 thousandths، یعنی $7,500 ہے۔ دونوں values میں تین zeros کا فرق ہے جو مسلسل zeros کے درمیان چھپ جاتا ہے۔ یہی پورے format میں سب سے عام غلط فہمی ہے۔ Fixed width ہر symbol کو یکساں length دیتی ہے، جبکہ thousandths unit corporate action کے بعد cent کے fractions پر آنے والے strikes کے لیے بھی گنجائش رکھتی ہے۔
ایک ہی field کو ہر listed strike کا احاطہ کرنا ہوتا ہے، کم قیمت والے share سے لے کر four-digit index level تک۔ نیچے دیا گیا panel کئی underlyings کے lowest اور highest strikes پڑھتا ہے اور آٹھ digits کو بالکل اسی طرح دکھاتا ہے جیسے وہ symbol کے اندر موجود ہیں۔
ہر عدد کے پیچھے موجود درست SQL
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 ASCزیرِمشاہدہ sessions کے دوران KO، $32.5 سے $125 تک strikes list کرتا ہے۔ Symbol کے اندر یہ values بالترتیب 00032500 اور 00125000 لکھی گئی ہیں۔ Panel کے آخری سرے پر SPY، $1480 تک پہنچتا ہے، یعنی 01480000، اور یہ 462 الگ strikes میں پھیلا ہوا ہے۔ Price level کچھ بھی ہو، آٹھ digits اور divisor ایک ہی رہتے ہیں۔
Adjusted options: root کے آخر میں موجود number کا مطلب
Standard equity option 100 shares deliver کرتا ہے۔ Corporate actions اس میں تبدیلی لا سکتے ہیں۔ مثال کے طور پر ایسا split جس کا ratio whole number نہ ہو، جزوی cash کے ذریعے merger، spinoff، یا threshold سے زیادہ special cash dividend۔ OCC open contracts کو adjust کرتا ہے اور انہیں نیا root دیتا ہے۔ اس نئے root میں پرانے root کے آخر میں digit شامل ہوتی ہے۔ پہلی adjustment پر ABC، ABC1 بن جاتا ہے اور دوسری adjustment پر ABC2۔ Layout تبدیل نہیں ہوتا، اس لیے parser کام کرتا رہتا ہے۔ البتہ contract کے پیچھے موجود deliverable تبدیل ہو جاتا ہے، اور symbol اس تبدیلی کے بارے میں کچھ نہیں بتاتا۔
Root کے آخر میں digit mini contracts کی نشاندہی بھی کر سکتی ہے، جہاں 7 استعمال ہوتا ہے۔ ایسے contracts 100 کے بجائے 10 shares cover کرتے ہیں۔ دونوں صورتوں میں یہ number اس بات کا flag ہے کہ strike کا کسی دوسری value سے موازنہ کرنے سے پہلے contract terms پڑھنا ضروری ہے۔ ہماری تحریر stock splits options کو کیسے متاثر کرتے ہیں strike اور deliverable، دونوں پر ratio کی mathematics بیان کرتی ہے۔
Adjusted series میں نئی expirations شاذونادر ہی شامل کی جاتی ہیں۔ ABC1 جیسا root اس وقت ختم ہونے لگتا ہے جب اس کی listed dates گزرنے لگتی ہیں، بجائے اس کے کہ اس میں نئی dates شامل ہوں۔ آخری expiration کے بعد یہ chain سے مکمل طور پر غائب بھی ہو سکتا ہے۔ Terms اس contract کے OCC adjustment memo میں درج ہوتی ہیں، string میں نہیں۔ Memo revised deliverable، ممکنہ cash component، اور اس کے ساتھ استعمال ہونے والے multiplier کی وضاحت کرتا ہے۔ جب تک یہ memo پڑھا نہ جائے، ایک ہی underlying پر adjusted strike اور standard strike ایک ہی آٹھ digits رکھنے کے باوجود دو مختلف چیزیں ہیں۔
SPX، SPXW، اور W کا مطلب
Index options کے اپنے roots ہوتے ہیں، اور S&P 500 complex وہ market ہے جس سے زیادہ تر لوگ ابتدا کرتے ہیں۔ SPX اور SPXW ایک ہی index کو reference کرتے ہیں اور 21-character layout share کرتے ہیں۔ نام سے جو تاثر ملتا ہے، اس کے برعکس W اب weekly listing کی نشاندہی نہیں کرتا۔ SPX AM-settled root ہے۔ اس میں third Friday contract شامل ہوتا ہے، جس کی settlement value expiration Friday کو index components کے opening prints سے بنتی ہے، جبکہ trading اس سے پچھلے Thursday کو ختم ہو جاتی ہے۔ SPXW PM-settled root ہے، اور calendar کی باقی تمام expirations اس میں شامل ہوتی ہیں۔ ان میں Monday سے Friday تک کی dailies سے لے کر month-end contracts تک شامل ہیں، اور ہر contract اپنی expiration day کے close تک trade ہوتا ہے۔
Calendar بھی اسی بنیاد پر تقسیم ہوتا ہے۔ ہر monthly cycle میں ایک AM-settled third Friday contract SPX root پر ہوتا ہے۔ Index کی ہر دوسری forward date SPXW سے متعلق ہوتی ہے۔ مکمل chain میں عموماً زیادہ تر expirations اسی root کے تحت ہوتی ہیں۔ String خود ان تفصیلات کو ظاہر نہیں کرتی۔ Root صرف ایک hint ہے، جبکہ contract specification حتمی authority ہے۔ دو roots، ایک index، ایک screen، اور settlement mechanics جنہیں AM بمقابلہ PM settled options تفصیل سے بیان کرتی ہے۔
Option symbol آپ کو کیا نہیں بتاتا
چار fields contract کی مکمل شناخت کرتے ہیں، لیکن اس کی تفصیل بہت کم بتاتے ہیں۔ خاص طور پر:
- Multiplier۔ Standard US equity option 100 shares cover کرتا ہے، مگر string میں کوئی field اس کی نشاندہی نہیں کرتی۔ Adjusted series اور mini series مختلف ہوتے ہیں، جبکہ index products اپنے multipliers مقرر کرتے ہیں۔
- Settlement style۔ Symbol میں کہیں یہ نہیں بتایا جاتا کہ settlement AM ہے یا PM، یا cash settlement ہے یا physical delivery۔ Index roots پر convention سے کچھ اشارہ مل سکتا ہے، لیکن صرف contract specification حتمی authority ہوتی ہے۔
- Deliverable۔ Adjustment کے بعد 100 shares کا مفروضہ ختم ہو جاتا ہے، مگر digit کے علاوہ symbol بالکل پہلے جیسا دکھائی دیتا ہے۔
- باقی وقت۔ Date field expiration بتاتی ہے، countdown نہیں۔ اسے days to expiry میں تبدیل کرنے کے لیے آپ کو calendar کے ساتھ خود arithmetic کرنا ہوتی ہے۔
- Liquidity۔ یکساں structure رکھنے والے دو symbols کے volume اور open interest میں کئی گنا فرق ہو سکتا ہے۔
FAQ
Option symbol میں کتنے characters ہوتے ہیں؟
Canonical OSI form میں 21 characters ہوتے ہیں: root کے لیے چھ، date کے لیے چھ، call یا put flag کے لیے ایک، اور strike کے لیے آٹھ۔ چھ characters سے چھوٹے roots کو spaces سے pad کیا جاتا ہے۔ زیادہ تر screens یہ padding ہٹا دیتی ہیں، اس لیے three-letter root عموماً 18-character string کی صورت میں دکھائی دیتا ہے۔
Option symbol میں root کے بعد موجود number کا کیا مطلب ہے؟
یہ ایسے contract کی نشاندہی کرتا ہے جس کی terms اب standard نہیں رہیں۔ OCC کی جانب سے appended digit corporate action کے بعد adjusted series کو identify کرتی ہے، جبکہ 7 ایسے mini contract کی نشاندہی کرتا ہے جو 100 کے بجائے 10 shares cover کرتا ہے۔ Date اور strike fields اسی طریقے سے parse ہوتے ہیں۔
Strike آٹھ digits کا کیوں ہوتا ہے؟
یہ field strike کو dollar کے thousandths میں fixed-width integer کے طور پر محفوظ کرتی ہے۔ اس طرح decimal point کے بغیر ایک tenth of a cent سے $99,999.999 تک کی range cover ہو جاتی ہے۔ Dollars پڑھنے کے لیے آٹھ digits کو 1,000 سے divide کریں: 00007500 کا مطلب $7.50 ہے۔
کیا SPXW، SPX ہی ہے؟
دونوں ایک ہی index کو reference کرتے ہیں اور ایک ہی symbol layout استعمال کرتے ہیں۔ فرق settlement کا ہے۔ SPX contracts Friday morning کے opening prints سے بننے والی value پر settle ہوتے ہیں اور ایک دن پہلے trading بند کر دیتے ہیں۔ SPXW contracts اپنی expiration day کے close تک trade کرتے ہیں اور closing index level پر settle ہوتے ہیں۔
کیا option symbol یہ بتاتا ہے کہ option weekly ہے یا monthly؟
US equities کے لیے نہیں۔ ایک ہی underlying share پر weekly اور monthly options ایک ہی root استعمال کرتے ہیں اور صرف چھ date digits میں مختلف ہوتے ہیں۔ Third Friday convention کسی date کو monthly بناتی ہے، جبکہ index complexes میں اس مقصد کے لیے الگ roots استعمال ہوتے ہیں۔
اس page کے ہر panel کے نیچے ایک expander میں وہ exact SQL موجود ہے جس سے اسے تیار کیا گیا۔ اس طرح آپ دیکھ سکتے ہیں کہ string سے ہر field کیسے نکالی گئی۔ جس symbol کو آپ اس وقت دیکھ رہے ہیں اسے decompose کرنے کے لیے Strasmore terminal پر plain English میں اس کے بارے میں پوچھیں۔