Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

איך להעריך מיקום בתור (Queue Position) מנתוני L2

מיקום בתור קובע אם פקודה פסיבית תזכה במרווח. למד כיצד להעריך את המיקום מנתוני ספר פקודות מצטברים ומתי כדאי לעבור לנתוני MBO כדי לשפר את דיוק הביצוע בשוק.

מיקום בתור (Queue position) הוא המקום שלך בשורה בין הפקודות הממתינות באותו מחיר. בזירות מסחר הפועלות לפי עדיפות מחיר-זמן (price-time priority), המיקום הזה קובע אם פקודה פסיבית תזכה במרווח (spread) או שלא תבוצע כלל. נתוני שוק מצטברים לא יספקו לך את המספר הזה: ספר פקודות מסוג Level 2 מציג את כמות המניות הכוללת בכל מחיר, אך לא את זהותן. להלן הדרך להעריך את המיקום בתור מתוך הנתונים הזמינים לרוב הסוחרים, וכיצד לזהות מתי ההערכה כבר אינה מספקת.

מדוע המיקום בתור הוא כל היתרון

פקודה פסיבית ממתינה בספר הפקודות עד שמישהו אחר יחצה את ה-spread ויבצע עסקה מולה. תחת עדיפות מחיר-זמן, מנוע המסחר מדרג את הפקודות הממתינות לפי מחיר תחילה, ולפי זמן הגעה לאחר מכן. אם כבר קיימות פקודות קנייה (bid) בהיקף של 10,000 מניות במחיר 10.00$ ואתה מוסיף 100 מניות מאחוריהן, אותן 10,000 מניות חייבות להתבצע או להתבטל לפני שיגיע תורך. אם תבטל ותזין מחדש את הפקודה באותו מחיר, תחזור לסוף התור.

הדירוג הזה קובע את הכדאיות הכלכלית. קרוב לחזית התור אתה מבצע עסקאות לעיתים קרובות וגורף את ה-spread בתוספת כל החזר עמלות (rebate) על הזרמת נזילות, נושא הנדון ב-עמלות והחזרים של עושי שוק (maker-taker). קרוב לסוף התור אתה מבצע עסקאות רק לאחר שכל מי שלפניך ביצע, מה שקורה כאשר זרם פקודות חד-צדדי מגיע בהיקף גדול. ביצועים בסוף התור מתרכזים ברגעים שלפני שהמחיר "דורס" את רמת המחיר שלך. אותו מחיר, אותה פקודה, תוצאה עסקית הפוכה.

מה נתוני Level 2 יכולים ואינם יכולים להראות

נתוני Level 1 הם ה-bid וה-ask הטובים ביותר עם הכמות בכל אחד. נתוני Level 2, המכונים גם market by price, מוסיפים עומק: רשימת רמות מחיר עם הכמות הכוללת הממתינה בכל אחת. שניהם נתונים מצטברים, ו-השוואה בין נתוני שוק Level 1 ל-Level 2 מפרטת זאת במלואה. כאשר ה-bid במחיר 10.00$ יורד מ-10,000 מניות ל-8,500, העדכון מדווח על 1,500 מניות שנעלמו. הוא לא מציין אם הן בוצעו בעסקה, אם פקודה אחת עזבה או ארבעים, או היכן הן היו ממוקמות בתור.

ביצועים (executions) הם החצי הגלוי: ה-tape מדפיס כל עסקה עם כמות, כך שאת אלו אתה מחסיר במדויק. השאר הוא ביטולים, ושם מתחיל הניחוש. הלוח להלן מונה הודעות בראש הספר המאוחד מול הדפסות ב-tape עבור מניה סחירה אחת במהלך יום מסחר רגיל, יום רביעי, 10 ביוני 2026.

שאילתההודעות Top of book מול עסקאות ב-tape, AAPL, 10 ביוני 2026
ה-SQL המדויק מאחורי כל מספר
SELECT
    q.et_time                            AS et_time,
    q.quote_updates                      AS quote_updates,
    t.trades                             AS trades,
    round(q.quote_updates / t.trades, 1) AS updates_per_trade
FROM
(
    SELECT
        formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
        count() AS quote_updates
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-06-10 12:00:00'
      AND sip_timestamp <  '2026-06-10 20:00:00'
    GROUP BY et_time
) AS q
INNER JOIN
(
    SELECT
        formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS trade_hour,
        count() AS trades
    FROM global_markets.stocks_trades
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-06-10 12:00:00'
      AND sip_timestamp <  '2026-06-10 20:00:00'
    GROUP BY trade_hour
) AS t ON q.et_time = t.trade_hour
ORDER BY et_time
Run this yourself

השעה 08:00 נמצאת לפני פעמון הפתיחה: ראש הספר השתנה 0.8 פעמים לכל הדפסה שם, פחות הודעות מהדפסות. בתוך יום המסחר הרגיל היחס מתהפך. בשעה 15:00 ראש הספר השתנה 1.6 פעמים לכל הדפסה, לאורך 233433 הודעות באותה שעה בלבד. רוב מה שקורה לרמת מחיר בשוק פתוח הוא פקודות שמגיעות ועוזבות מבלי להתבצע, וכל אירוע כזה מזיז את המיקום שלך בתור בשיעור שאף הזנה מצטברת לא מדווחת.

הנחת הביטול האחיד, והיכן היא מחמיאה לך

הגישה הסטנדרטית הראשונה מניחה שביטולים מתפזרים באופן שווה לאורך התור. נסמן ב-x את העומק היחסי שלך: המניות שלפניך חלקי סך המניות הממתינות במחיר שלך. המודל האחיד קובע שהסיכוי שמניה שבוטלה ישבה לפניך שווה ל-x, כלומר (p(x) = x. אם אתה יושב באמצע תור של 10,000 מניות, ורואה 1,000 מניות מתבטלות ללא הדפסת עסקה, המודל מקדם אותך ב-500 מקומות.

תורים אמיתיים אינם מתנהגים כך. פקודה שכבר ממתינה זמן מה שייכת בדרך כלל למישהו שמוכן להמתין, בעוד שפקודה שנוספה זה עתה סבירה הרבה יותר להיות ציטוט חולף שנעלם תוך שניות. ביטולים מתרכזים לכיוון סוף התור, קרוב אליך ומאחוריך. מתוך אותן 1,000 מניות שבוטלו, אולי 200 ישבו לפניך, אך המודל זיכה אותך ב-500. חזור על כך לאורך כל היום, והתור המדומה מתקדם מהר יותר מהתור האמיתי. השגיאה פועלת לכיוון אחד: יותר ביצועים, ברגעים טובים יותר, מאשר פקודות חיות מקבלות בפועל.

כיצד התורים מתרוקנים

ביטולים מזיזים אותך באופן בלתי נראה. עסקאות מזיזות אותך באופן גלוי, לפי גודל ההדפסות.

שאילתההתפלגות עסקאות AAPL לפי גודל, 10 ביוני 2026
ה-SQL המדויק מאחורי כל מספר
SELECT
    multiIf(size < 100,  'under 100 shares',
            size = 100,  'exactly 100 shares',
            size <= 499, '101 to 499 shares',
            size <= 999, '500 to 999 shares',
                         '1000 shares or more')             AS trade_size_group,
    round(100 * count() / sum(count()) OVER (), 1)          AS share_of_prints_pct,
    round(100 * sum(size) / sum(sum(size)) OVER (), 1)      AS share_of_shares_pct
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-10 14:00:00'
  AND sip_timestamp <  '2026-06-10 20:00:00'
GROUP BY trade_size_group
ORDER BY min(size)
Run this yourself

הדפסות מתחת ל-round lot היו 90% מהספירה ביום זה ו-42.5% מהמניות. בלוקים של אלף מניות ומעלה היו 0.2% מההדפסות ו-19.9% מהנפח. תורים מתרוקנים בנגיסות קטנות, כך שהפער בין מיקום 2,000 למיקום 3,500 הוא מאות הדפסות של המתנה. סימולטור שמעניק ביצוע לאחר שתי עסקאות גדולות דילג על רוב ה-tape.

הפקודה שאינך יכול לראות

הזנות עומק (depth feeds) קטועות. אם אתה מקבל עשר רמות מחיר והפקודה שלך ממתינה ברמה האחת-עשרה, הפקודה שלך נמצאת מחוץ לנתונים: לא הכמות שלפניה, ולא הפקודות שמצטרפות מאחוריה. בנקודה זו אתה ממציא את המספר במקום להעריך אותו. המצב שגרתי ולא חריג, שכן פקודה שלא רודפת אחרי השוק נושרת מהחלק הפנימי של הספר במהירות.

שאילתהה-best bid ורמות המחיר שביקר בהן, AAPL, מרווחים של 15 דקות
ה-SQL המדויק מאחורי כל מספר
SELECT
    formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
    round(avg(toFloat64(bid_price)), 2) AS best_bid,
    uniqExact(bid_price)                AS bid_levels_touched
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-10 14:00:00'
  AND sip_timestamp <  '2026-06-10 20:00:00'
  AND bid_price > 0
GROUP BY et_time
ORDER BY et_time
Run this yourself

בדלי (bucket) ה-10:00 ה-bid הטוב ביותר עמד בממוצע על 290.29$ וביקר ב-187 מחירים שונים בתוך חמש-עשרה דקות. כל אחד מהמחירים הללו הוא רמה נפרדת במניה שנסחרת באגורות, כך שתצוגה של עשר רמות מכסה עשר סנטים של ספר. פקודה שנותרה במחיר אחד לאורך יום מסחר כזה יכולה לבלות פרקי זמן ארוכים מתחת לרמה העמוקה ביותר שבעליה יכול לראות.

היכן המיקום בתור הוא בעל הערך הרב ביותר

המיקום בתור הוא בעל הערך הרב ביותר היכן ששיפור מחיר אינו אפשרי. מניה ש"נעוצה" ב-spread של סנט אחד לא משאירה מקום לקפוץ לתחילת התור עם מחיר טוב יותר: כולם נערמים באותו tick, וזמן ההגעה מכריע את השאר. היכן שה-spread רחב בכמה סנטים, סוחר יכול לעקוף את כל התור עבור סנט אחד, והחלטת המחיר גוברת על התור.

שאילתהמרווח ציטוט ממוצע וזמן במרווח של סנט אחד, אמצע היום, 10 ביוני 2026
ה-SQL המדויק מאחורי כל מספר
SELECT
    ticker                                                AS symbol,
    round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS avg_spread_cents,
    round(100 * countIf(round(toFloat64(ask_price - bid_price) * 100) <= 1) / count(), 1) AS one_cent_pct
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'KO', 'NVDA', 'MSFT', 'BKNG')
  AND sip_timestamp >= '2026-06-10 15:00:00'
  AND sip_timestamp <  '2026-06-10 19:00:00'
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY avg_spread_cents
Run this yourself

לאורך ארבע שעות אמצע יום באותו יום מסחר, המניה ההדוקה ביותר מבין שש, KO, עמדה בממוצע על 1.18 סנטים והציגה spread של סנט אחד ב-82.5% מהעדכונים שלה. הרחבה ביותר, MSFT, עמדה על 8.46 סנטים בממוצע, עם spread של סנט אחד ב-1.1% מהעדכונים. מודל תור שכויל על המניה הראשונה לא אומר דבר מועיל על השנייה. פקודות שממתינות בין הציטוטים, המכוסות ב-פקודות midpoint peg, יוצרות תור משלהן תחת אותם כללים.

ארבעה אבחונים לבדיקה לאחור (backtest) שלך

  1. השווה את שיעור הביצוע המדומה לשיעור הביצוע החי שלך על אותן מניות באותן שעות. סימולטור שמבצע 70% מהפקודות שבוצעו בפועל רק 40% מהזמן מתאר את ההנחה שלך, לא את השוק.
  2. פצל ביצועים מדומים לשתי ערימות: אלו שבהן רמת המחיר שרדה לאחר מכן, ואלו שקרו רק כאשר הרמה התרוקנה לחלוטין. ערימה שנוטה לסוג השני אומרת שהסימולטור מעניק לך ביצועים בדיוק כשהמחיר חוצה אותך.
  3. תחוום את ההנחה. הרץ מחדש עם כל ביטול שנלקח מחזית התור, ולאחר מכן עם כל ביטול שנלקח מהסוף. שתי הרצות אלו הן טווחי השגיאה הכנים סביב כל (p(x שתבחר.
  4. מדוד באיזו תדירות המחיר שלך ישב מחוץ לעומק שההזנה שלך מספקת. ביצועים שם היו מומצאים. הטיית מבט לעתיד בבדיקות לאחור מתארת את אותו כשל מזווית אחרת: תוצאה שנשענת על מידע שלא היה זמין לאסטרטגיה מעולם.

מתי להפסיק למדל ולקנות את נתוני הפקודות

נתוני Market-by-order (MBO) נושאים הודעה עבור כל פקודה בודדת, מרגע הגעתה ועד לרגע ביצועה או ביטולה, כל אחת מתויגת עם מזהה ייחודי. הרץ מחדש את ההזנה הזו והמיקום שלך בתור הוא ספירה ולא הערכה, ברגע שתניח עיכוב ריאלי להגעת הפקודה שלך לזירה. זה עולה יותר מהזנת עומק והרבה יותר כבד לאחסון.

אבחון 3 הוא כלל ההחלטה. אם שני הקצוות (החזית והסוף) מותירים את האסטרטגיה רווחית, הנחת אמצע תספיק. אם האסטרטגיה מרוויחה תחת קצה אחד ומפסידה תחת השני, מודל התור הוא האסטרטגיה עצמה, וקניית הזנת הפקודות היא זולה יותר מהגנה על ניחוש.

זירות מסחר מסוג Pro-rata משנות את השאלה

חלק משווקי החוזים העתידיים והאופציות מפצלים פקודה נכנסת בין הפקודות הממתינות במחיר מסוים באופן יחסי לגודלן ולא לפי סדר הגעה. לזמן יש חשיבות פחותה שם, והגודל המצוטט הופך למנוף: הכפלת הגודל שלך בערך מכפילה את חלקך בכל ביצוע. אופן הכשל משתנה בהתאם, לכיוון של ציטוט גודל גדול ממה שאתה רוצה להחזיק. מדוע פקודות אופציות לא מתבצעות מכסה כיצד זה נראה מהצד הקמעונאי של ספר אופציות.

שאלות נפוצות

מהו מיקום בתור במסחר?

מיקום בתור הוא הדירוג שלך בין הפקודות הממתינות באותו מחיר באותה זירה. בספר פקודות עם עדיפות מחיר-זמן, הפקודות שלפניך חייבות להתבצע או להתבטל לפני שהפקודה שלך תוכל להתבצע.

האם ניתן לחשב מיקום בתור מנתוני Level 2?

לא במדויק. Level 2 מציג כמות כוללת לכל רמת מחיר ללא זהות פקודה, כך שכאשר כמות נעלמת ללא הדפסת עסקה, אינך יכול לדעת אם אותן מניות ישבו לפניך או מאחוריך. ניתן להעריך את המספר ולתחום את ההערכה. המספר המדויק דורש נתוני פקודה-אחר-פקודה.

מדוע שיעורי ביצוע בבדיקות לאחור הם בדרך כלל גבוהים מדי?

ההנחה הנפוצה מפזרת ביטולים באופן שווה לאורך התור, בעוד שביטולים אמיתיים מתרכזים לכיוון הסוף. מודל אחיד מקדם את הפקודה המדומה שלך מהר יותר ממה שהתור האמיתי זז, מה שמתבטא ביותר ביצועים, וטובים יותר, מאשר מסחר חי מספק.

מהם נתוני MBO?

נתוני Market-by-order מספקים לכל פקודה בודדת הודעות משלה, מהגעה ועד ביצוע או ביטול. זו ההזנה שבה המיקום שלך בתור ניתן לספירה ולא למידול, מה שחשוב ביותר לאסטרטגיות שחיות על spread של tick אחד.

האם מיקום בתור חשוב בזירות Pro-rata?

פחות. הקצאת Pro-rata מפצלת פקודה נכנסת בין פקודות ממתינות לפי גודל, כך שהגעה ראשונה לא קונה לך הרבה והגודל המצוטט עושה את העבודה. בדיקה באיזה מודל הקצאה הזירה משתמשת קודמת לכל מידול תור.


כל לוח כאן נושא את ה-SQL שהפיק אותו. שנה את ה-ticker, שנה את התאריך, ושאל את אותה שאלה על המניות שאתה סוחר בהן במסוף Strasmore.