grid trading bot paano gumagana
Ang grid trading bot ay bumibili sa bawat baitang pababa at nagbebenta pataas sa loob ng fixed range. Alamin ang market shape na nagbabayad sa mekanismo at ang sumisira dito.
Ang grid trading bot ay naglalagay ng hagdan ng mga order sa mga fixed price intervals: isang buy sa bawat baitang sa ibaba ng kasalukuyang presyo, isang sell sa bawat baitang sa itaas nito. Sa bawat pagbaba ng merkado, bumibili ang bot. Sa bawat pag-akyat pabalik, ibinebenta ng bot ang binili nito sa mas mababang presyo. Ang mekanismong ito ay kumukuha ng oscillation, at nag-iipon ito ng open position kapag ang merkado ay lumayo mula sa hagdan sa isang direksyon at patuloy na gumagalaw.
Pinaghiwa-hiwalay ng pahinang ito ang makinarya, pagkatapos ay sinusukat ang dalawang hugis ng merkado na nagdedesisyon sa kinalabasan nito. Ang bawat panel sa ibaba ay isang stored query sa totoong presyo ng US equity, na naka-pin sa mga fixed date para manatiling reproducible ang mga numero.
Paano gumagana ang isang grid trading bot
Tatlong setting ang nagtatakda ng isang grid: ang upper at lower bounds ng range, ang bilang ng lines sa loob nito, at ang order size sa bawat line. Ang spacing sa pagitan ng mga lines ay sumusunod mula sa unang dalawa.
Narito ang arithmetic, gamit ang round numbers na pinili para sa kalinawan kaysa sa anumang tunay na quote. Ipagpalagay na ang isang stock ay nagte-trade malapit sa $100 at ang isang operator ay nag-set ng grid mula $95 hanggang $105 na may labing-isang lines na isang dolyar ang pagitan at 100 shares bawat line. Bumaba ang presyo sa $99 at napuno ang resting buy. Bumalik ang presyo sa $100 at napuno ang matching sell, na nagsara ng pares para sa gross na $100. Parehong nag-re-arm ang mga order. Walang nagbago sa kumpanya sa oras na iyon. Ang posisyon ay nakatapos lang ng round trip sa pagitan ng dalawang magkatabing baitang.
Dalawang variant ang lumalabas sa mga open-source project na umiikot sa publiko. Ang arithmetic grid ay naglalagay ng mga lines sa pamamagitan ng fixed dollar amount. Ang geometric grid ay naglalagay ng mga ito sa pamamagitan ng fixed percentage, na nagpapanatili ng percentage profit per round trip na steady sa malawak na range. Hinihiwalay din ng documentation ang neutral grid, na nagsisimulang flat at gumagana sa parehong direksyon, mula sa long grid, na nagsisimulang may hawak na inventory at nagbebenta sa paglakas.
Ang payoff shape ay nararapat sa isang simpleng pangungusap. Ang profit sa isang kumpletong round trip ay naka-cap sa isang grid step minus costs. Ang open position na nabubuo kapag ang presyo ay umalis sa range ay walang dala na matching cap.
Ang hugis ng merkado na kailangan ng isang grid
Ang grid ay binabayaran sa paglalakbay, hindi sa direksyon. Dalawang stock ay maaaring matapos ang isang period sa parehong presyo pagkatapos na masakop ang magkaibang-magkaibang distansya. Ang pagdaragdag ng absolute size ng bawat daily move ay nagbibigay ng total distance na nilakbay. Ang paghahati ng net move sa distansyang iyon ay nagbibigay ng efficiency ratio, isang standard na sukatan kung gaano ka-directional ang isang path. Ang mababang ratio ay naglalarawan ng isang path na gumala. Ang mataas na ratio ay naglalarawan ng isang tuwid na martsa.
Ang eksaktong SQL sa likod ng bawat numero
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_pctBasahin ang una at huling rows nang magkasama. PG ay sumaklaw sa 527% ng cumulative daily movement at natapos 0.9% mula sa kung saan ito nagsimula, isang efficiency na 0.2%. SPY ay nasa kabilang dulo sa 14.3%, na ginagawang 415% ng paglalakbay ang isang 59.2% net move. Ang isang grid ladder na inilagay sa unang path ay nakakatagpo ng sarili nitong mga baitang nang paulit-ulit. Ang parehong ladder na inilagay sa pangalawang path ay naiiwan.
Ang calm at range-bound ay magkaugnay ngunit magkaibang mga katangian. Ang isang stock ay maaaring mag-drift pataas sa napakaliit na daily increments at maiwan pa rin ang isang grid, na isang dahilan kung bakit ang mga pangalan na pinag-aralan sa low-volatility anomaly literature ay hindi awtomatikong grid material.
Pagbibilang ng mga round trip
Ang efficiency ay isang lens. Ang grid income ay nakadepende sa isang bagay na mas konkreto: kung gaano karaming beses ang presyo ay aktwal na bumalik sa isang level. Ang pag-angkla sa unang close ng bawat calendar year at pagbibilang ng mga session na ang close ay nasa kabilang panig ng angkla na iyon ay nagbibigay ng bilang ng mga crossings na mahuhuli ng isang grid line. Ang Coca-Cola (KO) ang paksa dito, isang malaki, liquid consumer name na uri na madalas itampok ng grid documentation.
Ang eksaktong SQL sa likod ng bawat numero
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 yearSa 2019 ang close ay tumawid sa sarili nitong opening level ng 8 beses sa 252 sessions, na nagtapos ng taon 17.9% mula sa level na iyon. Sa 2025 ang bilang ay 6 sa 250 sessions, na may net change na 13%. Isang line, isang stock, at ang raw material para sa isang grid ay nag-iiba ng ilang beses bawat taon na walang paraan upang malaman ang bilang ng darating na taon nang maaga.
Ang variability na iyon ang tahimik na problema. Ang advertised return ng isang grid ay karaniwang sinisipi bawat kumpletong round trip, at ang bilang ng mga round trip ay itinakda ng merkado sa halip na ng mga setting.
Kung saan nasisira ang isang grid
Ang failure mode ay may partikular na hugis. Ayusin ang isang grid sa isang range, pagkatapos ay hayaang iwanan ito ng merkado. Sa ibaba, ang ceiling at floor ay ang pinakamataas at pinakamababang closes ng unang dalawampung session ng 2024, na pinanatiling flat sa sumunod na tatlumpung buwan, kasama ang monthly close ng S&P 500 tracker na iginuhit laban sa kanila.
Ang eksaktong SQL sa likod ng bawat numero
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_startAng band ay tumatakbo mula $467.27 hanggang $491.26. Ang unang buwan sa serye ay nagsara sa $482.92, sa loob nito. Ang huli sa 30 na buwan ay nagsara sa $746.32, malayo sa itaas ng ceiling, at ang chart ay nagpapakita ng linya na umaalis sa band at hindi na bumabalik.
Lakbayin kung ano ang ginagawa ng ladder sa landas na iyon. Tumataas sa loob ng range, ang bot ay nagbebenta ng inventory baitang-baitang, na nagba-bank ng isang hakbang ng profit sa bawat pagkakataon. Sa itaas ng ceiling ay may hawak itong cash at nanonood. Bawat karagdagang punto ng pag-akyat ay isang kita na hindi na sinalihan ng operator, na siyang mild na bersyon ng failure.
Ang severe na bersyon ay ang mirror image. Bumagsak ang presyo sa floor at ang bot ay bumili sa bawat baitang pababa, kaya hawak na nito ngayon ang buong ladder ng inventory sa average cost na mas mataas sa merkado, na ang bawat karagdagang hakbang ay nagpapalaki ng unrealized loss. Ang isang range na minsang gumawa ng steady, maliit, at visibly successful na trades ay nagiging isang concentrated position. Inilalarawan ng grid marketing ito bilang ang bot ay "stuck"; sa isang brokerage statement ito ay isang open drawdown na walang built-in na exit.
Ang mga gastos ay lumalaki sa bilang ng trade
Ang isang grid ay kumukumpleto ng maraming maliliit na trades, at bawat isa ay nagbabayad ng buong halaga ng isang round trip: ang spread, kasama ang commissions o exchange fees kung saan naaangkop. Ang bid-ask spread ang piraso na madalas naiiwan sa grid math, dahil hindi ito lumalabas sa isang statement bilang line item.
Ang illustrative arithmetic ay mabilis. Sa isang $100 stock na may isang-cent na spread, ang isang round trip na tumatawid sa spread sa magkabilang panig ay nagbibigay ng humigit-kumulang dalawang sentimo, o 0.02% ng notional. Laban sa isang dolyar na grid step, iyon ay humigit-kumulang 2% ng gross profit bawat trip. Palawakin ang spread sa limang sentimo, isang routine figure sa isang mas manipis na pangalan, at ang parehong trip ay nagbibigay ng sampung sentimo laban sa isang dolyar ng gross, o 10%. Ang paghigpit ng grid sa sampung-sentimo na steps upang mahuli ang mas maraming oscillation ay pumutol sa gross bawat trip sa sampung sentimo habang iniiwan ang gastos na hindi nagbabago, at ang limang-sentimo na spread ay kumokonsumo na ngayon ng buong trade.
Ang relasyong iyon ay nagtatakda ng floor sa ilalim ng kapaki-pakinabang na grid spacing: ang mga steps ay dapat manatiling malaki kaugnay sa round-trip costs, at mas mahigpit ang grid, mas marami sa kita nito ang pag-aari ng venue kaysa sa operator.
Bakit pinapakinis ng mga backtest ang grid bots
Ang mga grid strategy ay gumagawa ng hindi pangkaraniwang kaakit-akit na backtests, at apat na structural reasons ang nagpapaliwanag ng karamihan dito.
- Range selection na may hindsight. Ang mga bound na pinili pagkatapos makita ang data ay maglalaman ng data. Ang isang grid na inangkop sa isang period na naka-range ay magpapakita ng mataas na hit rate sa period na iyon.
- Ang hindi nakasara na ladder. Ang isang test na huminto sa isang piniling end date ay madalas na nagbibilang ng mga realized round trip habang tinatrato ang natitirang inventory nang maluwag. Ang tapat na accounting ay mina-marka ang open position sa market sa huling araw at isinasama ang loss na iyon sa resulta.
- Fill assumptions. Ang mga simulated resting order ay napupuno kapag hinawakan sila ng presyo. Ang mga totoong queue ay hindi laging napupuno sa paghawak, at ang mga trip na nabigong mapuno ay hindi proporsyonal ang mga kumikitang trip sa mabilis na merkado.
- Parameter density. Ang bounds, line count, spacing, at order size ay nagbibigay ng apat na dial sa isang price series, na sapat upang magkasya sa halos anumang historical window.
Ang crossing counts sa itaas ay ang counterweight sa lahat ng apat. Ang mga ito ay nagmula sa price history lamang, walang nakakabit na settings, at nag-iiba sila taon-taon sa paraang walang parameter choice ang makokontrol. Kahit sino na nag-e-evaluate ng grid claim ay maaaring magtanong ng isang tanong dito: ilang kumpletong round trip ang nakadepende nito, at saan nanggaling ang bilang na iyon? Ang isang period ng practice sa isang simulator, kasama ang open ladder na minarkahan sa market sa dulo, ay sumasagot dito nang mas tapat kaysa sa isang chart ng realized trips.
FAQ
Kumikita ba talaga ang grid trading bots?
Ang isang grid ay kumikita ng capped profit sa bawat kumpletong round trip at nagdadala ng uncapped open position kapag ang presyo ay umalis sa range nito. Kung ang realized trips ay mas matimbang kaysa sa open position sa anumang period ay nakadepende sa kung gaano nag-oscillate ang merkado sa loob ng range na iyon, na isang katangian ng merkado sa halip ng software.
Anong mga kondisyon ng merkado ang angkop para sa isang grid bot?
Ang mekanismo ay ginawa para sa isang presyo na paulit-ulit na bumibisita sa parehong mga level: mataas na total distance na nilakbay kaugnay sa net movement. Sa twelve-name panel sa itaas, ang efficiency ratios ay tumakbo mula 0.2% sa wandering end hanggang 14.3% sa directional end, at ang ladder mechanism ay nakakatagpo ng sarili nitong mga baitang lamang sa unang end.
Ano ang mangyayari kapag ang presyo ay lumabas sa grid range?
Sa itaas ng range ang bot ay naibenta na ang inventory nito at nakaupo sa cash habang ang merkado ay nagpapatuloy nang wala ito. Sa ibaba ng range ay hawak nito ang bawat baitang na binili nito pababa, sa average cost na mas mataas sa kasalukuyang presyo, at bawat karagdagang pagbaba ay nagpapalaki ng unrealized loss na iyon.
Paano naiiba ang grid trading sa dollar-cost averaging?
Parehong bumibili ng mas marami habang bumabagsak ang presyo, at doon nagtatapos ang pagkakatulad. Ang Dollar-cost averaging ay nagdaragdag ng fixed amount sa isang fixed schedule na walang exit rule at walang upper bound. Ang isang grid ay bumibili at nagbebenta sa price triggers sa loob ng isang range na pinili nang maaga, at ang pag-uugali nito ay ganap na nagbabago kapag ang presyo ay umalis sa range na iyon.
Nagbubunga ba ng mas maraming kita ang mas mahigpit na grid spacing?
Ang mas mahigpit na spacing ay nagtataas ng bilang ng mga round trip at nagpapababa ng gross profit sa bawat isa, habang ang round-trip cost ay nananatiling pareho. Lampas sa isang punto na itinakda ng spread, ang mga idinagdag na trip ay nagbabawas mula sa kabuuan sa halip na nagdaragdag dito.
Ang bawat figure sa itaas ay nagmula sa isang stored, versioned query sa totoong equity prices; buksan ang SQL sa ilalim ng anumang panel upang suriin ito, o sukatin ang travel laban sa net movement sa iyong sariling listahan ng mga pangalan sa Strasmore terminal.