liq-aware Kelly — Kelly ที่รู้จักจุดล้างพอร์ต (spec 2026-07-13-liq-aware-kelly). เลือก w ที่ max g(w) = [-uw - 1/2*g*s^2*w^2] + p_liq(s)*ln(1 - loss(w)) growth term = Kelly เดิม (Kelly 1956 - Merton 1969) ruin penalty: p_liq = first-passage probability ของ GBM แตะกำแพง liq ภายใน T วัน (reflection principle, Karatzas & Shreve 1991 ch.2.8) loss(w) = margin ที่เสียจริง คิดจาก exposure เต็มที่กริดจะกางถึงจุด liq (ไม่ใช่แค่ไม้แรก) gamma in {1, 2} full/half Kelly (MacLean, Thorp & Ziemba 2010) sigma,mu(EWMA) = RiskMetrics lambda=0.94 daily causal (J.P. Morgan 1996) - mu ใช้จริง = CDC EMA-12 drift clamp: FLOOR = 2p/(1+2p) - CAP = 0.4948 (จากสูตร margin_required จริงของ engine) อ้างอิง: Grossman & Zhou (1993, Math.Finance 3(3), 241-276) - Busseti, Ryu & Boyd (2016) Risk-Constrained Kelly Gambling - Kelly (1956) - Merton (1969) - RiskMetrics (1996) *** สำคัญ: กฎเชิงโครงสร้างที่เจอ (วัดจริงด้วย analyze_liq_exposure.py) *** บนมาร์จิ้น isolated leverage คงที่ ระยะจากราคาเข้าเฉลี่ยถึงจุด liq คงที่ ~10.5% ไม่ว่าไม้เล็กหรือใหญ่ (margin/pv สเกลตาม qty เท่ากันแล้วหักล้างกันในสูตรระยะ liq ของ engine.py) => ขนาดไม้คุมได้แค่ 'ความรุนแรง' ของการโดน liq ไม่ใช่ 'ความถี่' วัด R1 2020-10->2021-12 (Kelly ธรรมดา vs liq-aware T=20): liq 24 vs 23 ครั้ง (แทบไม่ต่าง) ขนาดไม้ตอนโดน liq (frac ราคา) 0.245 vs 0.198 | margin เสียรวม 0.742 BTC vs 0.534 BTC (-28%) ดูรายละเอียดเต็มใน section ทำไมแพ้/ทำไมชนะ ท้ายไฟล์นี้ T (horizon ของ p_liq) ห้าม sweep หาผลดีสุด (กติกา anti-curve-fit ของโปรเจกต์): Task 1 วัด T=1 วันแล้วพบว่ากำแพง liq (~10.5% ห่าง) แทบแตะไม่ถึงใน 1 วัน (cap-hit ลดจาก 44.1%->39.8% เท่านั้น) - short zone จริงถือกันเป็นสัปดาห์ ไม่ใช่ 1 วัน จึงรายงาน T=1 (หลัก, ตามสเปก) และ T=5/T=20 (sensitivity) อย่างซื่อสัตย์ทั้งคู่ ห้ามหยิบ T ที่ให้ผลดีที่สุดมาอ้างเป็น "คำตอบ" signal: CDC EMA12/26 + deadband band 1% (Brock/Lakonishok/LeBaron 1992) - คงที่ทุก config long L3 = COIN-M delivery front-quarter (ladder เดิม ไม่แตะ) - short = Binance spot inverse calc ไม่คิด funding เป็น PnL - isolated 10x - ทุน 1 BTC - maker 0.02%/taker 0.055% เทียบกับ CHAMP (probe-ladder+deadband, ไม่มี Kelly) FULL = +0.4361 BTC / liq 39 เทียบกับ KELLY_g1_cdc (Kelly เดิม ไม่รู้จัก liq) FULL = +0.4327 BTC / liq 49 (จาก kelly-leland-no-tuning) span 2020-04-01->2026-06-15 === CONFIG KELLYLIQ_g1_T1 (gamma=1, T=1d) === [Variant C - 2%] R0 2020-04-01->2020-06-15 alpha -0.0260 liq 1 dd_btc 0.0513 R1 2020-10-01->2021-11-15 alpha +0.1781 liq 26 dd_btc 0.1706 R2 2021-11-15->2023-01-01 alpha +0.1530 liq 6 dd_btc 0.1602 R3 2023-01-01->2024-01-01 alpha -0.0373 liq 8 dd_btc 0.1083 R4 2024-01-01->2025-01-01 alpha -0.1957 liq 14 dd_btc 0.2466 R5 2025-01-01->2026-06-15 alpha +0.1332 liq 3 dd_btc 0.084 C1 2020-04-01->2023-01-01 alpha +0.3051 liq 34 dd_btc 0.1668 C2 2023-01-01->2026-06-15 alpha -0.1286 liq 25 dd_btc 0.2612 C3 2024-02-01->2026-06-15 alpha +0.0183 liq 14 dd_btc 0.1541 C4 2021-04-01->2026-06-15 alpha +0.3987 liq 27 dd_btc 0.1807 FULL 2020-04-01->2026-06-15 alpha +0.3600 liq 49 dd_btc 0.1826 === CONFIG KELLYLIQ_g2_T1 (gamma=2, T=1d) === [Variant C - 2%] R0 2020-04-01->2020-06-15 alpha -0.0260 liq 1 dd_btc 0.0513 R1 2020-10-01->2021-11-15 alpha +0.2690 liq 26 dd_btc 0.1084 R2 2021-11-15->2023-01-01 alpha +0.0982 liq 6 dd_btc 0.1945 R3 2023-01-01->2024-01-01 alpha -0.0903 liq 9 dd_btc 0.1461 R4 2024-01-01->2025-01-01 alpha -0.1957 liq 14 dd_btc 0.2466 R5 2025-01-01->2026-06-15 alpha +0.1332 liq 3 dd_btc 0.084 C1 2020-04-01->2023-01-01 alpha +0.3602 liq 33 dd_btc 0.1601 C2 2023-01-01->2026-06-15 alpha -0.1502 liq 26 dd_btc 0.2827 C3 2024-02-01->2026-06-15 alpha +0.0183 liq 14 dd_btc 0.1541 C4 2021-04-01->2026-06-15 alpha +0.3069 liq 27 dd_btc 0.242 FULL 2020-04-01->2026-06-15 alpha +0.3782 liq 48 dd_btc 0.2284 === CONFIG KELLYLIQ_g1_T5 (gamma=1, T=5d) === [Variant C - 2%] R0 2020-04-01->2020-06-15 alpha -0.0260 liq 1 dd_btc 0.0513 R1 2020-10-01->2021-11-15 alpha +0.2317 liq 25 dd_btc 0.1387 R2 2021-11-15->2023-01-01 alpha -0.0489 liq 6 dd_btc 0.2224 R3 2023-01-01->2024-01-01 alpha -0.0536 liq 8 dd_btc 0.1154 R4 2024-01-01->2025-01-01 alpha -0.0539 liq 8 dd_btc 0.0888 R5 2025-01-01->2026-06-15 alpha +0.1321 liq 3 dd_btc 0.0602 C1 2020-04-01->2023-01-01 alpha +0.3748 liq 32 dd_btc 0.1421 C2 2023-01-01->2026-06-15 alpha -0.0567 liq 24 dd_btc 0.1916 C3 2024-02-01->2026-06-15 alpha +0.0159 liq 14 dd_btc 0.1506 C4 2021-04-01->2026-06-15 alpha +0.3474 liq 25 dd_btc 0.1405 FULL 2020-04-01->2026-06-15 alpha +0.3957 liq 46 dd_btc 0.1421 === CONFIG KELLYLIQ_g1_T20 (gamma=1, T=20d) === [Variant C - 2%] R0 2020-04-01->2020-06-15 alpha -0.0260 liq 1 dd_btc 0.0513 R1 2020-10-01->2021-11-15 alpha +0.3025 liq 23 dd_btc 0.0902 R2 2021-11-15->2023-01-01 alpha +0.1702 liq 3 dd_btc 0.1695 R3 2023-01-01->2024-01-01 alpha -0.0809 liq 10 dd_btc 0.1666 R4 2024-01-01->2025-01-01 alpha -0.0731 liq 10 dd_btc 0.1321 R5 2025-01-01->2026-06-15 alpha +0.0117 liq 4 dd_btc 0.1538 C1 2020-04-01->2023-01-01 alpha +0.3707 liq 27 dd_btc 0.1671 C2 2023-01-01->2026-06-15 alpha -0.1494 liq 26 dd_btc 0.2499 C3 2024-02-01->2026-06-15 alpha -0.0126 liq 14 dd_btc 0.1573 C4 2021-04-01->2026-06-15 alpha +0.2150 liq 26 dd_btc 0.1883 FULL 2020-04-01->2026-06-15 alpha +0.2347 liq 45 dd_btc 0.1818 ===== ทำไมแพ้ / ทำไมชนะ (สรุปกลไก) ===== ## ⭐⭐ กฎเชิงโครงสร้างที่เจอ (คุณค่าจริงของงานนี้ — ไม่ใช่ตัวเลข) - บนมาร์จิ้นแบบ isolated ที่ leverage คงที่ ระยะห่างจากราคาเข้าเฉลี่ยถึงจุด liquidation อยู่ที่ ~10.5% เสมอ **ไม่ว่าจะเปิดไม้ขนาดเล็กหรือใหญ่แค่ไหน** (พิสูจน์ตรงจากสูตรใน engine.py — margin กับ pv สเกลตาม qty เท่ากันแล้วหักล้างกันหมดในสูตรระยะ liq) - ผลคือ **ขนาดไม้ (position size) คุมได้แค่ "ความรุนแรง" ของการโดน liq เท่านั้น คุม "ความถี่" ไม่ได้เลย** - วัดจริงยืนยันด้วย analyze_liq_exposure.py (ช่วงกระทิง 2020-10→2021-12, เทียบ Kelly ธรรมดา vs liq-aware T=20): - จำนวนครั้งโดน liq: 24 ครั้ง (Kelly ธรรมดา) เทียบกับ 23 ครั้ง (liq-aware) — แทบไม่ลดลงเลย - ขนาดไม้ ณ วินาทีโดน liq (สัดส่วนของราคา): 0.245 (Kelly ธรรมดา) เทียบกับ 0.198 (liq-aware) - margin ที่เสียจริงรวมทั้งช่วง: **0.742 BTC (Kelly ธรรมดา) เทียบกับ 0.534 BTC (liq-aware) ลดลง 28%** - เพราะ p_liq ในสูตรไม่ขึ้นกับ w จริง (ระยะทางถึงกำแพงคงที่ไม่ว่าไม้เล็กไม้ใหญ่) → สูตร "liq-aware Kelly" ทั้งก้อนจึงยุบเหลือแค่ "Kelly เดิม ลบภาษีคงที่ต่อหน่วยขนาด" — **หรี่ไม้ให้เล็กลงเฉยๆ ไม่ได้ฉลาดขึ้นเลย** - กฎนี้อธิบายย้อนหลังได้ว่าทำไม 4 การทดลอง "ปรับขนาด" ก่อนหน้านี้ล้วนแพ้: grid-cap-short-pct-sweep, grid-cdc-regime-sizing, grid-cdc-halving-ladder, และตอนนี้ liq-aware Kelly — **ทุกความพยายามลดจำนวนครั้งโดน liq ด้วยการปรับขนาดไม้ ตันเชิงโครงสร้างเสมอ** ## 📉 ผลลบ (ทำไมแพ้) - FULL (2020-04→2026-06, กริด 2%): champion (คงที่ ไม่มี Kelly) **+0.4361 BTC / liq 39** — ยังดีที่สุด - Kelly ธรรมดา (ไม่รู้จัก liq) +0.433 BTC / liq 49 — เกือบเสมอ champion - liq-aware γ=1: T=1 +0.360/liq49 · T=5 +0.396/liq46 · T=20 +0.235/liq45 - liq-aware γ=2 T=1: +0.378/liq48 - **ไม่มี config liq-aware ไหนชนะทั้ง Kelly ธรรมดาและ champion** — การหรี่ขนาดกินกำไรมากกว่าที่ช่วยลดความเสียหาย เพราะ (ตามกฎด้านบน) มันไม่ได้ลด "ความถี่" การโดน liq เลย มีแต่ทำให้ short เล็กลงตอนเดาถูกทิศทางด้วย (โดยเฉพาะขาลงปี 2022 ที่กำไรก้อนใหญ่ต้องพึ่ง short ขนาดใหญ่) - จงใจข้ามการทำ walk-forward: liq-aware โดน dominate ทั้ง 2 แกน (α ต่ำกว่า Kelly ธรรมดา และ liq ไม่ได้ลดลงอย่างมีนัยสำคัญ) และ Kelly ธรรมดาเองก็แพ้ champion อยู่แล้วในผล walk-forward ก่อนหน้า ([[kelly-leland-no-tuning]]) — ไม่มีเหตุผลจะเสียเวลาวัดซ้ำ ## บทเรียน - คันโยกที่จะลด "ความถี่" การโดน liq ได้จริง ต้องไปแตะสิ่งที่ขยับกำแพง liq เอง — **leverage หรือการเติมมาร์จิ้นเมื่อราคาใกล้จุด liq** ไม่ใช่ขนาดไม้แรกเข้า (ยังไม่ได้ทดสอบ — ทิศทางถัดไปที่แนะนำ) - ทฤษฎีที่ดูซับซ้อนกว่า (เพิ่ม ruin-penalty เข้าไปใน Kelly) ไม่ได้แปลว่าฉลาดกว่าเสมอ — ถ้าตัวแปรที่มันคิดว่าคุมได้ (ความถี่การโดน liq) จริงๆ แล้วคุมไม่ได้ตามคณิตศาสตร์ของระบบมาร์จิ้นเอง การเพิ่มความซับซ้อนก็แค่เสียกำไรฟรีๆ