מנגנון מניעת מסחר עצמי ואיסור על Wash Trades
כיצד פועל מנגנון מניעת מסחר עצמי בתוך מנוע ההתאמה של זירות המסחר ומהם הגבולות המשפטיים המבדילים בין הגנה טכנית לבין ביצוע עבירת Wash Trade האסורה על פי החוק.
כיצד פועל מנגנון מניעת מסחר עצמי במנוע ההתאמה
כל פקודה שמגיעה לזירת מסחר נושאת שדות שהמנוע קורא לפני ביצוע ההתאמה: צד (קנייה/מכירה), מחיר, כמות ותוקף הפקודה. מנגנון מניעת מסחר עצמי (Self-match prevention) מוסיף שני שדות נוספים. הראשון הוא מזהה – מספר או מחרוזת המציינים לאיזו פירמה, חשבון או קבוצת אסטרטגיות שייכת הפקודה. השני הוא הוראה המנחה את המנוע כיצד לפעול כאשר שתי פקודות פעילות הנושאות את אותו מזהה עומדות להתבצע זו מול זו.
הבדיקה מתבצעת ברגע שפקודה אגרסיבית מגיעה למחיר של פקודה ממתינה שאיתה היא אמורה להתבצע. ארבע תוצאות הן הנפוצות ביותר:
- ביטול הפקודה הממתינה. הפקודה הנכנסת ממשיכה אל ספר הפקודות ויכולה להתבצע מול כל מה שנמצא מאחורי הפקודה שבוטלה באותו מחיר.
- ביטול הפקודה הנכנסת. הפקודה הממתינה שומרת על מיקומה בתור והפקודה האגרסיבית נעלמת.
- ביטול שתי הפקודות, ההגדרה המחמירה ביותר.
- הפחתה וביטול. הפקודה הגדולה מוקטנת בגודל הפקודה הקטנה, הקטנה מבוטלת, והיתרה נשארת פעילה.
באף אחד מארבעת המקרים לא מתבצע מסחר. שום דבר לא נרשם בטייפ (Tape), שום דבר לא מופיע ביומן הביצועים, ובמקום זאת מתקבל ביטול יזום על רגל אחת או על שתיהן.
מיקום בתור הוא העלות השקטה. פקודה ממתינה שמבוטלת תחת הוראת "ביטול הוותיקה ביותר" מאבדת את כל מה שצברה בזמן ההמתנה. תחת עדיפות מחיר-זמן, אובדן זה הוא מוחלט: כניסה מחדש מציבה את הפקודה מאחורי כל מי שהצטרף לתור בזמן שהיא המתינה. המדריך שלנו להערכת מיקום בתור מסביר מה שווה המקום הזה בתור.
מכשיר אחד, ספרים רבים
הבדיקה מתבצעת ברמת הזירה. מנוע משווה רק את הפקודות שהוא מחזיק בעצמו. שתי פקודות שלך הממתינות בשני ספרים שונים הן בלתי נראות זו לזו, ושום מנגנון של מניות בארה"ב לא מקשר ביניהן. מניה אמריקאית אחת נסחרת בלוחות רבים בו-זמנית. הלוח להלן מונה זירות ציטוט וביצוע נפרדות עבור שישה שמות מוכרים במהלך חלון זמן של חמש-עשרה דקות בבוקר ה-10 ביוני 2026.
ה-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, tickerAAPL משך הצעות מ-16 זירות נפרדות באותו רבע שעה, וביצועים נרשמו ב-17 מהן. השם בעל הנזילות הנמוכה ביותר בלוח עדיין משך 11 זירות ציטוט. נתב פקודות חכם (Smart Order Router) שמפצל פקודות משנה לפי תכנון, יציב את שתי האסטרטגיות שלך בספרים שונים ברוב הזמן, היכן שלא חלה בדיקה ברמת המנוע. פירמות סוגרות את הפער הזה במעלה הזרם, בשכבת ניהול הפקודות, לפני שדבר מה יוצא מהמערכת. פקודות שלך הממתינות בצדדים מנוגדים באותו מחיר בשני ספרים יוצרות גם שוק נעול או מוצלב, הכפוף למערכת חוקים משלו.
כמה התאמות מבצע ספר אחד בסשן
בדיקת המסחר העצמי נמצאת בנתיב של כל התאמה שמבצע המנוע, ובנכס נזיל הנתיב הזה עמוס כל היום. הלוח להלן מחלק סשן מלא של מניה אחת למקטעים של חמש-עשרה דקות וסופר את הביצועים בכל אחד מהם, תוך שמירה על המקטעים שכללו לפחות 200 ביצועים.
ה-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ב-04:00 שעון מזרח ארה"ב, אותו נכס רשם 9402 עסקאות בחמש-עשרה דקות, וב-19:45 שעון מזרח ארה"ב הוא רשם 1345, לאורך 64 מקטעים שעברו את רף 200 הביצועים. כל ביצוע הוא זוג פקודות שהמנוע חיבר, והבדיקה קוראת את המזהים משני הצדדים לפני שהיא מאפשרת להם להיפגש. כל פקודה שמגיעה לספר היא מועמדת למפגש עם פקודה אחרת מאותו חשבון בהמשך היום.
מה מראה הטייפ כאשר מתבצע מסחר עצמי
מניעת מסחר עצמי לא מותירה עקבות. הטייפ מציג רק את מה שבוצע, וכל ביצוע מגיע עם דגלי מצב: קודים שהזירה המדווחת מצמידה כדי לתאר כיצד התבצעה העסקה. הלוח להלן מפרק סשן מלא של מניה אחת לפי דגלים אלו.
ה-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 10Odd 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 מטיל חובה מקבילה על הזירה עצמה, וכלי מניעה מצד הזירה הפכו לציוד סטנדרטי לצד זאת.
ההגדרה מתבצעת ברמת החשבון או הפירמה ולא ברמת הסמל. גודל משטח האופציות של נכס בסיס אחד מראה מדוע.
ה-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ב-2026-06-01, נכס בסיס אחד נשא 1579 חוזים סחירים בנפרד עם נפח, הפרוסים על פני 112 מחירי מימוש, והלוח מכסה 21 סשנים בעלי מבנה דומה. הגדרת כלל חוזה אחר חוזה היא בלתי אפשרית בכמות כזו. המזהה מוצמד לחשבון במקום זאת, ועובר עם כל פקודה שהחשבון שולח.
מצב הכשל שיומני הביצועים שלך לא יסבירו
כך זה נראה בפועל. הוראת "ביטול החדשה ביותר" מחסלת את הפקודה שזה עתה שלחת, עם הגעתה, לפני שהיא יכולה להתבצע. מתוך הבוט, הרצף נקרא כפקודה חדשה ואחריה ביטול שאף אחד לא ביקש. אין ביצוע, אין דחייה, ואין מחרוזת שגיאה המציינת סיבה, לכן מפעילים שנתקלים בזה בפעם הראשונה נוטים לחפש באג בנתיב הביטול שלהם.
שני הרגלים הופכים זאת לקריא. רשום את הודעות מצב הפקודה של הזירה כפי שהן, במקום סיכום מנורמל, שכן סיבת המניעה מופיעה בדרך כלל כשדה בהודעה זו. התרע על כל ביטול שהקוד שלך לא יזם. התראה זו שייכת למפסקי הזרם של המסחר האוטומטי שלך, שכן הכשל הוא מאותה מחלקה: הזירה שינתה את מצב הפקודה שלך והתהליך שלך המשיך כאילו לא קרה דבר.
שאלות נפוצות
מהי מניעת מסחר עצמי?
בדיקה של מנוע התאמה העוצרת שתי פקודות הנושאות את אותו מזהה פירמה או חשבון מלהתבצע זו מול זו. כאשר הן עומדות להתבצע, המנוע מבטל את הפקודה הממתינה, את הפקודה הנכנסת, או את שתיהן, בהתאם להוראה המצורפת לפקודה.
האם מסחר עצמי הוא אותו דבר כמו Wash Trade?
לא. מסחר עצמי הוא כל ביצוע בין שתי פקודות של אותו בעל מוטב. Wash Trade הוא מסחר עצמי שהוזן ללא סיכון שוק אמיתי ומתוך כוונה ליצור מצג שווא של פעילות. מסחר עצמי לא מכוון בין אלגוריתמים לא קשורים מטופל אחרת ממסחר מתואם, ופירמות עדיין נדרשות לנטר אותם.
האם מניעת מסחר עצמי עובדת בין בורסות שונות?
לא. כל מנוע התאמה מחיל את הבדיקה רק על פקודות בספר שלו. שתי פקודות מפירמה אחת הממתינות בשתי זירות יכולות להתבצע זו מול זו, מה שמשאיר את העבודה הזו לבדיקות טרום-המסחר של הפירמה עצמה מעל הזירות.
מדוע הפקודה שלי בוטלה ללא ביצוע וללא סיבה?
הוראת "ביטול החדשה ביותר" במניעת מסחר עצמי היא מועמד אחד: הזירה ביטלה את הפקודה עם הגעתה, לפני שהיא יכלה להתבצע מול פקודה ממתינה הנושאת את המזהה שלך. הסיבה מופיעה בדרך כלל כשדה בהודעת הביטול של הזירה ולא כדחייה.
אילו זירות דורשות מזהה למניעת מסחר עצמי?
הדרישות משתנות לפי זירה ומוצר. CME מבקשת מזהה בעת הזנת הפקודה, הרשום מראש, בעוד ש-ICE וה-London Metal Exchange מציעות הגדרות משלהן ברמת הפירמה, וזירות אירופיות נושאות בחובות מערכות ובקרה תחת MiFID II. ספר הכללים של הזירה עבור המוצר שאתה סוחר בו הוא הסמכות.