আপনার অপশন অর্ডার কেন পূরণ হচ্ছে না
অপশন অর্ডার পূরণ না হওয়ার কারণ জানুন: এক্সচেঞ্জের priority, pro-rata allocation, reprice হওয়া resting size এবং spread-এর net-price routing।
অপশন অর্ডার সাধারণত কেন পূরণ হয় না, তার কারণ খুঁজতে হয় এমন কিছু প্রক্রিয়ায় যা খুচরা বিনিয়োগকারীর স্ক্রিনে দেখা যায় না: এক্সচেঞ্জের allocation queue-তে আপনার অর্ডার কোথায় আছে, আপনি যে size-এ যোগ দিয়েছেন সেটি এখনও আছে কি না, বাজারের প্রকৃত bid-ask spread কতটা প্রশস্ত, এবং multi-leg অর্ডারের net price আদৌ executable কি না। প্রদর্শিত quote হলো এক মুহূর্ত আগে কেউ যে দামে ট্রেড করতে রাজি ছিল তার একটি snapshot। ওই দামে অর্ডার দিলে আপনি queue-তে ঢোকেন। কিন্তু queue-র সামনে চলে যান না।
অপশন quote কি নিশ্চিত করে যে ওই দামে ট্রেড করা যাবে?
না। Quote হলো দুই দিকের একটি offer। যে পক্ষ এটি দিয়েছে, সে যেকোনো মুহূর্তে তা বাতিল বা reprice করতে পারে। Quote-এর সঙ্গে থাকা size-ও কেবল ওই মুহূর্তের জন্য প্রযোজ্য। সক্রিয়ভাবে quoted underlying-এর ক্ষেত্রে একটি contract প্রতি সেকেন্ডে বহুবার bid ও offer পুনঃপ্রকাশ করে। আমাদের অপশনের bid-ask spread নির্দেশিকা-তে দুই দিক কী বোঝায় তা ব্যাখ্যা করা হয়েছে। Fill নির্ভর করে quote-এর কোনো একটি সংস্করণ কত অল্প সময় টিকে থাকে তার ওপর।
নিচের panel-এ 2:00:00 p.m. ET থেকে শুরু করে June 17, 2026-এর একটি নির্দিষ্ট 30-second window-তে Apple option contract-গুলোর জন্য feed-এ আসা প্রতিটি quote update গণনা করা হয়েছে, second by second।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') AS et_time,
round(count() / 1000, 1) AS quote_updates_k,
round(count() / uniqExact(ticker), 1) AS updates_per_contract
FROM global_markets.cache_options_quotes
WHERE ticker IN
(
SELECT ticker
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = '2026-06-17'
)
AND sip_timestamp >= toDateTime('2026-06-17 18:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-17 18:00:30', 'UTC')
GROUP BY et_time
ORDER BY et_timeপ্রথম সেকেন্ডে ওই contract-গুলোর জন্য feed-এ প্রায় 0.9 thousand quote update এসেছিল। অর্থাৎ ওই এক সেকেন্ডে প্রতি contract-এ প্রায় 1.9টি quote পুনঃপ্রকাশিত হয়েছে। একটি order ticket এত দ্রুত এগোয় না। আপনি click করার পর তা exchange-এ message হিসেবে পৌঁছানোর আগেই যে book-এ অর্ডারটি গিয়ে বসবে, সেটি ইতিমধ্যে বহুবার বদলে গেছে।
সেরা দামে থাকলেই কি আপনি queue-র সামনে চলে যান?
শুধু তাতে নয়। Stock exchange-গুলোতে সাধারণত price-time priority চলে: একই দামে যে অর্ডার আগে এসেছে, সেটিই আগে trade করে। Options exchange-গুলো এর সঙ্গে আরও দুটি নিয়ম যোগ করে। Resting order আটকে যাওয়ার মূল কারণ এখানেই।
প্রথমে public customer order পূরণ হয়। প্রায় সব US options exchange-এ একই দামে resting market maker ও professional order-এর তুলনায় public customer order অগ্রাধিকার পায়। এই অংশটি retail trader-এর পক্ষে যায়।
Customer priority শেষ হলে allocation pro-rata ভিত্তিতে হয়, time order অনুযায়ী নয়। আসা অর্ডারটি resting order-গুলোর মধ্যে তাদের size-এর অনুপাতে ভাগ হয়। অনেক ক্ষেত্রে যে পক্ষ আগে price দিয়েছে, তার জন্য সামান্য অতিরিক্ত priority থাকে। কে কত অংশ পাবে তা arrival time নয়, size নির্ধারণ করে।
এই দুটি নিয়ম একসঙ্গে ধরলে, 500 lot-এর পাশে থাকা 1 lot-কে queue-তে দুই অর্ডারের একটি হিসেবে নয়, 501 contract-এর মধ্যে 1 contract হিসেবে গণনা করা হয়। আসা 100 lot-এর অর্ডার price sweep করলেও ছোট অর্ডারটি মাত্র একটি contract পেতে পারে।
নিচের panel-এ June 17, 2026-এ Apple option-এ print হওয়া প্রতিটি trade-কে trade size অনুযায়ী ভাগ করা হয়েছে। এরপর প্রতিটি bucket-এর দিনের মোট print-এ অংশ এবং দিনের মোট contract-এ অংশের তুলনা করা হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH
(
SELECT count()
FROM global_markets.options_trades
WHERE underlying_symbol = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 00:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
) AS day_prints,
(
SELECT sum(size)
FROM global_markets.options_trades
WHERE underlying_symbol = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 00:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
) AS day_contracts
SELECT
multiIf(size = 1, '1 contract',
size <= 5, '2 to 5',
size <= 20, '6 to 20',
size <= 100, '21 to 100',
'over 100') AS size_bucket,
round(100 * count() / day_prints, 2) AS share_of_trades_pct,
round(100 * sum(size) / day_contracts, 2) AS share_of_volume_pct
FROM global_markets.options_trades
WHERE underlying_symbol = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 00:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
GROUP BY size_bucket
ORDER BY min(size)Single-contract trade দিনের 48.48% print এবং হাতবদল হওয়া contract-এর 7.83% গঠন করেছে। over 100 bucket-এ চিত্রটি উল্টো: 0.44% print-এ দিনের 16.67% volume ছিল। Pro-rata allocation-এ দ্বিতীয় সংখ্যাটিই নির্ধারণ করে আসা অর্ডারের কতটা অংশ কোনো একটি resting order-এ পৌঁছাবে। Market maker-রা নিয়মিত bid ও ask—দুই দিকেই quote দেয় এবং একই সঙ্গে inventory পরিচালনা করে। আমাদের market maker-রা কীভাবে আয় করেন, তার নির্দেশিকা-তে বিষয়টি বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
আমার options order mid-এ কেন পূরণ হচ্ছে না?
Mid হলো একটি গাণিতিক গড়: bid এবং ask যোগ করে 2 দিয়ে ভাগ করা। ওই দামে trade করার বাধ্যবাধকতা কারও নেই। সব সময় যে দুই দাম থাকে, সেগুলো হলো natural—আপনি কিনলে ask এবং বিক্রি করলে bid। Natural ও mid-এর মধ্যকার প্রতিটি দাম হলো একটি negotiation। অপর পক্ষের model যখন midpoint-এর আপনার দিকের দামে contract-টির মূল্য নির্ধারণ করে, অথবা বিপরীত trade করতে চেয়ে দ্বিতীয় কোনো public order আসে, তখন সেই negotiation সম্পন্ন হতে পারে।
এই negotiation কতটা দামের পরিসর জুড়ে হবে, তা market কতটা প্রশস্ত তার ওপর নির্ভর করে। Contract-এর দাম অনুযায়ী এই width ব্যাপকভাবে বদলে যায়। নিচের panel-এ একই 30-second window নিয়ে প্রতিটি Apple options quote-কে contract-এর দামের ভিত্তিতে ভাগ করা হয়েছে। এরপর median quoted spread cent-এ এবং mid-এর শতাংশ হিসেবে দেখানো হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
price_bucket,
round(quantileExact(0.5)(spread) * 100, 1) AS median_spread_cents,
round(quantileExact(0.5)(100 * spread / mid), 1) AS spread_pct_of_mid
FROM
(
SELECT
toFloat64(ask_price) - toFloat64(bid_price) AS spread,
(toFloat64(ask_price) + toFloat64(bid_price)) / 2 AS mid,
multiIf(mid < 0.50, 'under $0.50',
mid < 2.00, '$0.50 to $2',
mid < 5.00, '$2 to $5',
mid < 15.00, '$5 to $15',
'$15 and up') AS price_bucket,
multiIf(mid < 0.50, 1, mid < 2.00, 2, mid < 5.00, 3, mid < 15.00, 4, 5) AS bucket_order
FROM global_markets.cache_options_quotes
WHERE ticker IN
(
SELECT ticker
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = '2026-06-17'
)
AND sip_timestamp >= toDateTime('2026-06-17 18:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-17 18:00:30', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
)
GROUP BY price_bucket
ORDER BY min(bucket_order)under $0.50 bucket-এর contract-এ median spread ছিল 17 cent, যা mid-এর 75%। $15 and up bucket-এর contract-এ spread ছিল 170 cent, বা mid-এর 3.8%। Cent হিসেবে বেশি দামের contract-টির quote বেশি প্রশস্ত। কিন্তু percentage হিসেবে কম দামের contract-টির market অনেক বেশি প্রশস্ত। সেখানে midpoint-এ resting order দেওয়া মানে counterparty-কে সেই spread-এর বড় অংশ ছেড়ে দিতে বলা। Liquidity এবং volatility এই width-কে ভিন্ন ভিন্ন দিকে প্রভাবিত করে। একই underlying-এর দুটি contract-এর আচরণও সম্পূর্ণ আলাদা হতে পারে।
একটি market order বনাম limit order দামের প্রশ্নটি সরিয়ে অন্য একটি প্রশ্ন তৈরি করে। Market order ওই মুহূর্তে book-এ থাকা দামের বিপরীতে trade করে। Thin options series-এ সেই দাম আপনার স্ক্রিনে সর্বশেষ দেখা quote থেকে কয়েক tick দূরে থাকতে পারে।
দুই leg-ই executable দেখালেও spread কেন পূরণ হয় না?
Multi-leg order দুইটি single-leg book-এ বসে না। এটি একটি complex order book-এ যায় এবং net price-এ package হিসেবে match হয়। Exchange এটি অন্য একটি complex order-এর বিপরীতে পূরণ করে। অথবা single-leg book-গুলোর সম্মিলিত দাম আপনার net price-এর চেয়ে ভালো হলে সেগুলোর বিপরীতে পূরণ করে। পুরো package-এর দাম নির্ধারিত না হওয়া পর্যন্ত কোনো ক্ষেত্রেই fill হয় না।
একটি hypothetical two-leg call spread ধরা যাক। Long leg-এ bid $1.20 এবং ask $1.35। Short leg-এ bid $0.60 এবং ask $0.72। Natural দামে package কিনতে খরচ হবে $1.35 minus $0.60, অর্থাৎ $0.75 debit। Natural দামে বিক্রি করলে পাওয়া যাবে $1.20 minus $0.72, অর্থাৎ $0.48 credit। Package-এর net market তাই $0.48 bid থেকে $0.75 ask, আর midpoint $0.615। আলাদা leg দেখে $0.62 দামে trade করা যাবে কি না, তা বোঝা যায় না। Combined book-এর নিজস্ব two-sided market এবং নিজস্ব resting order থাকে।
এর দুটি ফল হয়। Single-leg screen-এ কোনো leg আপনার দামে trade করলেও আপনার spread পূরণ নাও হতে পারে। কারণ আপনার অর্ডারটি শুরু থেকেই ওই book-এ resting ছিল না। Leg-এর দাম ধরে spread price করলে এমন একটি book-এর বিপরীতে price করা হয়, যার অস্তিত্ব নেই।
Zero volume থাকা strike-এ অর্ডার কেন পূরণ হয় না?
কিছুই নষ্ট হয়নি। বেশিরভাগ listed strike বেশিরভাগ দিন trade করে না। Chain-এ exchange যে সব strike খুলেছে, সেগুলোই তালিকাভুক্ত থাকে। এর অধিকাংশ quote করা থাকলেও trade হয় না। কখনও কয়েক সপ্তাহ পর্যন্তও কোনো trade হয় না। Volume আজ হাতবদল হওয়া contract গণনা করে। Open interest এখনও outstanding থাকা position গণনা করে। এই দুটির পার্থক্য আমাদের options volume বনাম open interest ব্যাখ্যায় দেখানো হয়েছে।
নিচের panel-এ outer strike-গুলো কতটা thin হয়ে যায়, তা মাপা হয়েছে। May এবং June 2026-এ expiry হতে 20 থেকে 45 দিন বাকি থাকা প্রতিটি Apple contract নেওয়া হয়েছে। এরপর ওই দিনের underlying price থেকে strike কত দূরে ছিল, তার ভিত্তিতে contract-গুলো ভাগ করা হয়েছে। প্রতিটি ভাগে median daily volume এবং 10 contract-এর কম print হওয়া contract-day-এর অংশ দেখানো হয়েছে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
moneyness_bucket,
round(quantileExact(0.5)(toFloat64(volume)), 0) AS median_daily_volume,
round(100 * countIf(volume < 10) / count(), 1) AS share_under_10_lots_pct
FROM
(
SELECT
abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS gap,
multiIf(gap < 0.02, '0% to 2% from spot',
gap < 0.05, '2% to 5% from spot',
gap < 0.10, '5% to 10% from spot',
gap < 0.20, '10% to 20% from spot',
'more than 20% from spot') AS moneyness_bucket,
multiIf(gap < 0.02, 1, gap < 0.05, 2, gap < 0.10, 3, gap < 0.20, 4, 5) AS bucket_order,
volume
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= '2026-05-01'
AND date < '2026-07-01'
AND days_to_expiry BETWEEN 20 AND 45
AND underlying_close > 0
)
GROUP BY moneyness_bucket
ORDER BY min(bucket_order)0% to 2% from spot contract-এর median daily volume ছিল 354 contract। এর মধ্যে 2% contract-day-এ 10-এর কম contract print হয়েছে। more than 20% from spot contract-এ দৈনিক median volume ছিল 6 contract। সেখানে 55.4% contract-day-এ 10-এর কম contract print হয়েছে। ওই strike-গুলোর একটিতে resting order দিলে এমন flow-এর অপেক্ষায় থাকতে হয়, যা আসছে না। একমাত্র স্থায়ী counterparty হলো সেই market maker, যে প্রথমে strike-টি quote করেছিল।
Order ticket সম্পর্কে এই প্রক্রিয়াগুলোর প্রভাব
- Spread-এর দাম net হিসেবে নির্ধারিত হয়। Complex book package match করে। Single-leg price সেখানে কোনো standing order বহন করে না।
- Mid একটি anchor হিসেবে কাজ করে। প্রশস্ত market-এ সব সময় পাওয়া দুই দাম হলো natural—কেনার ক্ষেত্রে ask এবং বিক্রির ক্ষেত্রে bid।
- Pro-rata fill-এ কে কত অংশ পাবে, তা size নির্ধারণ করে। অনেক বড় order-এর পাশে থাকা 1 lot আসা order-এর আনুপাতিক একটি ছোট অংশ পায়।
- শান্ত strike-এ প্রথম প্রশ্ন অর্ডার নয়, quote নিয়ে। Match করার মতো কোনো flow সেখানে আসছে না।
FAQ
Bid-এ থাকা সত্ত্বেও আমার options limit order কেন পূরণ হচ্ছে না?
Bid-এ যোগ দিলে আপনার অর্ডারটি ওই দামে queue-তে প্রবেশ করে। Options exchange-গুলো fill allocation করে customer status এবং size অনুযায়ী, শুধু arrival time অনুযায়ী নয়। অনেক বড় order-এর পাশে থাকা ছোট order trade হওয়া যেকোনো flow-এর আনুপাতিক অংশ পায়। মাঝারি আকারের print-এ সেই অংশ rounding-এর পর শূন্যও হতে পারে।
Options exchange-গুলো কি arrival order অনুযায়ী অর্ডার পূরণ করে?
বেশিরভাগ ক্ষেত্রে না। একই দামে market maker ও professional order-এর তুলনায় public customer order অগ্রাধিকার পায়। এরপর অবশিষ্ট size সাধারণত pro-rata ভিত্তিতে, প্রতিটি resting order-এর size-এর অনুপাতে ভাগ হয়। কিছু exchange যে পক্ষ আগে price দিয়েছে, তার জন্য অতিরিক্ত priority overlay যোগ করে।
Options order-এ natural price দেওয়ার অর্থ কী?
Natural হলো market-এর আপনার দিকের প্রদর্শিত দাম: আপনি কিনলে ask এবং বিক্রি করলে bid। Natural দামে দেওয়া অর্ডার বর্তমান quote-এর বিপরীতে executable। Mid-এ দেওয়া অর্ডার পূরণ হতে অপর পক্ষের price improve করার অপেক্ষা করতে হয়।
Zero volume থাকা option কখনও fill না হওয়া কি স্বাভাবিক?
হ্যাঁ। বেশিরভাগ listed strike বেশিরভাগ দিন trade হয় না। সেখানে resting order দিলে এমন flow-এর জন্য প্রতিযোগিতা করতে হয়, যা আসছে না। ওই দামে দেখা quote সাধারণত market maker-এর obligation। Fill হবে কি না, তা নির্ভর করে ওই মুহূর্তে market maker সত্যিই সেই দামে trade করতে চায় কি না তার ওপর।
এই panel-গুলো কীভাবে তৈরি করা হয়েছে
দুটি quote panel-এ 2:00:00 p.m. থেকে 2:00:30 p.m. ET পর্যন্ত June 17, 2026-এর একটি নির্দিষ্ট 30-second window ব্যবহার করা হয়েছে। ওই তারিখে daily greeks record থাকা Apple option contract-গুলোতেই বিশ্লেষণ সীমাবদ্ধ রাখা হয়েছে। Window নির্দিষ্ট করে রাখায় post প্রতিবার regenerate হলেও সংখ্যাগুলো অপরিবর্তিত থাকে। Strike census-এ May এবং June 2026-এর contract নেওয়া হয়েছে এবং কোনো volume record না থাকা contract-গুলোও ইচ্ছাকৃতভাবে রাখা হয়েছে। কোনো listed strike কত ঘন ঘন untraded থাকে, panel-টি ঠিক সেটিই মাপে। Stored timestamp UTC-তে রাখা হয় এবং প্রতিটি query-র ভেতরে Eastern time-এ রূপান্তর করা হয়।
উপরের প্রতিটি panel-এর নিচে exact SQL দেওয়া আছে। আপনি যে contract অনুসরণ করেন, সেটিতে একই measurement চালাতে Strasmore terminal-এ plain English-এ প্রশ্নটি করুন।