Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

grid alım satım botu nasıl çalışır

Grid alım-satım botu sabit fiyat aralıklarında her düşüşte alıp her yükselişte satar. Mekanizmayı karlı kılan piyasa şekli ile kıran piyasa şekli incelenir.

Bir grid alım-satım botu, sabit fiyat aralıklarıyla bir merdiven emir yerleştirir: mevcut fiyatın altındaki her basamakta bir alış emri, üstündeki her basamakta bir satış emri. Piyasa her düştüğünde bot alır. Her yükseldiğinde, daha düşükten aldığını satar. Bu mekanizma dalgalanmayı hasat eder ve piyasa merdivenden tek yönde uzaklaşıp devam ettiğinde birikmiş bir pozisyon oluşturur.

Bu sayfa mekanizmayı parçalarına ayırır, ardından sonucunu belirleyen iki piyasa şeklini ölçer. Aşağıdaki her panel, gerçek ABD hisse senedi fiyatları üzerinde, rakamların tekrarlanabilir kalması için sabit tarihlere bağlanmış, saklanmış bir sorgudur.

Bir grid alım-satım botu nasıl çalışır

Bir gridi üç ayar tanımlar: aralığın üst ve alt sınırları, içindeki çizgi sayısı ve her çizgideki emir büyüklüğü. Çizgiler arasındaki boşluk ilk ikisinden gelir.

İşte aritmetik, netlik için seçilmiş, gerçek bir fiyat teklifinden alınmamış yuvarlak sayılar kullanılarak. Bir hissenin $100 civarında işlem gördüğünü ve bir operatörün $95 ile $105 arasında, bir dolar aralıklı on bir çizgi ve çizgi başına 100 hisse ile bir grid kurduğunu varsayalım. Fiyat $99'a düşer ve bekleyen alış emri dolar. Fiyat $100'e döner ve eşleşen satış emri dolar ve çifti brüt $100 için kapatır. Her iki emir de yeniden kurulur. O saat içinde şirketle ilgili hiçbir şey değişmemiştir. Pozisyon, iki bitişik basamak arasında bir gidiş-dönüşü tamamlamıştır.

Kamuya açık olarak dolaşan açık kaynak projelerinde iki varyant görülür. Aritmetik bir grid, çizgileri sabit bir dolar tutarıyla aralıklandırır. Geometrik bir grid, onları sabit bir yüzdeyle aralıklandırır; bu, geniş bir aralıkta gidiş-dönüş başına yüzde kârı sabit tutar. Dokümantasyon ayrıca, sıfır pozisyonla başlayıp her iki yönde de çalışan nötr bir gridi, envanter tutarak başlayıp yükselişte satan uzun bir gridden ayırır.

Getiri şekli tek bir açık cümleyi hak ediyor. Tamamlanmış bir gidiş-dönüşteki kâr, bir grid adımı eksi maliyetlerle sınırlıdır. Fiyat aralığı terk ettiğinde oluşan açık pozisyonun eşleşen bir sınırı yoktur.

Bir gridin ihtiyaç duyduğu piyasa şekli

Bir grid, yönle değil, kat edilen mesafeyle ödenir. İki hisse senedi, çok farklı mesafeler kat ettikten sonra bir dönemi aynı fiyatta bitirebilir. Her günlük hareketin mutlak büyüklüğünü toplamak, kat edilen toplam mesafeyi verir. Net hareketi bu mesafeye bölmek, bir yolun ne kadar yönlü olduğunun standart bir ölçüsü olan bir verimlilik oranı verir. Düşük bir oran, amaçsızca dolaşan bir yolu tanımlar. Yüksek bir oran, düz bir yürüyüşü tanımlar.

SorgulaKat edilen mesafeye karşı net hareket: on iki tanınmış hisse, Oca 2024 - Haz 2026
Her verinin arkasındaki tam 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
Run this yourself

İlk ve son satırları birlikte okuyun. PG, 527% birikimli günlük hareketi kapsamış ve başladığı yerden 0.9% uzakta bitmiş, 0.2% verimlilik sağlamıştır. SPY, 14.3% ile diğer uçta yer almakta, 415% seyahati 59.2% net harekete dönüştürmektedir. İlk yola yerleştirilen bir grid merdiveni, kendi basamaklarıyla tekrar tekrar karşılaşır. İkinci yola yerleştirilen aynı merdiven geride kalır.

Sakin ve bant içinde dalgalanan, ilişkili ancak farklı özelliklerdir. Bir hisse senedi çok küçük günlük artışlarla yukarı doğru sürüklenebilir ve yine de bir gridi mahsur bırakabilir; bu, düşük oynaklık anomalisi literatüründe incelenen isimlerin otomatik olarak grid malzemesi olmamasının nedenlerinden biridir.

Gidiş-dönüşleri saymak

Verimlilik bir mercektir. Grid geliri daha somut bir şeye bağlıdır: fiyatın bir seviyeyi kaç kez tekrar ziyaret ettiğine. Her takvim yılının ilk kapanışına demir atıp, kapanışı bu çapanın diğer tarafına düşen seansları saymak, tek bir grid çizgisinin yakalayacağı geçiş sayısını verir. Buradaki konu Coca-Cola'dır (KO), grid dokümantasyonunun gösterme eğiliminde olduğu türden büyük, likit bir tüketici ismi.

SorgulaKO: yılın açılış seviyesinin geçişleri, takvim yılına göre, 2019 - 2025
Her verinin arkasındaki tam 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
Run this yourself

2019 yılında kapanış, kendi açılış seviyesini 252 seans boyunca 8 kez geçmiş ve yılı bu seviyeden 17.9% uzakta bitirmiştir. 2025 yılında sayı 250 seans boyunca 6 olmuş, net değişim 13% olmuştur. Tek bir çizgi, tek bir hisse senedi ve bir grid için hammadde, gelecek yılın sayısını önceden bilmenin bir yolu olmaksızın yıldan yıla birkaç kat değişmektedir.

Bu değişkenlik sessiz sorundur. Bir gridin reklamı yapılan getirisi genellikle tamamlanan gidiş-dönüş başına belirtilir ve gidiş-dönüş sayısı ayarlar tarafından değil piyasa tarafından belirlenir.

Bir gridin nerede kırıldığı

Başarısızlık modunun belirli bir şekli vardır. Bir gridi bir aralığa sabitleyin, ardından piyasanın onu terk etmesine izin verin. Aşağıda, tavan ve taban, 2024'ün ilk yirmi seansının en yüksek ve en düşük kapanışlarıdır, sonraki otuz ay boyunca sabit tutulur ve S&P 500 izleyicisinin aylık kapanışı bunlara karşı çizilir.

Sorgula2024 başında sabitlenmiş bir ızgara ve S&P 500 takipçisinin sonraki seyri
Her verinin arkasındaki tam 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
Run this yourself

Bant $467.27 ile $491.26 arasında uzanmaktadır. Serideki ilk ay $482.92'den kapanmış, bant içinde kalmıştır. 30 ayın sonuncusu $746.32'den kapanmış, tavanın çok üzerinde kalmıştır ve grafik çizginin bandı terk edip bir daha geri dönmediğini göstermektedir.

Merdivenin bu yol boyunca ne yaptığını inceleyin. Aralık boyunca yükselirken, bot envanteri basamak basamak satar ve her seferinde bir adım kâr bankaya koyar. Tavanın üzerinde nakit tutar ve izler. Yükselişin sonraki her noktası, operatörün artık katılmadığı bir kazançtır; bu, başarısızlığın hafif versiyonudur.

Şiddetli versiyon bunun ayna görüntüsüdür. Fiyat tabanın altına düşer ve bot aşağı inerken her basamakta satın almıştır, bu nedenle şimdi piyasanın üzerinde ortalama bir maliyetle tam merdiven envanterini elinde tutar ve her ek adım gerçekleşmemiş zararı genişletir. Bir zamanlar istikrarlı, küçük, görünürde başarılı işlemler üreten bir aralık, tek bir yoğunlaşmış pozisyona dönüşür. Grid pazarlaması bunu botun "takılıp kalması" olarak tanımlar; bir aracı kurum ekstresinde, yerleşik bir çıkışı olmayan açık bir düşüş eğilimidir.

Maliyetler işlem sayısıyla ölçeklenir

Bir grid birçok küçük işlemi tamamlar ve her biri bir gidiş-dönüşün tam maliyetini öder: spread, artı geçerli olduğunda komisyonlar veya borsa ücretleri. Alış-satış spreadi, grid matematiğinde en sık atlanan parçadır, çünkü bir ekstrede hiçbir zaman bir satır öğesi olarak görünmez.

Açıklayıcı aritmetik hızlıdır. Bir kuruş spread ile $100'lık bir hisse senedinde, spreadi her iki tarafta da geçen bir gidiş-dönüş kabaca iki kuruş veya nominalin %0,02'sini kaybettirir. Bir dolarlık grid adımına karşı, bu, seyahat başına brüt kârın yaklaşık %2'sidir. Spreadi, daha ince bir isimde rutin bir rakam olan beş kuruşa çıkarın ve aynı seyahat, bir dolar brüt kâra karşı on kuruş veya %10 kaybettirir. Daha fazla dalgalanma yakalamak için gridi on kuruşluk adımlara sıkıştırmak, seyahat başına brüt kârı on kuruşa düşürürken maliyeti değiştirmez ve beş kuruşluk spread artık tüm ticareti tüketir.

Bu ilişki, kullanışlı grid aralığı için bir taban belirler: adımlar, gidiş-dönüş maliyetlerine göre büyük kalmalıdır ve grid ne kadar sıkıysa, gelirinin o kadar büyük kısmı operatöre değil platforma aittir.

Geriye dönük testlerin grid botlarını neden pohpohladığı

Grid stratejileri alışılmadık derecede çekici geriye dönük testler üretir ve bunun çoğunu dört yapısal neden açıklar.

  1. Geçmişe bakışla aralık seçimi. Verileri gördükten sonra seçilen sınırlar, verileri içerecektir. Aralıklı bir döneme uydurulmuş bir grid, o dönemde yüksek bir isabet oranı gösterecektir.
  2. Kapatılmamış merdiven. Seçilen bir bitiş tarihinde duran bir test, genellikle gerçekleşen gidiş-dönüşleri sayarken kalan envantere cömert davranır. Dürüst muhasebe, açık pozisyonu son günde piyasa değeriyle işaretler ve bu zararı sonuca dahil eder.
  3. Dolum varsayımları. Simüle edilen bekleyen emirler, fiyat onlara her dokunduğunda dolar. Gerçek kuyruklar her zaman dokunuşta dolmaz ve dolmayan seyahatler, hızlı piyasalarda orantısız bir şekilde kârlı olanlardır.
  4. Parametre yoğunluğu. Sınırlar, çizgi sayısı, aralık ve emir büyüklüğü, tek bir fiyat serisi üzerinde dört kadran verir; bu, neredeyse herhangi bir tarihsel pencereye uymak için yeterlidir.

Yukarıdaki geçiş sayıları, dördüne de karşı ağırlıktır. Hiçbir ayar eklenmemiş, yalnızca fiyat geçmişinden gelirler ve hiçbir parametre seçiminin kontrol edemeyeceği bir şekilde yıldan yıla değişirler. Bir grid iddiasını değerlendiren herkes, ona tek bir soru sorabilir: bu kaç tamamlanmış gidiş-dönüşe bağlı ve bu sayı nereden geldi? Sonunda açık merdivenin piyasa değeriyle işaretlendiği bir simülatör üzerinde pratik yapma dönemi, buna gerçekleşen seyahatlerin bir grafiğinden daha dürüst bir şekilde cevap verir.

SSS

Grid alım-satım botları gerçekten para kazandırır mı?

Bir grid, tamamlanan her gidiş-dönüşte sınırlı bir kâr kazanır ve fiyat aralığı terk ettiğinde sınırsız bir açık pozisyon taşır. Gerçekleşen seyahatlerin herhangi bir dönemde açık pozisyonu aşıp aşmadığı, piyasanın bu aralık içinde ne kadar dalgalandığına bağlıdır; bu, yazılımın değil piyasanın bir özelliğidir.

Hangi piyasa koşulları bir grid botuna uygundur?

Mekanizma, aynı seviyeleri tekrar tekrar ziyaret eden bir fiyat için inşa edilmiştir: net harekete göre yüksek toplam kat edilen mesafe. Yukarıdaki on iki isimli panelde, verimlilik oranları amaçsızca dolaşan uçta 0.2% ile yönlü uçta 14.3% arasında değişmiştir ve merdiven mekanizması kendi basamaklarıyla yalnızca ilk uçta karşılaşır.

Fiyat grid aralığından çıktığında ne olur?

Aralığın üzerinde bot envanterini satmıştır ve piyasa onsuz devam ederken nakitte oturur. Altında ise aşağı inerken aldığı her basamağı, mevcut fiyatın üzerinde ortalama bir maliyetle elinde tutar ve her düşüş bu gerçekleşmemiş zararı genişletir.

Grid alım-satımının dolar-maliyeti ortalamasından farkı nedir?

Her ikisi de fiyat düştükçe daha fazla satın alır ve benzerlik burada biter. Dolar-maliyeti ortalaması, çıkış kuralı ve üst sınırı olmayan, sabit bir programda sabit bir miktar ekler. Bir grid, önceden seçilmiş bir aralık içinde fiyat tetikleyicilerinde alır ve satar ve fiyat bu aralığı terk ettiğinde davranışı tamamen değişir.

Daha sıkı grid aralığı daha fazla gelir üretir mi?

Daha sıkı aralık, gidiş-dönüş sayısını artırır ve her birindeki brüt kârı düşürürken, gidiş-dönüş maliyeti aynı kalır. Spread tarafından belirlenen bir noktadan sonra, eklenen seyahatler toplama eklemek yerine ondan çıkarır.


Yukarıdaki her rakam, gerçek hisse senedi fiyatları üzerinde saklanmış, sürümlendirilmiş bir sorgudan gelir; herhangi bir panelin altındaki SQL'i açarak kontrol edin veya Strasmore terminalinde kendi isim listenizde seyahati net harekete karşı ölçün.

#grid trading#trading bots#automation#mean reversion#market data