BTC Grid Bot ผ่านช่วงร่วง 40%: Backtest ด้วย OctoBot บน Mac mini (Docker) แล้วข้อมูลบอกอะไร?

โพสต์นี้คือบันทึกการ “ลองของแบบไม่เสียเงินจริง” ของฉันค่ะ: ทดสอบ BTC grid trading bot ผ่านช่วงตลาดร่วงหนัก (เกือบ 40%) แล้วดูว่า performance จริง ๆ เป็นยังไง

ฉันใช้ OctoBot (open-source trading framework) รันบน Mac mini ผ่าน Docker และก่อนลงเงินจริง ฉันทำ backtest 6 เดือน ครอบคลุมช่วงโหด ๆ ของ BTC: Oct 2025 – Feb 2026 ที่ BTC ลงจาก $120,000 → $62,000 (ประมาณ −39%) ก่อนฟื้นบางส่วนไปแถว $67k

Grid bot คืออะไร (ภาษาคน)

Grid bot จะวางออเดอร์เป็น “บันได” รอบราคาปัจจุบัน:

  • ราคาลง → ทยอย buy
  • ราคาดีด → ทยอย sell
  • กำไรจาก volatility (ขึ้น ๆ ลง ๆ) มากกว่าการทายทิศทาง

ความเสี่ยง คือถ้าราคาดิ่งลงเป็นเส้นตรงไม่เด้ง บอทจะสะสม BTC แล้วขายไม่ออก ซึ่งในช่วงทดสอบนี้เกิดขึ้นจริงบางช่วงค่ะ

Setup ที่ใช้

  • Bot: OctoBot GridTradingMode (OctoBot v2.0.16 via Docker)
  • Pair: BTC/USDT
  • Grid: 25 buy + 25 sell
  • Increment: $1,000 ต่อขั้น
  • Spread: $2,000 รอบราคาปัจจุบัน
  • Fees: 0.1% maker/taker (matching real Bybit spot rates)
  • Data: 6 เดือน (~4,320 hourly candles)

3 backtests: เปลี่ยนทีละตัวแปร ผลต่างชัดมาก

Test Config Start Portfolio Bot P&L Market (hold BTC) Outperformance
v1 Trailing up only 10 BTC + 1,000 USDT −42.12% −42.89% +0.77%
v2 Trailing up + trailing down 10 BTC + 1,000 USDT −33.49% −42.89% +9.40%
v3 Trailing up + trailing down 10,000 USDT only −27.25% −42.89% +15.64%

Finding #1: “Trailing down” คือสวิตช์ที่ต่างกันเป็นคนละเกม

ตัวแปรที่แรงที่สุดคือ trailing down ค่ะ

ถ้าเปิดไว้ แล้วราคาหลุดต่ำกว่า buy order ต่ำสุด บอทจะไม่ยืนเฉย ๆ แต่จะ:

  1. ขาย BTC บางส่วนที่ราคา market เพื่อปลดล็อก cash
  2. รื้อ grid เดิม
  3. สร้าง grid ใหม่ให้ตามราคาที่ต่ำลง

ทำให้มัน “ตามตลาดลง” แล้วเทรดความผันผวนต่อได้ตั้งแต่ $120k ลงไปถึง $62k แทนที่จะตายคา grid เดิม

Finding #2: พอร์ตเริ่มต้น (BTC vs USDT) ทำให้ผลเพี้ยนได้มาก

v1/v2 เริ่มด้วย BTC จำนวนมาก ทำให้ P&L ถูกลากโดยราคาของ BTC มากกว่าฝีมือบอทจริง ๆ

v3 แก้ด้วยการเริ่มจาก USDT ล้วน (ไม่มี BTC) เพื่อให้บอทต้อง “หา BTC” ด้วยการ buy dip ตามธรรมชาติของ grid bot ผลเลยแฟร์ขึ้นมาก

The honest takeaway

บอทยัง “ขาดทุน” ในช่วงตลาดลงหนักค่ะ — 10k กลายเป็น ~7,275

แต่คำถามที่เหมาะกับ grid bot คือ: มันดีกว่าทางเลือกที่เราจะทำอยู่แล้วไหม? ถ้าทางเลือกคือถือ BTC ผ่าน crash อยู่แล้ว บอทช่วยลดความเสียหายได้ประมาณ 15.64 จุดเปอร์เซ็นต์ในรอบนี้

What I’m doing next

ขั้นต่อไป ฉันจะไป paper trading 1–2 สัปดาห์ (รัน live กับราคา Bybit แต่ใช้เงินจำลอง) เพื่อดูว่า behavior จาก backtest จะเกิดจริงในตลาด live ไหม ก่อนพิจารณาเอาเงินจริงลงค่ะ


Technical Deep Dive (ของเพิ่มจากโพสต์ Facebook)

ส่วนนี้ตั้งใจเขียนให้ “ทำตามได้” และช่วยกันหลงทางเวลา backtest ค่ะ ถ้าอ่านใน FB แล้วอยากลองทำจริง ให้เริ่มจากตรงนี้

1) Backtest hygiene: 4 จุดที่ทำให้ผลเพี้ยนที่สุด

  • Starting portfolio: ถ้าเริ่มด้วย BTC เยอะ P&L จะถูกลากโดยราคาตลาดมากกว่าพฤติกรรมบอท (เลยต้องมี run แบบ USDT-only)
  • Fees/Slippage: ใส่ค่าธรรมเนียมให้ตรง exchange (ในเทสต์นี้ใช้ 0.1% maker/taker ตาม Bybit spot) และอย่าลืมว่าช่วง crash slippage อาจสูงกว่านี้
  • Timeframe: hourly candles ช่วยให้เห็น “การเด้ง” ระหว่างทาง แต่ก็อาจมองไม่เห็นความผันผวนระดับนาที
  • Window selection: เลือกช่วงที่มี trend ลงแรง + มีเด้งเป็นระยะ จะทดสอบ inventory risk ได้ชัด

2) OctoBot via Docker (โครงขั้นตอนแบบสั้น)

หมายเหตุ: ฉันรันบน Mac mini ผ่าน Docker เพื่อให้ reproducible และแยกสภาพแวดล้อมจากเครื่องหลัก

  1. ติดตั้ง Docker Desktop
  2. สร้างโฟลเดอร์เก็บ config และ data เช่น ~/octobot
  3. รัน container และ map volume เพื่อเก็บ config persist

ตัวอย่าง docker-compose (เป็นแนวทาง ไม่จำเป็นต้องเหมือนทุกบรรทัด):

services:
  octobot:
    image: drakkarsoftware/octobot:2.0.16
    container_name: octobot
    ports:
      - "5001:5001"
    volumes:
      - ./data:/octobot/data
      - ./tentacles:/octobot/tentacles
    restart: unless-stopped

3) Grid parameters ที่ใช้ในเทสต์นี้

  • Mode: GridTradingMode
  • Pair: BTC/USDT
  • Orders: 25 buy + 25 sell
  • Increment: $1,000
  • Spread: $2,000
  • Trailing up: ON
  • Trailing down: ON (ตัวแปรที่แรงที่สุด)

4) Trailing down ทำอะไร “ในทางปฏิบัติ”

นี่คือ mental model แบบง่าย (pseudo-flow) ของ trailing down:

if price < lowest_buy_order:
  sell_small_amount_of_BTC_at_market()   # เพื่อปลดล็อก USDT
  tear_down_current_grid()
  rebuild_grid_centered_around_new_price()
  keep_trading_volatility_downtrend()

ข้อดีคือบอทไม่ “ตายคา grid เก่า” แต่ข้อแลกเปลี่ยนคือมีการ trade ที่ aggressive ขึ้นและต้องระวังค่าธรรมเนียม/การคุมความเสี่ยง

5) ทำไมฉันถึงรัน 3 แบบ (v1/v2/v3)

  • v1 vs v2: เพื่อ isolate ว่า trailing down เปลี่ยนผลจริงไหม
  • v2 vs v3: เพื่อแก้ distortion จากการเริ่มด้วย BTC (ให้เห็น performance ที่มาจากการซื้อขายของบอทจริง ๆ)

6) Checklist ก่อนไป paper trading / live

  • กำหนดเพดาน exposure (เช่น max BTC inventory หรือ max drawdown ที่ยอมรับได้)
  • ตั้ง “kill switch”/เงื่อนไขหยุดเมื่อ market behavior ไม่เหมาะกับ grid (เช่น straight-line dump ยาว ๆ)
  • เก็บ log ของคำสั่งซื้อขาย + คำนวณผลหลังหัก fee
  • paper trade อย่างน้อย 1–2 สัปดาห์ และ compare กับ hold benchmark เสมอ

Disclaimer

บทความนี้เป็นการแชร์การทดลองเชิงเทคนิค/การทดสอบระบบเท่านั้น ไม่ใช่คำแนะนำการลงทุน (not financial advice)

Leave a Comment