แก่นของเรื่อง
ถ้าจำได้อย่างเดียว ให้จำว่า ระบบนี้ไม่พยายามทำนายราคาให้แม่นขึ้น แต่ทำให้ทุกการตัดสินใจ "มีขอบเขต เห็นได้ กู้คืนได้ และวัดผลได้" ข้อเท็จจริงนี้มาจากคำอธิบายจุดประสงค์ของโปรเจกต์เอง
ทำไมแนวคิดนี้ได้ผล (กลไกเหตุและผล)
- บอทเทรดพังบ่อยที่สถานะกลางทาง เช่น ซื้อได้แล้วแต่โปรเซสดับก่อนตั้งตัวป้องกัน ระบบจึงเขียน intent ลง journal ก่อนส่งคำสั่ง และเทียบกับ Binance ทุกครั้งที่ฟื้น
- ถ้าอ่านสถานะไม่ได้หรือผลคำสั่งไม่ชัด ระบบเลือกหยุด (HALT) แทนเดา การหยุดมีต้นทุนต่ำกว่าการเปิด position ที่ไม่มีตัวป้องกัน
- ตัวเลขกำไรขาดทุนมาจากการจับคู่ lot แบบ FIFO ด้วยจำนวน ราคา และค่าธรรมเนียมจริง ถ้าข้อมูลไม่ครบก็ไม่รายงานตัวเลข จึงไม่มีกำไรลวงตา
- AI และกลยุทธ์ใหม่เริ่มใน SHADOW (เก็บหลักฐาน ไม่แตะคำสั่ง) และเข้า APPLY ได้ต่อเมื่อผ่านเกณฑ์สถิติบนข้อมูลที่เก็บหลังจากแช่แข็ง candidate แล้ว
20% ที่สำคัญที่สุดในทางปฏิบัติ
| ลำดับ | หลักที่ควรเอาไปใช้ | ทำไมสำคัญ |
|---|---|---|
| 1 | ทุก BUY ที่ fill ต้องมีตัวป้องกันฝั่งตลาดที่ตรวจแล้ว | กันสถานะเปิดที่ไม่มีทางออก |
| 2 | บันทึก intent ก่อนส่งคำสั่ง | ฟื้นหลังโปรเซสดับได้โดยไม่เดา |
| 3 | ไม่ชัดเจน = หยุด ไม่ใช่ลองต่อ | ผลคำสั่งที่ไม่ทราบต้องผ่าน reconcile หรือ HALT |
| 4 | AI ไม่มีเครื่องมือสั่งซื้อขาย | อำนาจสูงสุดอยู่ที่ Risk Manager |
| 5 | ของใหม่เริ่มใน SHADOW แล้วค่อยพิสูจน์ | ไม่ปล่อยกลยุทธ์ที่ยังไม่ผ่านการทดสอบเข้าเงินจริง |
สิ่งที่รอได้: dashboard, Telegram report, การ deploy บน Raspberry Pi ซึ่งเป็นงานปฏิบัติการรอบตัวระบบ ไม่ใช่แกนของแนวคิด
ช่วยให้ดีขึ้นอย่างไร
โปรเจกต์ไม่ประกาศตัวเลขกำไร และระบุเองว่าไม่รับรองผลกำไร ตารางนี้จึงเทียบ "ความเสี่ยงที่ถูกควบคุม" ไม่ใช่ผลตอบแทน
| สถานการณ์ | ถ้าไม่มี | เมื่อมี | วัดอย่างไร | หลักฐาน |
|---|---|---|---|---|
| BUY fill แล้วมีตัวป้องกัน | สถานะเปิดไม่มีทางออก | OCO หรือ STOP ที่ตรวจแล้ว | canary 1 รอบ | วัดแล้ว (1 lifecycle) |
| โปรเซสดับกลางคำสั่ง | ไม่รู้ว่าคำสั่งไปถึงหรือยัง | journal แล้ว reconcile | ทดสอบฟื้นหลัง restart | ยังไม่ทดสอบ |
| รายงานกำไร | cash flow ปนกับกำไร | แยก cash flow, พอร์ต, FIFO PnL | ตัวเลขสามชุดไม่ปนกัน | ตีความ |
| backtest ใช้ข้อมูลอนาคต | ผลสูงเกินจริง | replay ตามเวลา, purged split | ตรวจ cutoff ใน test | ตีความ |
| AI ทำเกินอำนาจ | AI ปิด HALT ได้ | AI ไม่มี order tool | ตรวจ call ที่ AI เรียกได้ | ตีความ |
| กำไรสุทธิของกลยุทธ์ | ไม่ทราบ | ไม่มีตัวเลขที่เผยแพร่ | ต้องรันเอง | ยังไม่ทดสอบ |
ข้อแลกเปลี่ยนที่ต้องยอมรับ: เกณฑ์เข้มทำให้ช้า เช่น เฟสละ 45 วัน และต้องมี 56 decision ใหม่ก่อนยืนยัน (ตีความ: ค่าใช้จ่ายคือเวลาและโอกาสที่เสียไปตอนรอ)
Important canary ที่ผ่านพิสูจน์ได้เพียงวงจร BUY ถึง protection หนึ่งรอบ ไม่ได้พิสูจน์ว่ากลยุทธ์ทำกำไร และโปรเจกต์ระบุว่าผลนี้ไม่อนุญาตให้เพิ่ม exposure
ลองใช้
ตัวอย่างที่ 1: FIFO กับค่าธรรมเนียม (ตัวอย่างประกอบ)
ซื้อ 1 หน่วยที่ 100 แล้วซื้ออีก 1 หน่วยที่ 110 จากนั้นขาย 1.5 หน่วยที่ 120 ค่าธรรมเนียมรวม 0.18
| ขั้น | คำนวณ | ผล |
|---|---|---|
| ต้นทุน FIFO | 1 x 100 + 0.5 x 110 | 155.00 |
| รายรับจากขาย | 1.5 x 120 | 180.00 |
| กำไรก่อนค่าธรรมเนียม | 180 - 155 | 25.00 |
| กำไรสุทธิ | 25 - 0.18 | 24.82 |
| lot คงเหลือ | 0.5 หน่วยที่ 110 | ถือต่อ |
รายงานของระบบใส่ค่าธรรมเนียมเป็นเครื่องหมายลบเพราะลดกำไรสุทธิ ถ้าไม่ทราบค่าธรรมเนียม ระบบไม่ใส่ศูนย์แทน
ตัวอย่างที่ 2: เกณฑ์ 6 จาก 7 block ผ่านง่ายแค่ไหน (ตัวอย่างประกอบ)
Confirmation แบ่ง decision เป็น 7 block block ละ 8 รวม 56 และต้องบวกอย่างน้อย 6 block สมมติ (ข้อสมมติของเรา ไม่ใช่ของโปรเจกต์) ว่าแต่ละ block บวกหรือลบด้วยโอกาสเท่ากัน:
| จำนวน block ที่บวก | วิธีเกิดขึ้น | ความน่าจะเป็น |
|---|---|---|
| 7 | 1 วิธี | 1/128 |
| 6 | 7 วิธี | 7/128 |
| รวมอย่างน้อย 6 | 8 วิธี | 8/128 = 6.25% |
เกณฑ์นี้เพียงอย่างเดียวจึงผ่านโดยบังเอิญได้ราว 1 ใน 16 นี่คือเหตุผลที่ต้องมีเกณฑ์ lower confidence bound และ Holm correction ซ้อนอีกชั้น
ตัวอย่างที่ 3: Holm correction (ตัวอย่างประกอบ)
ทดสอบ 3 สมมติฐาน ระดับนัยสำคัญ 0.05 เรียง p-value จากน้อยไปมาก เทียบกับ 0.05 หารด้วยจำนวนที่เหลือ
| อันดับ | p-value | เกณฑ์ | ผล |
|---|---|---|---|
| 1 | 0.010 | 0.05/3 = 0.0167 | ผ่าน |
| 2 | 0.030 | 0.05/2 = 0.025 | ไม่ผ่าน หยุดตรงนี้ |
| 3 | 0.040 | ไม่ถูกทดสอบ | ไม่ผ่าน |
ถ้าไม่แก้ จะผ่านทั้งสามตัวเพราะทุกตัวต่ำกว่า 0.05 ซึ่งคือปัญหา multiple comparison ที่ Holm แก้
เมื่อไรควรใช้ ไม่ควรใช้
| เงื่อนไข | ใช้แนวคิดนี้ | ไม่ควรใช้ |
|---|---|---|
| ส่งคำสั่งจริงบน exchange | ใช้ครบทุกชั้น | ไม่มีกรณีที่ข้ามได้ |
| บอทส่วนตัวเล็ก ๆ | ใช้ journal และ protection | gate 56 decision อาจเกินจำเป็น |
| ต้องการกำไรทันที | ไม่เหมาะ | ระบบเน้นความปลอดภัย ไม่รับรองกำไร |
| ต้องรันบน Windows ตรง ๆ | ใช้ WSL2 สำหรับพัฒนา | LIVE บน Windows ตรงไม่รองรับ |
| ไม่มี Linux ที่เปิดตลอด | รัน DRY หรือ Testnet | ใช้ LIVE ไม่ได้ |
ก้าวแรกที่เล็กที่สุด
รัน DRY กับ Binance Spot Testnet ด้วย BOT_LIVE_CONFIRMED=NO และ AI ปิด (AI_ADVISOR_ENABLE=0) แล้วดู dashboard ว่ามี order, protection และสถานะ HALT ครบหรือไม่ ยังไม่ต้องใส่คีย์ Mainnet
ทดสอบก่อนและหลัง
| ขั้น | ทำอะไร | เกณฑ์ผ่าน (ตั้งก่อนรัน) |
|---|---|---|
| ฐาน | นับ BUY ที่ fill แล้วไม่มีตัวป้องกันบนบอทเดิมของคุณ | บันทึกจำนวน N0 |
| ทำ | เพิ่มขั้นตรวจ protection แล้วรัน Testnet จำนวนรอบเท่ากัน | N1 = 0 |
| ฟื้น | kill โปรเซสหลัง fill แล้ว restart | ไม่มี order ซ้ำ ไม่มี fill ที่ไม่มี protection |
| บัญชี | เทียบกำไรจาก FIFO กับยอดบัญชี | ตัวเลขอธิบายส่วนต่างได้ครบ |
ทดสอบความเข้าใจ
| คำถาม | คำตอบ | คำตอบที่มักผิด |
|---|---|---|
| ผู้ให้บริการ AI ล่ม ขณะมี position บอททำอย่างไร | ใช้กลยุทธ์ deterministic ต่อ protection ไม่เปลี่ยน | บอทหยุดเทรดทันที |
| canary ผ่าน 1 รอบ พร้อม LIVE เต็มหรือยัง | ยัง พิสูจน์แค่วงจร BUY ถึง protection รอบเดียว | พร้อมแล้ว เพราะผ่านเงินจริง |
| ผ่าน 6 จาก 7 block เพียงพอไหม | ไม่ ผ่านโดยสุ่มได้ 6.25% ต้องมี CI และ Holm | น้อยมาก ไม่ต้องตรวจเพิ่ม |
| ค่าธรรมเนียมไม่ทราบ ใส่ 0 แล้วรายงานต่อได้ไหม | ไม่ ระบบกันตัวเลข PnL และตัดสัญลักษณ์ออกจากรายงาน | ใส่ 0 ได้ ผลต่างเล็กน้อย |
| exit code 2 จาก verification แปลว่าอะไร | BLOCKED คือหลักฐานไม่ครบ ไม่ใช่ PASS | ผ่านแบบมีคำเตือน |
| candidate ที่ชนะตอน selection ใช้ยืนยันตัวเองได้ไหม | ไม่ ต้อง freeze แล้วเก็บ 56 decision ใหม่ | ชนะ selection ก็ยืนยันได้เลย |
กรอบความรู้: ข้อเท็จจริงเทียบกับข้อสรุป
คำอธิบายในหน้านี้อิงเอกสารของโปรเจกต์ ไม่ได้อ่านซอร์สโค้ดหรือรันระบบเอง จึงแยกระดับความมั่นใจดังนี้
| ประเภท | ตัวอย่าง | วิธีใช้ |
|---|---|---|
| ข้อเท็จจริงที่เอกสารระบุ | ค่า 56 decision, 360 นาที, 08:00 Almaty | อ้างได้ |
| คำประกาศของระบบ | "fail-closed", "ไม่เดา" | ถือเป็นเจตนาออกแบบ ยังไม่ตรวจเอง |
| ข้อสรุปของเรา | FIFO ลดกำไรลวงตา | ตีความ ต้องทดสอบ |
| สิ่งที่ไม่มีข้อมูล | สูตรระยะห่าง ladder | ดูหัวข้อข้อมูลที่ขาด |
| ข้อยอมรับของโปรเจกต์ | experimental, ไม่รับรองกำไร | น้ำหนักสูงสุด |
ภาพรวมระบบ
Ladder Dragon เป็นระบบ Python แบบโอเพนซอร์ส (MIT) สำหรับ Binance Spot เวอร์ชัน 2.20.352 ณ วันที่ตรวจ 2026-10-10 และสถานะที่ประกาศคือ experimental
เจ็ดชั้นของระบบ
| ชั้น | หน้าที่ |
|---|---|
| Strategy | BUY/SELL ladder, ATR/EMA/VWAP/ADX, market regime |
| Execution | Binance transport, fill, OCO/STOP, FIFO, recovery |
| Risk | reserve, CAP, circuit breaker, reconcile, fail-closed gate |
| AI advisory | SHADOW และ RAG context ไม่มีสิทธิ์สั่งคำสั่ง |
| Operations | dashboard อ่านอย่างเดียว, Telegram, release, backup |
| Persistence | migration แบบ atomic, journal, หลักฐานที่ hash ต้นทาง |
| Verification | replay, walk-forward, recovery, Testnet, release, Pi |
ความเสี่ยงที่ระบบตั้งใจควบคุม
| ความเสี่ยง | ตัวควบคุม |
|---|---|
| โปรเซสหยุดหลัง fill | intent journal และ reconcile กับ Binance |
| BUY ไม่มี protection | OCO หรือ STOP ที่ตรวจแล้ว และ recovery แบบ fail-closed |
| cash flow ถูกมองเป็นกำไร | แยก cash flow, การเคลื่อนไหวของพอร์ต, FIFO net PnL |
| ทดสอบด้วยข้อมูลอนาคต | replay ตามลำดับเวลา, walk-forward แบบ purged |
| AI เกินอำนาจ | AI เป็น advisory อยู่หลัง Risk Manager |
| โฮสต์เล็กล้มเงียบ | dashboard, health check, backup, Telegram |
กลไกหลัก
1. Entry ladder แบบปรับตัว
Ladder คือชุดคำสั่งซื้อที่วางเป็นขั้นราคาต่างกัน (คำนิยามทั่วไป ไม่ใช่สูตรของโปรเจกต์) ระบบปรับขั้นด้วยตัวชี้วัด ATR, EMA, VWAP, ADX และ market regime สูตรระยะห่างที่แน่ชัดไม่ได้อยู่ในเอกสารที่อ่าน
| ตัวชี้วัด | ใช้ตอบคำถามอะไร (ทั่วไป) |
|---|---|
| ATR | ราคาแกว่งกว้างแค่ไหน |
| EMA | แนวโน้มระยะสั้นไปทางไหน |
| VWAP | ราคาเฉลี่ยถ่วงปริมาณ ตอนนี้แพงหรือถูก |
| ADX | แนวโน้มแรงพอหรือไม่ |
2. Protection ฝั่ง exchange
BUY ที่ fill แล้วถือว่าปลอดภัยเมื่อตรวจ OCO ทั้งสองขาแล้วเท่านั้น กฎที่เอกสารระบุ:
- OCO ที่ราคาไขว้กันไม่ถูกส่ง
- ถ้าติดตั้ง protection ไม่สำเร็จแบบชัดเจนใน LIVE ระบบพยายามปิด position ฉุกเฉินแบบที่ยืนยันได้
- ความไม่แน่ใจจากการอ่านสถานะไม่อนุญาตให้ถอด protection
- inventory ที่บอทจัดการกับ inventory เดิมของบัญชีแยกกัน และ protection ของฝั่งแรกไม่ครอบคลุมฝั่งหลัง
3. Journal และ recovery
Executor บันทึก intent ก่อนส่ง mutation ไปที่ exchange ผลที่ไม่ทราบเข้าสู่ reconcile หรือ HALT HALT บล็อกทุก mutation แต่ระบบที่สถานะดียังเก็บหลักฐาน SHADOW แบบไม่สั่งคำสั่งต่อได้
4. Accounting แบบ FIFO
| กฎ | ผล |
|---|---|
| ใช้จำนวน ราคา ค่าธรรมเนียม และ trade id จริง | ตัวเลขตรวจสอบย้อนกลับได้ |
| ค่าธรรมเนียมไม่ทราบ ไม่กลายเป็นศูนย์ | ไม่สร้างกำไรเกินจริง |
| ประวัติ FIFO ไม่ครบ ไม่แสดง PnL ตัวเลข | symbol ถูกแยกในรายการยกเว้น |
| cash flow, พอร์ต, PnL เป็นสามเมตริกแยก | ไม่ปนกัน |
5. Risk Manager
ควบคุม reserve, CAP, ขาดทุนรายวัน, spread, ความสดของข้อมูล และ gap risk จากจุดเดียว ส่วน ladder_dragon/risk/ ยังมี circuit breaker, VaR และ Expected Shortfall
6. AI และ prediction
AI ได้รับ aggregate ที่ตรวจแล้ว ไม่มีเครื่องมือสั่งคำสั่ง และกลับไปใช้กลยุทธ์ deterministic เมื่อผลลัพธ์ไม่ถูกต้องหรือผู้ให้บริการผิดพลาด
| รายการ | ค่าที่เอกสารระบุ |
|---|---|
| horizon ที่บันทึก | 1, 5, 15 นาที |
| ค่าที่เก็บ | probability, expected net PnL, adverse movement, เวลา execute |
| รายงานปฏิบัติการ | decision ล่าสุด 1,000 รายการต่อ candidate |
| ฐานข้อมูล | เก็บ decision และ outcome ทั้งหมด |
| ความปลอดภัยข้อมูล | feature ใช้ as-of cutoff, split ตัด label ที่ยังไม่รู้ |
7. กระบวนการยืนยันทางสถิติ
flowchart TD
A[Selection: เทียบ candidate บน snapshot เดียวกัน] --> B[Operator freeze 1 candidate]
B --> C[manifest JSON + SHA-256]
C --> D[Confirmation: 56 decision ใหม่ 7 block x 8]
D --> E{ผ่านเกณฑ์ block และ CI + Holm}
E -->|ผ่าน| F[Operator อนุมัติ APPLY]
E -->|ไม่ผ่าน| G[คงอยู่ใน SHADOW]
การเรียงลำดับในแผนภาพเป็นการต่อภาพของเรา เอกสารระบุกฎแต่ละข้อแยกกัน
| กฎ | ค่า |
|---|---|
| ผล selection | เป็น diagnostic ยืนยัน candidate ของตัวเองไม่ได้ |
| ข้อมูล confirmation | หลัง purged boundary เท่านั้น |
| ตัดช่วง outcome ที่ทับซ้อน | 360 นาที |
| โครงสร้าง cohort | 7 block ๆ ละ 8 decision รวม 56 |
| ต้องบวก | อย่างน้อย 6 block ทั้ง PnL และ baseline edge |
| exact power analysis | ต้องมี 52 decision อิสระใน selection |
| ก่อนฝึก | decision ปิดย้อนหลังนับเข้า 30 decision ได้ |
| กำหนดเวลา | ล่วงหน้า 45 วันต่อเฟส |
| decision ที่ยังไม่ปิด | หยุดชุดที่เข้าเกณฑ์จนกว่า outcome จะปิด |
กลยุทธ์ที่เทียบกับ baseline NO_TRADE/USDT นับต้นทุนโอกาสของช่วงที่ไม่เทรดด้วย และ cohort ที่เข้าเทรดจริงเป็นเพียง diagnostic อนุมัติ APPLY ไม่ได้ PANIC มี safety veto แยก ไม่ทดสอบ expectancy
8. Defensive ensemble
| สัญญาณ | ผล |
|---|---|
| FLAT หรือ UP | ถือเป็นครอบครัวปลอดภัยเดียวกัน |
| DOWN หรือ PANIC แบบมั่นใจ | หยุด BUY |
| หลักฐานอันตรายอ่อน | ลด CAP ได้อย่างเดียว |
| ทุกกรณี | ขยายความเสี่ยงของ baseline ไม่ได้ |
ระดับการปล่อยใช้งาน
| ระดับ | พฤติกรรม | เงื่อนไข |
|---|---|---|
| DRY | จำลอง ไม่ส่งคำสั่ง | ค่าเริ่มต้น |
| Testnet | คำสั่งบน Binance Spot Testnet | ใช้คีย์ Testnet |
| SHADOW | เก็บหลักฐาน ไม่เปลี่ยนคำสั่ง | ใช้กับ AI และกฎใหม่ |
| Canary | Mainnet จำกัด 10 USDT | ต้องยืนยัน LIVE ครบ |
| APPLY | ฟีเจอร์ใหม่เปลี่ยนคำสั่งจริงได้ | operator อนุมัติ และหลักฐานผ่าน |
| LIVE | Mainnet เต็ม | Testnet evidence, limit ที่ตรวจแล้ว, protection ตรวจแล้ว |
ตัวเลข canary: notional สูงสุด 10 USDT ตัวอย่างคำสั่งใช้ 6 USDT และค่าธรรมเนียมสูงสุด 0.02 USDT คิดเป็น 0.02/6 = 0.33% ของ notional
สถาปัตยกรรมโค้ด
bin / FastAPI routes
|
application services (supervision, verification)
|
domain services (strategy, risk, AI policies)
|
infrastructure adapters (execution, SQLite, Binance)
| Path | หน้าที่ |
|---|---|
ladder_dragon/strategy/ |
ladder, indicator, prediction, simulation, replay |
ladder_dragon/risk/ |
circuit breaker, limit, CAP, VaR |
ladder_dragon/execution/ |
transport, order, protection, fill, recovery, accounting |
ladder_dragon/ai/ |
AI advice, context, RAG, evidence |
ladder_dragon/persistence/ |
connection และ migration |
ladder_dragon/dashboard/ |
API และ telemetry |
ladder_dragon/verification/ |
ชุดตรวจ local, release, Testnet, Pi |
bin/ |
launcher บรรทัดคำสั่งเท่านั้น |
กฎการพึ่งพา: โค้ดใน package ห้าม import bin ส่วนโมดูล prediction ห้าม import ความสามารถสั่งคำสั่งของ exchange
เกณฑ์ที่บังคับด้วย harness
| เกณฑ์ | ค่า |
|---|---|
| โมดูลใหม่ | เกิน 500 บรรทัด = ไม่ผ่าน |
| ฟังก์ชันใหม่ | เกิน 120 บรรทัด = ไม่ผ่าน, 80 ถึง 120 = เตือน |
| โมดูลเดิม | ห้ามโตเกินขนาดรุ่นก่อน (ถ้าเกิน 500) |
| cycle ของ import | ห้ามเพิ่ม cycle ใหม่เทียบรุ่นก่อน |
| ownership | ทุกไฟล์ Python ต้องมีเจ้าของใน contract |
ติดตั้งและตรวจสอบ
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[test,dashboard]'
cp .env.example .env
ต้องใช้ Python 3.10 ขึ้นไป ห้าม commit .env, database, log, archive หรือ private key และใช้คีย์ Binance แบบอ่านอย่างเดียวแยกสำหรับ dashboard
| Profile | คำสั่ง | หมายเหตุ |
|---|---|---|
| local | -m bin.verification_harness --profile local |
รัน Semgrep |
| release | --profile release |
ใช้ SHA ที่เซ็นแล้วของ candidate สุดท้าย |
| testnet | --profile testnet |
หลักฐานบน Testnet |
| pi | --profile pi |
ไม่ติดตั้งหรือรัน Semgrep |
Exit code: 0 PASS, 1 FAILED, 2 BLOCKED การ deploy ใช้ SHA เต็ม 40 ตัวอักษรจากรายงาน PASS เท่านั้น และห้ามลบหลักฐานหรือลดเกณฑ์เพื่อเปลี่ยนผล
แพลตฟอร์มที่รองรับ
| แพลตฟอร์ม | ใช้ทำอะไร |
|---|---|
| Raspberry Pi OS 64-bit | เป้าหมายหลักของ production และ Testnet |
| Debian/Ubuntu | พัฒนา, backtest, Testnet |
| macOS | พัฒนา, ทดสอบ, backtest (DRY/Testnet) |
| Windows + WSL2 | พัฒนาและทดสอบ ไม่อ้างว่า Windows ตรง ๆ ใช้ LIVE ได้ |
Replay และ backtest
Replay อ่านเหตุการณ์ตลาดแบบ JSONL ตามลำดับเวลา จำลองข้อมูล L2 กับคิว price-time ในเครื่อง และไม่อ้างว่าสร้าง L3 ของ Binance ได้ตรงตามจริง หลักฐานต้องมี hash ของ archive และ latency ที่วัดได้ ผลจำลองถูกเทียบกับผลจริงของคำสั่งที่จบแล้ว และ calibration archive หนึ่งชุดมีรายงานตรวจสอบได้หนึ่งฉบับ
Dashboard และ Telegram
| ช่องทาง | เนื้อหา |
|---|---|
| Dashboard | สุขภาพโฮสต์, balance, protection, order, FIFO, HALT, SHADOW, latency |
| Telegram รายวัน | 08:00 Asia/Almaty รายงานเมื่อวาน กับ 7 และ 30 วัน |
| รายงานรายวัน | fill, ค่าธรรมเนียม, cash flow, FIFO net PnL |
| การเตือน | dedupe ตามการเปลี่ยนสถานะ, hysteresis, outbox บนดิสก์ |
ข้อจำกัด ความเสี่ยง และความเข้าใจผิด
Warning ซอฟต์แวร์นี้ส่งคำสั่งจริงได้ ไม่ใช่คำแนะนำการลงทุน และโปรเจกต์ไม่รับรองผลกำไร โดยค่าเริ่มต้นเป็น DRY
ข้อจำกัดที่โปรเจกต์ยอมรับเอง
| ประเด็น | รายละเอียด |
|---|---|
| สถานะ | experimental |
| หลักฐาน LIVE | canary หนึ่งรอบเท่านั้น |
| ยังต้องมี | วงจรที่ปิดเอง และ soak ต่อเนื่อง |
| งานค้าง | reconnect rate ของ transport v4 ยังไม่เสถียร |
| ข้อบกพร่องที่ระบุ | undercount ของ recent-error, Decimal-to-JSON ใน VWAP autotune |
| โค้ดเก่า | คำนวณ percentage ladder ด้วย float และ CAP fallback ที่ไม่ถูกต้อง |
| ผูกกับ exchange | ไม่เกี่ยวข้องและไม่ได้รับการรับรองจาก Binance |
ความเข้าใจผิดที่พบบ่อย
| ความเข้าใจผิด | ความจริง |
|---|---|
| fail-closed คือไม่มีทางขาดทุน | แค่ป้องกันสถานะที่ไม่รู้ ตลาดยังขาดทุนได้ |
| ผ่าน Testnet = พร้อม LIVE | LIVE ต้องผ่านการตรวจของแต่ละบัญชีและโฮสต์ |
| AI สั่งซื้อขายเอง | AI ไม่มีเครื่องมือสั่งคำสั่ง |
| ตัวเลข SHADOW คือผลจริง | SHADOW ไม่เปลี่ยนคำสั่ง จึงเป็นหลักฐานไม่ใช่กำไร |
| ผลคัดเลือกที่สูงยืนยันได้เอง | ต้อง freeze แล้วเก็บข้อมูลใหม่ |
ข้อผิดพลาดที่ควรหลีกเลี่ยงเมื่อนำไปใช้
- ข้าม Testnet แล้วใช้คีย์ Mainnet ทันที
- ใช้คีย์เดียวทั้งเทรดและ dashboard
- ตีความผล BLOCKED ว่าเกือบผ่าน
- ปรับเกณฑ์ให้หลวมเพื่อให้ผลเปลี่ยน
- เก็บ
.envหรือ database ไว้ใน Git
Checklist ก่อนขึ้น LIVE
| สถานะ | รายการ |
|---|---|
| 🟢 | ผ่าน Testnet จริง: BUY, fill, protection, exit |
| 🟢 | คีย์ dashboard แยกและอ่านอย่างเดียว |
| 🟡 | ตรวจ balance, filter, OCO/STOP, gap, restart recovery |
| 🟡 | circuit breaker และ limit ผ่านการตรวจ |
| 🟡 | verification profile release ได้ PASS บน SHA สุดท้าย |
| 🔴 | วงจรที่ปิดเอง และ soak ต่อเนื่อง ยังขาดตามสถานะโปรเจกต์ |
| ⚪ | ยืนยัน LIVE ครบทุกจุด ทำท้ายสุด |
ความหมาย: 🟢 โปรเจกต์ระบุว่าต้องทำและต้องมี, 🟡 ต้องตรวจเองต่อบัญชี, 🔴 ช่องว่างที่ยังเปิด, ⚪ ทำที่หลัง
ข้อมูลที่ไม่มีและข้อสมมติ
| ประเด็น | สถานะ |
|---|---|
| สูตรระยะห่างและขนาด ladder | ไม่มีในเอกสารที่อ่าน ต้องดูซอร์ส |
| ผล backtest หรือกำไรจริง | ไม่เผยแพร่ ไม่มีตัวเลขให้เปรียบเทียบ |
| เอกสารที่ยังไม่ได้อ่าน | DECISIONS, MISTAKES, CONFIGURATION, RUNTIME_SAFETY |
| ความถูกต้องของโค้ด | ไม่ได้อ่านซอร์สและไม่ได้รันระบบ |
[ASSUMPTION] |
ใช้ ladder ตามคำนิยามทั่วไปของตลาด |
Decision และขั้นต่อไป
Recommendation ถ้าจะเรียนรู้จากโปรเจกต์นี้ ให้เริ่มจากเอกสาร Runtime safety and reporting และ Implementation status เพื่อเก็บตารางตัดสินใจของ operator ก่อนอ่านโค้ด แล้วค่อยเอาแนวคิด journal, protection ที่ตรวจแล้ว และ SHADOW ไปใช้กับบอทของตัวเอง
Sources
- โปรเจกต์: https://github.com/potekhinskill/Ladder-Dragon (MIT, อ่านเมื่อ 2026-10-10)
- ไฟล์ที่อ่านจริง: README.md, docs/INTRODUCTION.md, docs/ARCHITECTURE.md
- ไฟล์ที่ไม่ได้อ่าน: docs/RUNTIME_SAFETY_AND_REPORTING.md, docs/IMPLEMENTATION_STATUS.md, docs/CONFIGURATION.md, DECISIONS.md, MISTAKES.md
ตัวย่อที่ใช้ในหน้านี้
ตัวย่อทางเทคนิคและการเทรด
| ตัวย่อ | ชื่อเต็ม | คืออะไร | อ่านค่าอย่างไร |
|---|---|---|---|
| ATR | Average True Range | ค่าเฉลี่ยของช่วงราคาที่แกว่งจริง | ATR สูง = ตลาดแกว่งกว้าง |
| EMA | Exponential Moving Average | ค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักข้อมูลใหม่ | ราคาเหนือ EMA = แนวโน้มขึ้นระยะสั้น |
| VWAP | Volume Weighted Average Price | ราคาเฉลี่ยถ่วงด้วยปริมาณ | ราคาต่ำกว่า VWAP = ถูกกว่าค่าเฉลี่ยวัน |
| ADX | Average Directional Index | ความแรงของแนวโน้ม ไม่บอกทิศ | ADX สูง = แนวโน้มแรง |
| OCO | One-Cancels-the-Other | คำสั่งคู่ ขาหนึ่งทำงานอีกขาถูกยกเลิก | ขาขายทำกำไรกับขาตัดขาดทุน |
| STOP | Stop order | คำสั่งที่ทำงานเมื่อราคาแตะจุดที่ตั้ง | STOP ที่ 95 = ขายเมื่อราคาลงถึง 95 |
| TP | Take Profit | คำสั่งขายเพื่อทำกำไร | TP ที่ 120 = ขายเมื่อราคาถึง 120 |
| CAP | Capital cap | เพดานเงินทุนที่ใช้ (ตามบริบทของโปรเจกต์) | CAP 30 = ใช้ได้ไม่เกิน 30 หน่วยเงินอ้างอิง |
| FIFO | First In, First Out | จับคู่ lot ที่ซื้อก่อนกับการขายก่อน | ดูตัวอย่าง 100 กับ 110 ด้านบน |
| PnL | Profit and Loss | กำไรขาดทุน | +24.82 = กำไรสุทธิ |
| L2 | Level 2 order book | ข้อมูลความลึกตลาดแบบรวมตามราคา | แต่ละราคามีปริมาณรวม |
| L3 | Level 3 order book | ข้อมูลระดับคำสั่งแต่ละรายการ | เห็นทุกคำสั่งแยกกัน |
| OHLC | Open High Low Close | แท่งราคาสี่ค่า | 100/105/98/103 = เปิด/สูง/ต่ำ/ปิด |
| VaR | Value at Risk | ขาดทุนสูงสุดที่คาดที่ระดับความเชื่อมั่นหนึ่ง | VaR 95% = 100 ถูกเกินไม่ถึง 5% ของวัน |
| HMM | Hidden Markov Model | โมเดลสถานะซ่อนจากลำดับข้อมูล | ใช้แยก regime |
| USDT | Tether | เหรียญที่อิงค่าเงินดอลลาร์ | 10 USDT ≈ 10 ดอลลาร์ |
| SOLUSDT | Solana ต่อ USDT | ชื่อคู่เทรด | ราคา SOL เป็น USDT |
| RAG | Retrieval-Augmented Generation | AI ดึงข้อมูลอ้างอิงมาประกอบคำตอบ | ในโปรเจกต์ใช้เฉพาะกรณีปิดจริงที่ PnL แน่ชัด |
| AI | Artificial Intelligence | ปัญญาประดิษฐ์ | ในที่นี้เป็นผู้ให้คำแนะนำ |
| BUY, SELL | ซื้อ, ขาย | ด้านของคำสั่ง | BUY 1 หน่วยที่ 100 = ซื้อ 1 หน่วยราคา 100 |
| UP, FLAT, DOWN | ป้ายผลทำนายทิศราคา | ขึ้น, ทรงตัว, ลง | DOWN แบบมั่นใจ = หยุด BUY |
| OS | Operating System | ระบบปฏิบัติการ | Raspberry Pi OS 64-bit |
| PASS, FAILED, BLOCKED | ผลของ verification | ผ่าน, ไม่ผ่าน, หลักฐานไม่ครบ | exit code 0, 1, 2 |
ตัวย่อด้านโหมดและระบบ
| ตัวย่อ | ชื่อเต็ม | คืออะไร | อ่านค่าอย่างไร |
|---|---|---|---|
| DRY | Dry run | โหมดจำลอง ไม่ส่งคำสั่ง | ค่าเริ่มต้น |
| LIVE | Live trading | โหมดส่งคำสั่งจริงบน Mainnet | ต้องยืนยันหลายจุด |
| SHADOW | Shadow mode | เก็บหลักฐานโดยไม่เปลี่ยนคำสั่ง | บันทึกแต่ไม่ลงมือ |
| APPLY | Apply mode | ให้กฎใหม่เปลี่ยนคำสั่งจริง | ต้อง operator อนุมัติ |
| HALT | Halt state | สถานะหยุด mutation ทุกชนิด | เห็น HALT = ไม่ส่งคำสั่งใหม่ |
| PANIC | Panic regime | สถานะตลาดอันตราย | ใช้ safety veto ไม่ใช่ expectancy |
| NO_TRADE | No trade | ตัวเลือกไม่เทรด ใช้เป็น baseline | เทียบกับกลยุทธ์ที่เทรด |
| CI | Confidence Interval | ช่วงความเชื่อมั่นของค่าที่ประมาณ | ขอบล่างบวก = ยังบวกในกรณีแย่ |
| SHA-256 | Secure Hash Algorithm 256-bit | ลายนิ้วมือของข้อมูล | เปลี่ยน 1 ไบต์ ค่าเปลี่ยนทั้งหมด |
| SHA | Git commit hash | รหัส commit | ต้องใช้ 40 ตัวอักษรเต็ม |
| JSON, JSONL | JavaScript Object Notation | รูปแบบข้อมูล, JSONL คือ 1 เหตุการณ์ต่อบรรทัด | ใช้ใน manifest กับ archive |
| SQLite | SQLite | ฐานข้อมูลไฟล์เดียว | ใช้เก็บ journal กับสถิติ |
| API | Application Programming Interface | ช่องทางเรียกบริการ | คีย์ API ของ Binance |
| WSL2 | Windows Subsystem for Linux 2 | Linux บน Windows | ใช้พัฒนาแทน Windows ตรง ๆ |
| CLI | Command-Line Interface | โปรแกรมที่รันจากบรรทัดคำสั่ง | ไฟล์ใน bin/ |
| ASGI | Asynchronous Server Gateway Interface | มาตรฐานเชื่อมเว็บ Python | ใช้กับ FastAPI |
| FastAPI | FastAPI | เฟรมเวิร์กเว็บ Python | ใช้ทำ dashboard |
| MIT | MIT License | สัญญาอนุญาตซอฟต์แวร์แบบเปิด | ใช้และแก้ไขได้ |
| Semgrep | Semgrep | เครื่องมือสแกนโค้ดตามกฎ | รันใน profile local กับ release |
| IP | Internet Protocol | ที่อยู่เครือข่าย | whitelist IP ของ Binance key |
| Pi | Raspberry Pi | คอมพิวเตอร์บอร์ดเล็ก | เป้าหมาย production หลัก |
แถวที่มาจากความรู้ทั่วไปไม่ใช่นิยามของโปรเจกต์: ATR, EMA, VWAP, ADX, OCO, STOP, TP, FIFO, PnL, L2, L3, OHLC, VaR, HMM, USDT, RAG, CI, SHA-256, JSON, SQLite, API, WSL2, CLI, ASGI, FastAPI, MIT, Semgrep, IP, Pi ส่วน DRY, SHADOW, APPLY, HALT, PANIC, NO_TRADE, CAP อ่านความหมายจากบริบทที่โปรเจกต์ใช้ ค่าตัวอย่างในคอลัมน์ "อ่านค่าอย่างไร" เป็นตัวอย่างประกอบของเรา
สัญลักษณ์ในสูตรและหน่วย
| สัญลักษณ์ | คืออะไร | อ่านค่าอย่างไร |
|---|---|---|
| p | p-value | ความน่าจะเป็นของผลที่เห็นถ้าไม่มีผลจริง p = 0.010 ต่ำมาก |
| m | จำนวนสมมติฐานที่ทดสอบพร้อมกัน | m = 3 ให้เกณฑ์แรก 0.05/3 |
| bps | basis point | 1 bps = 0.01% ดังนั้น 48 bps = 0.48% |
| x | เครื่องหมายคูณ | 1 x 100 = 100 |
Summary
| ประเด็น | ข้อสรุป |
|---|---|
| แกนของระบบ | หยุดเมื่อไม่แน่ใจ และทุกการตัดสินใจตรวจย้อนกลับได้ |
| ตัวป้องกัน | BUY ที่ fill ต้องมี OCO หรือ STOP ที่ตรวจแล้ว |
| AI | advisory เท่านั้น ไม่มีสิทธิ์สั่งคำสั่ง |
| เกณฑ์ปล่อยของใหม่ | SHADOW แล้ว freeze, 56 decision ใหม่, CI บวก, Holm |
| หลักฐานที่วัดแล้ว | canary หนึ่งรอบ ไม่มีตัวเลขกำไร |
| สถานะ | experimental ไม่รับรองผลกำไร |
- ใช้แนวคิดได้ทันที: journal ก่อนส่งคำสั่ง, protection ที่ตรวจแล้ว, แยก cash flow กับ PnL
- อย่าตีความเกณฑ์สถิติว่าเป็นหลักฐานของกำไร มันคือเกณฑ์กันความบังเอิญ
- ช่องว่างที่ต้องตรวจเอง: สูตร ladder, ผลย้อนหลัง, ความถูกต้องของโค้ด