Strasmore Research
חקירות Matt Connorמאת Matt Connor

מנגנון מניעת מסחר עצמי ואיסור על Wash Trades

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

כיצד פועל מנגנון מניעת מסחר עצמי במנוע ההתאמה

כל פקודה שמגיעה לזירת מסחר נושאת שדות שהמנוע קורא לפני ביצוע ההתאמה: צד (קנייה/מכירה), מחיר, כמות ותוקף הפקודה. מנגנון מניעת מסחר עצמי (Self-match prevention) מוסיף שני שדות נוספים. הראשון הוא מזהה – מספר או מחרוזת המציינים לאיזו פירמה, חשבון או קבוצת אסטרטגיות שייכת הפקודה. השני הוא הוראה המנחה את המנוע כיצד לפעול כאשר שתי פקודות פעילות הנושאות את אותו מזהה עומדות להתבצע זו מול זו.

הבדיקה מתבצעת ברגע שפקודה אגרסיבית מגיעה למחיר של פקודה ממתינה שאיתה היא אמורה להתבצע. ארבע תוצאות הן הנפוצות ביותר:

  • ביטול הפקודה הממתינה. הפקודה הנכנסת ממשיכה אל ספר הפקודות ויכולה להתבצע מול כל מה שנמצא מאחורי הפקודה שבוטלה באותו מחיר.
  • ביטול הפקודה הנכנסת. הפקודה הממתינה שומרת על מיקומה בתור והפקודה האגרסיבית נעלמת.
  • ביטול שתי הפקודות, ההגדרה המחמירה ביותר.
  • הפחתה וביטול. הפקודה הגדולה מוקטנת בגודל הפקודה הקטנה, הקטנה מבוטלת, והיתרה נשארת פעילה.

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

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

מכשיר אחד, ספרים רבים

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

שאילתהזירות מסחר המצטטות ומבצעות עסקאות באותו נייר ערך בטווח של 15 דקות
ה-SQL המדויק מאחורי כל מספר
SELECT
    q.ticker          AS ticker,
    q.quoting_venues  AS quoting_venues,
    t.printing_venues AS printing_venues
FROM
(
    SELECT
        ticker,
        countDistinct(bid_exchange) AS quoting_venues
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
      AND sip_timestamp >= toDateTime('2026-06-10 14:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2026-06-10 14:15:00', 'UTC')
      AND bid_price > 0
    GROUP BY ticker
) AS q
INNER JOIN
(
    SELECT
        ticker,
        countDistinct(exchange) AS printing_venues
    FROM global_markets.stocks_trades
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
      AND sip_timestamp >= toDateTime('2026-06-10 14:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2026-06-10 14:15:00', 'UTC')
    GROUP BY ticker
) AS t ON t.ticker = q.ticker
ORDER BY quoting_venues DESC, ticker
Run this yourself

AAPL משך הצעות מ-16 זירות נפרדות באותו רבע שעה, וביצועים נרשמו ב-17 מהן. השם בעל הנזילות הנמוכה ביותר בלוח עדיין משך 11 זירות ציטוט. נתב פקודות חכם (Smart Order Router) שמפצל פקודות משנה לפי תכנון, יציב את שתי האסטרטגיות שלך בספרים שונים ברוב הזמן, היכן שלא חלה בדיקה ברמת המנוע. פירמות סוגרות את הפער הזה במעלה הזרם, בשכבת ניהול הפקודות, לפני שדבר מה יוצא מהמערכת. פקודות שלך הממתינות בצדדים מנוגדים באותו מחיר בשני ספרים יוצרות גם שוק נעול או מוצלב, הכפוף למערכת חוקים משלו.

כמה התאמות מבצע ספר אחד בסשן

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

שאילתהמספר עסקאות בפרקי זמן של 15 דקות, יום מסחר מלא
ה-SQL המדויק מאחורי כל מספר
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
    count() AS trade_count
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= toDateTime('2026-06-10 08:00:00', 'UTC')
  AND sip_timestamp <  toDateTime('2026-06-11 04:00:00', 'UTC')
GROUP BY et_time
HAVING count() >= 200
ORDER BY et_time
Run this yourself

ב-04:00 שעון מזרח ארה"ב, אותו נכס רשם 9402 עסקאות בחמש-עשרה דקות, וב-19:45 שעון מזרח ארה"ב הוא רשם 1345, לאורך 64 מקטעים שעברו את רף 200 הביצועים. כל ביצוע הוא זוג פקודות שהמנוע חיבר, והבדיקה קוראת את המזהים משני הצדדים לפני שהיא מאפשרת להם להיפגש. כל פקודה שמגיעה לספר היא מועמדת למפגש עם פקודה אחרת מאותו חשבון בהמשך היום.

מה מראה הטייפ כאשר מתבצע מסחר עצמי

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

שאילתהסימני תנאי מסחר (Trade condition flags) ביום מסחר מלא
ה-SQL המדויק מאחורי כל מספר
SELECT
    condition_name,
    print_count,
    round(100 * print_count / sum(print_count) OVER (), 2) AS share_pct
FROM
(
    SELECT
        cc.id        AS condition_id,
        any(cc.name) AS condition_name,
        count()      AS print_count
    FROM
    (
        SELECT toInt32(arrayJoin(conditions)) AS condition_id
        FROM global_markets.stocks_trades
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= toDateTime('2026-06-10 08:00:00', 'UTC')
          AND sip_timestamp <  toDateTime('2026-06-11 04:00:00', 'UTC')
    ) AS f
    INNER JOIN
    (
        SELECT
            toInt32(id)  AS id,
            any(name)    AS name
        FROM global_markets.stocks_condition_codes
        WHERE asset_class = 'stocks'
          AND has(data_types, 'trade')
        GROUP BY id
    ) AS cc ON cc.id = f.condition_id
    GROUP BY condition_id
)
ORDER BY print_count DESC
LIMIT 10
Run this yourself

Odd Lot Trade מכסה 48.34% מהביצועים המסומנים באותו סשן, והלוח מפרט את 10 הדגלים הנפוצים ביותר של היום. קרא את הרשימה ושים לב למה שחסר. היעדר קוד אומר ששתי פקודות הגיעו מאותה פירמה. מסחר עצמי שכן מודפס נראה כמו כל עסקה אחרת באותו מחיר, לכן הפיקוח עליו מתבצע מחוץ לטייפ, על בסיס מזהי המשתתפים שהזירה מחזיקה ומספרי החשבון המצורפים לפקודות.

היכן מסתיימת מניעת מסחר עצמי ומתחיל חוק ה-Wash Trade

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

סעיף 9(a)(1) לחוק ניירות ערך משנת 1934 חל על עסקאות בניירות ערך שאין בהן שינוי בבעלות המוטבת, שבוצעו כדי ליצור מצג שווא של מסחר פעיל. חוק המסחר בסחורות (Commodity Exchange Act) נושא את המקבילה לחוזים עתידיים, וכלל 534 של ה-CME מנסח זאת מחדש בספר הכללים של הבורסה. כלל 5210 של FINRA חל על שניהם עבור ברוקרים-דילרים, והחומר המשלים שלו מתייחס למסחר עצמי ישירות: עסקאות בין שני אלגוריתמים לא קשורים באותה פירמה אינן מהוות הפרה כשלעצמן, והפירמה נדרשת לקיים מדיניות לבחינה וצמצום שלהן.

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

כיצד מפעילים מגדירים זאת: CME, ICE, LME ו-MiFID II

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

ICE מפעילה פונקציונליות למניעת מסחר עצמי, המוגדרת מול מזהה פירמת מסחר ולא פקודה אחר פקודה, עם אותה משפחת תוצאות ביטול. ה-London Metal Exchange מציעה מניעת ביצוע עצמי ב-LMEselect עבור מזהי מסחר של חברים. באירופה, סעיף 17 ל-MiFID II מטיל את חובת המערכות והבקרה על כל חברת השקעות העוסקת במסחר אלגוריתמי, ומכסה בדיקות, פונקציונליות "הריגה" (Kill functionality) ומניעת מסחר לא תקין. סעיף 48 מטיל חובה מקבילה על הזירה עצמה, וכלי מניעה מצד הזירה הפכו לציוד סטנדרטי לצד זאת.

ההגדרה מתבצעת ברמת החשבון או הפירמה ולא ברמת הסמל. גודל משטח האופציות של נכס בסיס אחד מראה מדוע.

שאילתהחוזי אופציות עם נפח מסחר על נכס בסיס אחד, יוני 2026
ה-SQL המדויק מאחורי כל מספר
SELECT
    toString(date)                 AS session_date,
    countDistinct(ticker)          AS contracts_traded,
    countDistinct(strike_price)    AS strikes_traded
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
  AND date >= '2026-06-01'
  AND date <= '2026-06-30'
  AND volume > 0
  AND iv_converged = 1
GROUP BY date
ORDER BY date
Run this yourself

ב-2026-06-01, נכס בסיס אחד נשא 1579 חוזים סחירים בנפרד עם נפח, הפרוסים על פני 112 מחירי מימוש, והלוח מכסה 21 סשנים בעלי מבנה דומה. הגדרת כלל חוזה אחר חוזה היא בלתי אפשרית בכמות כזו. המזהה מוצמד לחשבון במקום זאת, ועובר עם כל פקודה שהחשבון שולח.

מצב הכשל שיומני הביצועים שלך לא יסבירו

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

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

שאלות נפוצות

מהי מניעת מסחר עצמי?

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

האם מסחר עצמי הוא אותו דבר כמו Wash Trade?

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

האם מניעת מסחר עצמי עובדת בין בורסות שונות?

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

מדוע הפקודה שלי בוטלה ללא ביצוע וללא סיבה?

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

אילו זירות דורשות מזהה למניעת מסחר עצמי?

הדרישות משתנות לפי זירה ומוצר. CME מבקשת מזהה בעת הזנת הפקודה, הרשום מראש, בעוד ש-ICE וה-London Metal Exchange מציעות הגדרות משלהן ברמת הפירמה, וזירות אירופיות נושאות בחובות מערכות ובקרה תחת MiFID II. ספר הכללים של הזירה עבור המוצר שאתה סוחר בו הוא הסמכות.