בוט מסחר בגריד בדיקה כנה
בוט גריד קונה בירידות ומוכר בעליות בטווח קבוע. גלה איזו צורת שוק מרוויחה מהמנגנון ואיזו שוברת אותו, עם דוגמאות ממניות אמריקאיות אמיתיות.
בוט מסחר בגריד מציב סולם של פקודות במרווחי מחיר קבועים: קניה בכל שלב מתחת למחיר הנוכחי, מכירה בכל שלב מעליו. בכל פעם שהשוק יורד שלב, הבוט קונה. בכל פעם שהוא עולה חזרה שלב, הבוט מוכר את מה שקנה נמוך יותר. המנגנון קוצר תנודות, והוא צובר פוזיציה פתוחה בכל פעם שהשוק מתרחק מהסולם בכיוון אחד וממשיך.
דף זה מפרק את המנגנון לחלקיו, ואז מודד את שתי צורות השוק שקובעות את תוצאתו. כל פאנל להלן הוא שאילתה שמורה על מחירי מניות אמריקאיות אמיתיות, המקובעת לתאריכים קבועים כך שהנתונים נשארים ניתנים לשחזור.
איך פועל בוט מסחר בגריד
שלושה הגדרות מגדירות גריד: הגבול העליון והתחתון של הטווח, מספר הקווים בתוכו, וגודל ההזמנה בכל קו. המרווח בין הקווים נובע משני הראשונים.
הנה החשבון, תוך שימוש במספרים עגולים שנבחרו לשם בהירות ולא מתוך ציטוט אמיתי כלשהו. נניח שמניה נסחרת סביב 100 דולר ומפעיל קובע גריד מ-95 דולר עד 105 דולר עם אחד-עשר קווים במרווח של דולר אחד ו-100 מניות לקו. המחיר יורד ל-99 דולר ופקודת הקניה הממתינה מתמלאת. המחיר חוזר ל-100 דולר ופקודת המכירה התואמת מתמלאת, סוגרת את הזוג ברווח גולמי של 100 דולר. שתי הפקודות מתחמשות מחדש. שום דבר לא השתנה בחברה באותה שעה. הפוזיציה פשוט השלימה נסיעה הלוך-חזור בין שני שלבים סמוכים.
שתי גרסאות מופיעות בפרויקטי הקוד הפתוח שמסתובבים בפומבי. גריד אריתמטי מרווח קווים בסכום דולרי קבוע. גריד גיאומטרי מרווח אותם באחוז קבוע, מה שמחזיק את הרווח האחוזי לנסיעה הלוך-חזור יציב על פני טווח רחב. התיעוד גם מפריד בין גריד ניטרלי, שמתחיל מאוזן ועובד לשני הכיוונים, לבין גריד לונג, שמתחיל כשהוא מחזיק מלאי ומוכר בעליות.
צורת התשואה ראויה למשפט אחד פשוט. הרווח על נסיעה הלוך-חזור שהושלמה מוגבל לשלב גריד אחד פחות עלויות. הפוזיציה הפתוחה שמצטברת כשהמחיר עוזב את הטווח נושאת ללא מגבלה תואמת.
צורת השוק שגריד צריך
גריד מתוגמל על תנועה, לא על כיוון. שתי מניות יכולות לסיים תקופה באותו מחיר לאחר שכיסו מרחקים שונים בתכלית. חיבור הגודל המוחלט של כל תנועה יומית נותן את המרחק הכולל שעבר. חלוקת התנועה נטו במרחק הזה נותנת יחס יעילות, מדד סטנדרטי לכמה כיווני היה הנתיב. יחס נמוך מתאר נתיב שנדד. יחס גבוה מתאר צעדה ישרה.
ה-SQL המדויק מאחורי כל מספר
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY','KO','PG','JNJ','VZ','MO','XOM','JPM','WMT','NVDA','TSLA','NFLX')
AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2024-01-02') AND toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, dt
),
steps AS (
SELECT ticker, dt, c,
c / lagInFrame(c) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret
FROM daily
)
SELECT ticker,
round(sum(abs(ret)) * 100, 0) AS travel_pct,
round(abs(argMax(c, dt) / argMin(c, dt) - 1) * 100, 1) AS net_move_pct,
round(100 * abs(argMax(c, dt) / argMin(c, dt) - 1) / sum(abs(ret)), 1) AS efficiency_pct
FROM steps
WHERE ret > -0.5 AND ret < 0.5
GROUP BY ticker
ORDER BY efficiency_pctקרא את השורה הראשונה והאחרונה יחד. PG כיסה 527% מתנועה יומית מצטברת וסיים 0.9% מהמקום בו התחיל, יעילות של 0.2%. SPY יושבת בקצה הנגדי ב-14.3%, והופכת 415% של תנועה לתנועה נטו של 59.2%. סולם גריד המוצב על הנתיב הראשון פוגש את השלבים שלו שוב ושוב. אותו סולם המוצב על הנתיב השני נשאר מאחור.
רגוע ותחום-טווח הם תכונות קשורות אך נפרדות. מניה יכולה להיסחף מעלה בצעדים יומיים קטנים מאוד ועדיין להשאיר גריד תקוע, וזו אחת הסיבות לכך שהשמות שנחקרו בספרות אנומליית התנודתיות הנמוכה אינם אוטומטית חומר לגריד.
ספירת הנסיעות הלוך-חזור
יעילות היא עדשה אחת. הכנסת הגריד תלויה במשהו קונקרטי יותר: כמה פעמים המחיר באמת מבקר מחדש ברמה. עיגון לסגירה הראשונה של כל שנה קלנדרית וספירת הפגישות שסגירתן נוחתת בצד השני של אותו עוגן נותנת את מספר החציות שגריד קו בודד היה תופס. קוקה-קולה (KO) היא הנושא כאן, שם צרכני גדול ונזיל מהסוג שתיעוד הגריד נוטה להציג.
ה-SQL המדויק מאחורי כל מספר
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'KO'
AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2019-01-01') AND toDate('2025-12-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
anchored AS (
SELECT toYear(dt) AS year, dt, c,
first_value(c) OVER (PARTITION BY toYear(dt) ORDER BY dt) AS anchor
FROM daily
),
sided AS (
SELECT year, dt, c, anchor,
if(c >= anchor, 1, 0) AS side,
row_number() OVER (PARTITION BY year ORDER BY dt) AS rn,
lagInFrame(if(c >= anchor, 1, 0)) OVER (PARTITION BY year ORDER BY dt) AS prev_side
FROM anchored
)
SELECT year,
countIf(rn > 1 AND side != prev_side) AS crossing_count,
count() AS sessions,
round((argMax(c, dt) / any(anchor) - 1) * 100, 1) AS net_change_pct
FROM sided
GROUP BY year
ORDER BY yearב-2019 הסגירה חצתה את רמת הפתיחה שלה 8 פעמים על פני 252 פגישות, וסיימה את השנה 17.9% מאותה רמה. ב-2025 הספירה הייתה 6 על פני 250 פגישות, עם שינוי נטו של 13%. קו אחד, מניה אחת, וחומר הגלם לגריד משתנה פי כמה משנה לשנה ללא דרך לדעת את הספירה של השנה הבאה מראש.
השונות הזו היא הבעיה השקטה. התשואה המפורסמת של גריד מצוטטת בדרך כלל לנסיעה הלוך-חזור שהושלמה, ומספר הנסיעות הלוך-חזור נקבע על ידי השוק ולא על ידי ההגדרות.
איפה גריד נשבר
למצב הכשל יש צורה ספציפית. קבע גריד בטווח, ואז תן לשוק לעזוב אותו. להלן, התקרה והרצפה הן הסגירות הגבוהות והנמוכות ביותר של עשרים הפגישות הראשונות של 2024, המוחזקות קבועות על פני שלושים החודשים הבאים, כשסגירת החודשית של עוקב S&P 500 מצוירת מולן.
ה-SQL המדויק מאחורי כל מספר
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2024-01-02') AND toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
opening_20 AS (
SELECT c FROM daily ORDER BY dt LIMIT 20
),
band AS (
SELECT min(c) AS grid_low, max(c) AS grid_high FROM opening_20
),
monthly AS (
SELECT toStartOfMonth(dt) AS month_start, argMax(c, dt) AS close_px
FROM daily
GROUP BY month_start
)
SELECT formatDateTime(monthly.month_start, '%Y-%m') AS month,
round(monthly.close_px, 2) AS spy_close,
round(band.grid_high, 2) AS grid_top,
round(band.grid_low, 2) AS grid_bottom
FROM monthly, band
ORDER BY monthly.month_startהרצועה נעה מ-$467.27 עד $491.26. החודש הראשון בסדרה נסגר ב-$482.92, בתוכה. האחרון מבין 30 החודשים נסגר ב-$746.32, הרבה מעל התקרה, והתרשים מראה את הקו עוזב את הרצועה ולעולם לא חוזר.
עבור על מה שהסולם עושה לאורך הנתיב הזה. בעלייה דרך הטווח, הבוט מוכר מלאי שלב אחר שלב, ומפקיד רווח של שלב אחד בכל פעם. מעל התקרה הוא מחזיק מזומנים וצופה. כל נקודה נוספת של העלייה היא רווח שהמפעיל כבר לא משתתף בו, וזו הגרסה הקלה של הכשל.
הגרסה החמורה היא תמונת הראי. המחיר יורד דרך הרצפה והבוט קנה בכל שלב בדרך למטה, כך שהוא כעת מחזיק את סולם המלאי המלא בעלות ממוצעת מעל השוק, כשכל צעד נוסף מרחיב את ההפסד הלא ממומש. טווח שפעם הפיק עסקאות יציבות, קטנות ונראות לעין הופך לפוזיציה מרוכזת אחת. שיווק גריד מתאר זאת כבוט "תקוע"; בדוח ברוקראז' מדובר בדראודאון פתוח ללא יציאה מובנית.
עלויות גדלות עם מספר העסקאות
גריד משלים עסקאות קטנות רבות, וכל אחת משלמת את העלות המלאה של נסיעה הלוך-חזור: הפער (הספרד), בתוספת עמלות או דמי בורסה היכן שהם חלים. מרווח הצעת מחיר-מחיר מבוקש הוא החלק שמושמט לרוב מהחשבון של הגריד, מכיוון שהוא אף פעם לא מופיע בדוח כפריט שורה.
החשבון ההמחשה מהיר. על מניה של 100 דולר עם ספרד של סנט אחד, נסיעה הלוך-חזור שחוצה את הספרד משני הצדדים מוותרת על כשני סנטים, או 0.02% מהערך הנקוב. מול שלב גריד של דולר אחד, זה בערך 2% מהרווח הגולמי לנסיעה. הרחב את הספרד לחמישה סנטים, נתון שגרתי בשם דליל יותר, ואותה נסיעה מוותרת על עשרה סנטים מול דולר גולמי, או 10%. הידוק הגריד לשלבים של עשרה סנטים כדי לתפוס יותר תנודות מקצץ את הרווח הגולמי לנסיעה לעשרה סנטים תוך השארת העלות ללא שינוי, והספרד של חמישה סנטים כעת צורך את כל העסקה.
מערכת יחסים זו קובעת רצפה מתחת למרווח הגריד השימושי: שלבים חייבים להישאר גדולים יחסית לעלויות הנסיעה הלוך-חזור, וככל שהגריד הדוק יותר, כך חלק גדול יותר מהכנסתו שייך למקום המסחר ולא למפעיל.
למה בדיקות לאחור מחמיאות לבוטי גריד
אסטרטגיות גריד מייצרות בדיקות לאחור אטרקטיביות בצורה יוצאת דופן, וארבע סיבות מבניות מסבירות את רוב זה.
- בחירת טווח עם ידע בדיעבד. גבולות שנבחרו לאחר ראיית הנתונים יכילו את הנתונים. גריד שהותאם לתקופה שנעה יראה אחוזי הצלחה גבוהים על אותה תקופה.
- הסולם הלא סגור. בדיקה שנעצרת בתאריך סיום נבחר סופרת לעתים קרובות נסיעות הלוך-חזור ממומשות תוך התייחסות נדיבה למלאי שנותר. החשבונאות הכנה מסמנת את הפוזיציה הפתוחה לשוק ביום האחרון וכוללת את ההפסד הזה בתוצאה.
- הנחות מילוי. פקודות ממתינות מדומות מתמלאות בכל פעם שהמחיר נוגע בהן. תורי הזמנות אמיתיים לא תמיד מתמלאים במגע, והנסיעות שנכשלות במילוי הן באופן לא פרופורציונלי הרווחיות בשווקים מהירים.
- צפיפות פרמטרים. גבולות, מספר קווים, מרווח וגודל הזמנה נותנים ארבע חוגות על סדרת מחירים אחת, וזה מספיק כדי להתאים כמעט כל חלון היסטורי.
ספירות החצייה למעלה הן משקל הנגד לארבעת אלה. הן מגיעות מהיסטוריית מחירים בלבד, ללא הגדרות מצורפות, והן משתנות משנה לשנה באופן שאף בחירת פרמטר לא שולטת בו. כל מי שמעריך טענת גריד יכול לשאול שאלה אחת עליה: על כמה נסיעות הלוך-חזור שהושלמו זה מסתמך, ומאיפה הגיעה הספירה הזו? תקופת תרגול על סימולטור, כשהסולם הפתוח מסומן לשוק בסוף, עונה עליה בכנות רבה יותר מתרשים של נסיעות ממומשות.
שאלות נפוצות
האם בוטי מסחר בגריד באמת מרוויחים כסף?
גריד מרוויח רווח מוגבל על כל נסיעה הלוך-חזור שהושלמה ונושא פוזיציה פתוחה ללא מגבלה כשהמחיר עוזב את הטווח שלו. האם הנסיעות הממומשות גוברות על הפוזיציה הפתוחה בכל תקופה תלוי בכמה השוק התנוד בתוך הטווח הזה, שהיא תכונה של השוק ולא של התוכנה.
אילו תנאי שוק מתאימים לבוט גריד?
המנגנון בנוי למחיר שחוזר שוב ושוב לאותן רמות: מרחק כולל גבוה שעבר ביחס לתנועה נטו. בפאנל שנים-עשר השמות למעלה, יחסי היעילות נעו מ-0.2% בקצה הנודד ל-14.3% בקצה הכיווני, ומנגנון הסולם פוגש את השלבים שלו רק בקצה הראשון.
מה קורה כשהמחיר פורץ מטווח הגריד?
מעל הטווח הבוט מכר את המלאי שלו ויושב במזומן בזמן שהשוק ממשיך בלעדיו. מתחת לטווח הוא מחזיק בכל שלב שקנה בדרך למטה, בעלות ממוצעת מעל המחיר הנוכחי, וכל ירידה נוספת מרחיבה את ההפסד הלא ממומש הזה.
איך מסחר בגריד שונה מממוצע עלות דולרית?
שניהם קונים יותר כשהמחיר יורד, ושם מסתיים הדמיון. ממוצע עלות דולרית מוסיף סכום קבוע בלוח זמנים קבוע ללא כלל יציאה וללא גבול עליון. גריד קונה ומוכר על טריגרים של מחיר בתוך טווח שנבחר מראש, והתנהגותו משתנה לחלוטין ברגע שהמחיר עוזב את הטווח הזה.
האם מרווח גריד הדוק יותר מייצר יותר הכנסה?
מרווח הדוק יותר מעלה את מספר הנסיעות הלוך-חזור ומוריד את הרווח הגולמי על כל אחת, בעוד שעלות הנסיעה הלוך-חזור נשארת זהה. מעבר לנקודה שנקבעה על ידי הספרד, נסיעות נוספות מחסרות מהסך הכולל במקום להוסיף לו.
כל נתון למעלה מגיע משאילתה שמורה ומגורסת על מחירי מניות אמריקאיים אמיתיים; פתח את ה-SQL מתחת לכל פאנל כדי לבדוק אותו, או מדוד תנועה מול תנועה נטו ברשימת שמות משלך בטרמינל סטרסמור.