bot grid trading cara kerja kelebihan kekurangan
Bot grid membeli di setiap langkah turun dan menjual di setiap langkah naik dalam rentang tetap. Lihat bentuk pasar yang menguntungkan mekanisme ini dan yang merusaknya.
Bot grid menempatkan tangga pesanan pada interval harga tetap: beli di setiap anak tangga di bawah harga saat ini, jual di setiap anak tangga di atasnya. Setiap kali pasar turun satu langkah, bot membeli. Setiap kali naik kembali, bot menjual apa yang dibeli lebih rendah. Mekanisme ini memanen osilasi, dan mengakumulasi posisi terbuka setiap kali pasar bergerak menjauh dari tangga dalam satu arah dan terus berlanjut.
Halaman ini membedah mekanisme tersebut, lalu mengukur dua bentuk pasar yang menentukan hasilnya. Setiap panel di bawah adalah kueri tersimpan atas harga saham AS riil, yang dikunci pada tanggal tetap agar angka-angka tetap dapat direproduksi.
Cara kerja bot grid trading
Tiga pengaturan mendefinisikan sebuah grid: batas atas dan bawah rentang, jumlah garis di dalamnya, dan ukuran pesanan di setiap garis. Jarak antar garis mengikuti dari dua pengaturan pertama.
Berikut aritmetikanya, menggunakan angka bulat yang dipilih untuk kejelasan, bukan dari kutipan nyata mana pun. Misalkan sebuah saham diperdagangkan di dekat $100 dan seorang operator menetapkan grid dari $95 hingga $105 dengan sebelas garis berjarak satu dolar dan 100 saham per garis. Harga turun ke $99 dan pesanan beli yang tertahan terisi. Harga kembali ke $100 dan pesanan jual yang cocok terisi, menutup pasangan untuk laba kotor $100. Kedua pesanan dipasang kembali. Tidak ada yang berubah pada perusahaan dalam satu jam itu. Posisi hanya menyelesaikan satu putaran penuh antara dua anak tangga yang berdekatan.
Dua varian muncul dalam proyek sumber terbuka yang beredar secara publik. Grid aritmetika memberi jarak garis dengan jumlah dolar tetap. Grid geometris memberi jarak dengan persentase tetap, yang menjaga persentase laba per putaran penuh tetap stabil di berbagai rentang. Dokumentasi juga memisahkan grid netral, yang mulai datar dan bekerja di kedua arah, dari grid panjang, yang mulai memegang inventaris dan menjual saat harga naik.
Bentuk imbal hasil layak mendapat satu kalimat lugas. Laba pada putaran penuh yang selesai dibatasi pada satu langkah grid dikurangi biaya. Posisi terbuka yang terakumulasi saat harga meninggalkan rentang tidak memiliki batasan yang sesuai.
Bentuk pasar yang dibutuhkan grid
Grid dibayar oleh pergerakan, bukan oleh arah. Dua saham dapat menyelesaikan suatu periode pada harga yang sama setelah menempuh jarak yang sangat berbeda. Menjumlahkan ukuran absolut setiap pergerakan harian memberikan total jarak yang ditempuh. Membagi pergerakan bersih dengan jarak itu memberikan rasio efisiensi, ukuran standar seberapa directional suatu jalur. Rasio rendah menggambarkan jalur yang berkelok-kelok. Rasio tinggi menggambarkan pergerakan lurus.
SQL tepat di balik setiap angka
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_pctBaca baris pertama dan terakhir bersama-sama. PG mencakup 527% dari pergerakan harian kumulatif dan berakhir 0.9% dari titik awalnya, dengan efisiensi 0.2%. SPY berada di ujung yang berlawanan pada 14.3%, mengubah 415% pergerakan menjadi pergerakan bersih 59.2%. Tangga grid yang ditempatkan pada jalur pertama akan bertemu dengan anak tangganya sendiri berulang kali. Tangga yang sama pada jalur kedua akan ditinggalkan.
Tenang dan terikat rentang adalah properti yang terkait namun berbeda. Sebuah saham dapat naik perlahan dalam kenaikan harian yang sangat kecil dan tetap membuat grid terdampar, yang merupakan salah satu alasan mengapa nama-nama yang dipelajari dalam literatur anomali volatilitas rendah tidak secara otomatis menjadi materi grid.
Menghitung putaran penuh
Efisiensi adalah satu lensa. Pendapatan grid bergantung pada sesuatu yang lebih konkret: berapa kali harga benar-benar mengunjungi kembali suatu level. Berlabuh pada penutupan pertama setiap tahun kalender dan menghitung sesi yang penutupannya berada di sisi berlawanan dari jangkar itu memberikan jumlah persilangan yang akan ditangkap oleh satu garis grid. Coca-Cola (KO) adalah subjek di sini, nama konsumen besar dan likuid yang cenderung ditampilkan dalam dokumentasi grid.
SQL tepat di balik setiap angka
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 yearPada 2019 penutupan melintasi level pembukaannya sendiri sebanyak 8 kali dalam 252 sesi, mengakhiri tahun 17.9% dari level itu. Pada 2025 hitungannya adalah 6 selama 250 sesi, dengan perubahan bersih 13%. Satu garis, satu saham, dan bahan baku untuk grid bervariasi beberapa kali lipat dari tahun ke tahun tanpa cara untuk mengetahui hitungan tahun yang akan datang sebelumnya.
Variabilitas itulah masalah yang tenang. Imbal hasil yang diiklankan dari grid biasanya dikutip per putaran penuh yang selesai, dan jumlah putaran penuh ditentukan oleh pasar, bukan oleh pengaturan.
Di mana grid rusak
Mode kegagalan memiliki bentuk yang spesifik. Tetapkan grid pada suatu rentang, lalu biarkan pasar meninggalkannya. Di bawah, langit-langit dan lantai adalah penutupan tertinggi dan terendah dari dua puluh sesi pertama tahun 2024, dipertahankan datar selama tiga puluh bulan berikutnya, dengan penutupan bulanan pelacak S&P 500 digambar terhadapnya.
SQL tepat di balik setiap angka
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_startPita berjalan dari $467.27 hingga $491.26. Bulan pertama dalam rangkaian ditutup pada $482.92, di dalamnya. Bulan terakhir dari 30 bulan ditutup pada $746.32, jauh di atas langit-langit, dan grafik menunjukkan garis meninggalkan pita dan tidak pernah kembali.
Jelajahi apa yang dilakukan tangga di sepanjang jalur itu. Naik melalui rentang, bot menjual inventaris anak tangga demi anak tangga, mengantongi satu langkah laba setiap kali. Di atas langit-langit, ia memegang uang tunai dan menonton. Setiap poin kenaikan lebih lanjut adalah keuntungan yang tidak lagi diikuti operator, yang merupakan versi ringan dari kegagalan.
Versi parahnya adalah bayangan cermin. Harga jatuh menembus lantai dan bot telah membeli di setiap anak tangga dalam perjalanan turun, sehingga sekarang memegang seluruh tangga inventaris dengan biaya rata-rata di atas pasar, dengan setiap langkah tambahan memperlebar kerugian yang belum direalisasi. Rentang yang dulunya menghasilkan perdagangan yang stabil, kecil, dan terlihat sukses berubah menjadi satu posisi terkonsentrasi. Pemasaran grid menggambarkan ini sebagai bot yang "terjebak"; pada laporan pialang, ini adalah drawdown terbuka tanpa jalan keluar bawaan.
Biaya meningkat seiring jumlah perdagangan
Grid menyelesaikan banyak perdagangan kecil, dan masing-masing membayar biaya penuh satu putaran penuh: spread, ditambah komisi atau biaya bursa jika berlaku. Spread bid-ask adalah bagian yang paling sering dihilangkan dari matematika grid, karena tidak pernah muncul di laporan sebagai item baris.
Aritmetika ilustratif cepat. Pada saham $100 dengan spread satu sen, satu putaran penuh yang melintasi spread di kedua sisi menyerahkan sekitar dua sen, atau 0,02% dari nosional. Terhadap langkah grid satu dolar, itu sekitar 2% dari laba kotor per perjalanan. Lebarkan spread menjadi lima sen, angka rutin pada nama yang lebih tipis, dan perjalanan yang sama menyerahkan sepuluh sen terhadap satu dolar laba kotor, atau 10%. Memperketat grid menjadi langkah sepuluh sen untuk menangkap lebih banyak osilasi memotong laba kotor per perjalanan menjadi sepuluh sen sambil membiarkan biaya tidak berubah, dan spread lima sen sekarang mengkonsumsi seluruh perdagangan.
Hubungan itu menetapkan lantai di bawah jarak grid yang berguna: langkah harus tetap besar relatif terhadap biaya putaran penuh, dan semakin ketat grid, semakin banyak pendapatannya yang menjadi milik venue daripada operator.
Mengapa backtest membuat bot grid terlihat lebih baik
Strategi grid menghasilkan backtest yang sangat menarik, dan empat alasan struktural menjelaskan sebagian besarnya.
- Pemilihan rentang dengan melihat ke belakang. Batas yang dipilih setelah melihat data akan berisi data tersebut. Grid yang disesuaikan dengan periode yang terikat rentang akan menunjukkan tingkat keberhasilan yang tinggi pada periode itu.
- Tangga yang tidak tertutup. Tes yang berhenti pada tanggal akhir yang dipilih sering menghitung putaran penuh yang terealisasi sambil memperlakukan inventaris sisa secara longgar. Akuntansi yang jujur menandai posisi terbuka ke pasar pada hari terakhir dan memasukkan kerugian itu ke dalam hasil.
- Asumsi pengisian. Pesanan tunggu yang disimulasikan terisi setiap kali harga menyentuhnya. Antrian nyata tidak selalu terisi saat disentuh, dan perjalanan yang gagal terisi secara tidak proporsional adalah yang menguntungkan di pasar cepat.
- Kepadatan parameter. Batas, jumlah garis, jarak, dan ukuran pesanan memberikan empat kenop pada satu rangkaian harga, yang cukup untuk menyesuaikan hampir semua jendela historis.
Jumlah persilangan di atas adalah penyeimbang untuk keempatnya. Angka-angka itu berasal dari riwayat harga saja, tanpa pengaturan yang dilampirkan, dan bervariasi dari tahun ke tahun dengan cara yang tidak dapat dikendalikan oleh pilihan parameter mana pun. Siapa pun yang mengevaluasi klaim grid dapat mengajukan satu pertanyaan: berapa banyak putaran penuh yang selesai yang menjadi dasarnya, dan dari mana hitungan itu berasal? Periode latihan di simulator, dengan tangga terbuka ditandai ke pasar pada akhirnya, menjawabnya lebih jujur daripada grafik perjalanan yang terealisasi.
FAQ
Apakah bot grid trading benar-benar menghasilkan uang?
Grid menghasilkan laba terbatas pada setiap putaran penuh yang selesai dan membawa posisi terbuka tanpa batas saat harga meninggalkan rentangnya. Apakah perjalanan yang terealisasi lebih besar daripada posisi terbuka selama periode tertentu tergantung pada seberapa banyak pasar berosilasi di dalam rentang itu, yang merupakan properti pasar, bukan perangkat lunak.
Kondisi pasar apa yang cocok untuk bot grid?
Mekanisme ini dibangun untuk harga yang berulang kali mengunjungi kembali level yang sama: total jarak tempuh yang tinggi relatif terhadap pergerakan bersih. Dalam panel dua belas nama di atas, rasio efisiensi berkisar dari 0.2% di ujung yang berkelok hingga 14.3% di ujung directional, dan mekanisme tangga bertemu dengan anak tangganya sendiri hanya di ujung pertama.
Apa yang terjadi ketika harga keluar dari rentang grid?
Di atas rentang, bot telah menjual inventarisnya dan duduk dalam bentuk uang tunai sementara pasar terus berjalan tanpanya. Di bawah rentang, bot memegang setiap anak tangga yang dibeli dalam perjalanan turun, dengan biaya rata-rata di atas harga saat ini, dan setiap penurunan lebih lanjut memperlebar kerugian yang belum direalisasi itu.
Bagaimana grid trading berbeda dari dollar-cost averaging?
Keduanya membeli lebih banyak saat harga turun, dan di situlah kesamaan berakhir. Dollar-cost averaging menambahkan jumlah tetap pada jadwal tetap tanpa aturan keluar dan tanpa batas atas. Grid membeli dan menjual berdasarkan pemicu harga di dalam rentang yang dipilih sebelumnya, dan perilakunya berubah total begitu harga meninggalkan rentang itu.
Apakah jarak grid yang lebih ketat menghasilkan lebih banyak pendapatan?
Jarak yang lebih ketat meningkatkan jumlah putaran penuh dan menurunkan laba kotor pada masing-masing, sementara biaya putaran penuh tetap sama. Melewati titik yang ditentukan oleh spread, tambahan perjalanan mengurangi total daripada menambahnya.
Setiap angka di atas berasal dari kueri tersimpan dan berversi atas harga saham riil; buka SQL di bawah panel mana pun untuk memeriksanya, atau ukur pergerakan terhadap pergerakan bersih pada daftar nama Anda sendiri di terminal Strasmore.