BtcTakerFlowExhaustionReversalLS1H
สมมติฐาน
BTC การกลับตัวเมื่อกระแสคำสั่ง Taker หมดแรง, Long-Short (ตราสารเดียว BINANCE USD-M Perp, แท่งราคา 1 ชั่วโมง, เทรดสวนความไม่สมดุลสุดขั้วของฝ่ายรุกส่งคำสั่ง — เปิด Short สวนแรงซื้อ FOMO ช่วงปลาย / ซื้อสวนแรงขายตื่นตระหนก — ใช้ภาวะตลาดแกว่งในกรอบเป็นเงื่อนไข, สัญญาณอัตราส่วน Taker แบบใหม่, 3 พารามิเตอร์)
สมมติฐาน
กลยุทธ์การกลับเข้าสู่ค่าเฉลี่ยแบบ LONG-SHORT บนตราสารเดียว BTCUSDT.BINANCE (USD-M perp, แท่งราคา 1 ชั่วโมง) ขับเคลื่อนด้วย ORDER FLOW ไม่ใช่ราคา — เป็นอินพุตสัญญาณที่ยังไม่มีกลยุทธ์ที่ใช้งานจริงใดใช้ ในแต่ละแท่ง กลยุทธ์จะคำนวณความไม่สมดุลของฝ่ายรุกซื้อ/ขายแบบ taker (สัดส่วนปริมาณการซื้อแบบ taker) จากข้อมูลเสริมอัตราส่วน taker ของ Binance futures (ทางเลือกสำรอง: trade_ticks ที่จำแนกตามฝ่ายรุกส่งคำสั่ง) แล้วปรับให้เรียบในช่วงเวลาสั้น สมมติฐาน: เมื่อแรงซื้อจากฝ่ายรุกส่งคำสั่งรุนแรงสุดขั้วและต่อเนื่อง (เช่น สัดส่วนการซื้อแบบ taker ≥ 0.68 ตลอดช่วงที่ใช้ปรับให้เรียบ) ผู้ซื้อด้วยคำสั่งตลาดรายสุดท้ายที่เพิ่มเข้ามาคือ FOMO ช่วงปลาย / การถูกบังคับซื้อปิดสถานะ โดยไม่มีอุปสงค์ใหม่จากคำสั่ง limit รองรับอยู่เบื้องหลัง — เป็นการหมดแรงของฝ่ายรุกส่งคำสั่งที่เกิดก่อนการย่อตัวระยะสั้นอย่างสม่ำเสมอ จึง FADE ต่อภาวะนี้ SHORT ในทางกลับกัน แรงรุกแบบ taker-SELL ที่รุนแรงสุดขั้วและต่อเนื่อง (สัดส่วน ≤ 0.32) คือการขายด้วยคำสั่งตลาดจากความตื่นตระหนก/การยอมแพ้ ท่ามกลางคำสั่งเสนอขายที่บางลง — เปิดสถานะ LONG กลยุทธ์นี้จงใจอยู่ในตระกูล DIFFERENT เมื่อเทียบกับทุกอย่างที่กำลังล้มเหลวในโรงงานนี้: เป็น NOT การตามแนวโน้ม (สุสานกลยุทธ์ภาวะตลาดเดียวที่ตายจาก 209 — กลยุทธ์นี้เทรดสวนและกระจายไปตามภาวะตลาด โดยสร้างผลตอบแทนได้ในทุกทิศทางที่กระแสคำสั่งยืดตัวเกินไป), NOT การทำ carry จาก funding (ตระกูลตะกร้าที่อิ่มตัวและตายเพราะค่าธรรมเนียม — ความได้เปรียบของกลยุทธ์นี้คือการเคลื่อนไหวกลับตัว 0.4–0.6% ไม่ใช่กระแสเงินสดต่ำกว่าหนึ่งเบสิสพอยต์), NOT ตะกร้า N ขา (เป็นตราสารเดียว มีการจับคู่คำสั่ง 2 ครั้งต่อการเปิดและปิดสถานะหนึ่งรอบ จึงหลีกเลี่ยงกำแพงค่าธรรมเนียม 2N×10bps ของ L12) และ NOT ออปชัน (ไม่มีข้อจำกัดด้านจำนวนเทรด — เหตุการณ์กระแสคำสั่งสุดขั้วเกิดขึ้นหลายสิบครั้งต่อปี ทำให้มีเทรดหลายร้อยครั้งเพื่อวัดความได้เปรียบได้อย่างน่าเชื่อถือ) กลยุทธ์นี้ใช้ภาวะตลาด NON-TRENDING เป็นเงื่อนไข (เทรดสวนเฉพาะเมื่อตัวกรองแนวโน้มระยะยาวบ่งชี้ว่าตลาดทรงตัว/แกว่งในกรอบ) เพื่อหลีกเลี่ยงรูปแบบความล้มเหลวที่แท้จริงเพียงอย่างเดียว — กระแสคำสั่งสุดขั้วที่เป็นการเคลื่อนไหวต่อเนื่องแบบ INFORMED แทนที่จะเป็นการหมดแรง จำนวนพารามิเตอร์ที่น้อยเพียง 3 ตัว (ช่วงเวลาปรับกระแสคำสั่งให้เรียบ, เกณฑ์ความไม่สมดุล, การออกจากสถานะ) ช่วยลดความเสี่ยงของการปรับให้เข้ากับข้อมูลมากเกินไป
สมมติฐาน
Iteration 3 แก้ปัญหาความล้มเหลวเพียงอย่างเดียวของ Layer-4 QA: trade starvation (6 เทรด/363d) จาก compound gate ที่เข้มเกินไป ไม่มีการเปลี่ยนแปลงกลไก, import หรือ signal logic (สิ่งเหล่านั้นผ่าน Layers 1-3 แล้ว); มีเพียงการผ่อน throttle ของ entry/exit สามตัวเพื่อให้กลยุทธ์ผ่านขั้นต่ำสำหรับการวัดผลประมาณ 100 เทรด entry_z 1.2->0.8 ทำงานกับ flow extreme ได้มากขึ้น ขณะยังอยู่นอก noise และสูงกว่าต้นทุน taker แบบไป-กลับ 0.10% (reversal ตาม thesis คือ 0.4-0.6%) regime_threshold 0.55->0.65 รับแท่งที่แกว่งในกรอบได้มากขึ้น ทำให้ conjunction ระหว่าง ranging-AND-extreme-z หยุดเพิ่มความหายากแบบทบกัน ขณะยังตัด strong trends ออก (failure mode แบบ informed-continuation) exit_z 0.3->0.25 และ max_hold_bars 24->10 เร่ง turnover ทำให้กลยุทธ์กลับสู่ flat เร็วขึ้นและเพิ่มจำนวน entry windows ต่อปี สัญญาณ rolling-z ที่ไม่ขึ้นกับสเกล (L5) และการออกแบบแบบ contrarian, regime-distributed, single-instrument ซึ่งทำให้แตกต่างจากสุสาน trend/carry/basket/options ยังคงเดิม
สมมติฐาน
กลยุทธ์เทรดสวนการหมดแรงของกระแสคำสั่ง taker บน perp เดียวที่มีค่าคาดหวังติดลบ ไม่มีความได้เปรียบ และติดข้อจำกัดด้านข้อมูลเสริม (L73/L55) profit_factor 0.62, total_return -5.29%, Sharpe -0.71 (CI [-1.35, 0.02]), ค่าคาดหวัง -$62.6/เทรด, avg_trade_return_pct 0.0146% (~ศูนย์, ขาดทุนสุทธิ); avg_loss > avg_win โดยมี win_rate 0.447 ดังนั้นการเทรดสวนจึงอยู่ผิดฝั่งของกระแสคำสั่ง ประเด็นสำคัญคือ แม้จะมี 58,512 แท่งตลอด 2019-2026 แต่ ALL 85 เทรด และ 100% ของผลตอบแทนกลับกระจุกอยู่ในช่วง 2026 ช่วงเดียวที่ยาวประมาณ 6 เดือน เนื่องจากฟีดข้อมูลเสริม taker_ratio ครอบคลุมเพียงช่วงล่าสุด — annual_returns={2026:-5.32}, รายเดือน 2026-03..08 — จึงไม่สามารถสร้างการทดสอบ walk-forward แบบ 3 ช่วงร่วมกับชุด holdout 20% ได้ นี่เป็นรูปแบบเดียวกับกลยุทธ์ perp เดียวที่ใช้กระแสคำสั่งเป็นเงื่อนไข ซึ่งถูกยกเลิกไปแล้วสามครั้งในชุดนี้ (BtcTakerAggressionPersistence, AvaxTakerAggressorDominance, EthTakerFlowBreakout) การปรับพารามิเตอร์ไม่อาจพลิกความได้เปรียบต่อเทรดที่ติดลบให้เป็นบวก และตัวปรับค่าที่เหมาะสมไม่สามารถซื้อความครอบคลุมตามปฏิทินที่ฟีดไม่มีได้ ไม่คุ้มกับการใช้เวลา 2 ชั่วโมงในการปรับค่าให้เหมาะสม รูปแบบความล้มเหลว: fee_edge/no_edge กลยุทธ์เทรดสวนบน perp เดียวที่ใช้กระแสคำสั่งเป็นเงื่อนไข โดยมีช่วงข้อมูลเสริมเฉพาะช่วงล่าสุด
การนำไปใช้
Long-short order-flow mean-reversion บน BTCUSDT.BINANCE USD-M perp (แท่ง 1h) คำนวณ z-score แบบ rolling ของ taker-buy aggressor fraction ที่ทำให้เรียบจากข้อมูลเสริม Binance taker_ratio; fade การซื้อของ aggressor ที่รุนแรงและต่อเนื่อง SHORT (exhaustion ระยะท้ายของ FOMO) และการขายของ aggressor ที่รุนแรง LONG (panic capitulation) เฉพาะใน regime ที่แกว่งในกรอบ (Kaufman efficiency ratio ต่ำ) ออกจากสถานะเมื่อ flow กลับสู่ปกติ, stop loss แข็งที่ 1% หรือถึง time cap เป็น single-instrument, leverage 1.0, ปรับได้ที่ core tunables 3 รายการ
ผลการตรวจสอบ
CLEAN RESTART 2026-09-04 — ประวัติคำตัดสินและบันทึกการเรียนรู้ของรันนี้ถูกลบออก และเริ่มต้นใหม่จากการตรวจสอบ การยุติก่อนหน้านี้เกิดจากไปป์ไลน์ ไม่ใช่ตลาด: harness ของ Layer-2 ผูก helper ที่เป็น @staticmethod ผิด (แก้ไขแล้ว), QA ออกคำตัดสินประสิทธิภาพขั้นสุดท้ายจาก smoke test ที่ยังไม่ได้ optimize (นำออกแล้ว — ตอนนี้ QA ตัดสินเฉพาะความถูกต้องเท่านั้น) และ sandbox timeout เกิดจากการขาดแคลน backtest slot (แก้ไขแล้ว) สมมติฐานและโค้ดกลยุทธ์ไม่เปลี่ยนแปลง ตรวจสอบโค้ดตามเนื้อแท้ของมัน ส่วนประสิทธิภาพจะตัดสินภายหลังด้วย backtest เต็มรูปแบบและ optimizer
ผลการตรวจสอบ
ลดค่าเริ่มต้นของ taker_lag_seconds เป็นประมาณ 7200-14400s เพื่อให้ feed ที่ล้าสมัยยับยั้ง entry
ผลการตรวจสอบ
taker_lag_seconds มีค่าเริ่มต้นเป็น 90000 (25 ชั่วโมง) ดังนั้น _current_fraction จึงยอมรับข้อมูลสังเกต taker_ratio ที่เก่าได้ถึงประมาณ 25 ชั่วโมง ก่อนจะคืนค่า None นี่ไม่ใช่การใช้ข้อมูลอนาคต (ขอบเขต bisect จำกัดอยู่ด้านเดียวที่แท่ง ts_event <= ts_init) แต่เมื่อฟีดมีช่วงข้อมูลขาดหาย กลยุทธ์จะเทรดโดยอาศัยค่ากระแสคำสั่งที่เก่าแล้วหนึ่งวัน
ผลการตรวจสอบ
Append ไปยัง _frac_buf เฉพาะเมื่อ self._tk_ts[idx] เลื่อนไปข้างหน้า
ผลการตรวจสอบ
_current_fraction คืนค่าการสังเกตล่าสุดโดยไม่คำนึงว่าเป็นข้อมูลใหม่หรือไม่ ดังนั้น fraction เดิมจึงถูก append ซ้ำไปยัง _frac_buf ในแต่ละแท่งจนกว่า feed จะเลื่อนไปข้างหน้า ทำให้ค่า baseline std ของ rolling-z ถูกบีบอัดลงเล็กน้อย ไม่ใช่ปัญหาด้านความถูกต้องที่ cadence 1h
ทบทวนผลทดสอบย้อนหลัง
การใช้งาน single-instrument ที่สะอาด (2 fills/รอบไป-กลับ ไม่มี basket fee wall), มี regime gate, ปรับได้เฉพาะ core tunables 3 รายการ — ทนต่อ overfit โดยโครงสร้าง
ทบทวนผลทดสอบย้อนหลัง
อินพุตของ signal order-flow แตกต่างจากกลุ่ม trend/carry/basket ที่ล้มเหลวอย่างแท้จริง
ทบทวนผลทดสอบย้อนหลัง
ขาดทุนสุทธิและไม่มี edge: profit_factor 0.62, total_return -5.29%, Sharpe -0.71 (CI [-1.35, 0.02]), expectancy -$62.6/เทรด, avg_trade_return_pct 0.0146% (~ศูนย์และมีเครื่องหมายลบ)
ทบทวนผลทดสอบย้อนหลัง
avg_loss ($301) สูงกว่า avg_win ($232) โดยมี win_rate 0.447 — exhaustion-fade อยู่ผิดฝั่งของการเคลื่อนไหวของ flow อย่างเป็นระบบ
ทบทวนผลทดสอบย้อนหลัง
ข้อจำกัดด้านข้อมูลเสริม (L73): ทั้ง 85 เทรดและ 100% ของผลตอบแทนกระจุกอยู่ในช่วง 2026 ช่วงเดียวที่ยาวประมาณ 6 เดือน (annual_returns={2026:-5.32}, รายเดือน 2026-03..08) เนื่องจากฟีด taker_ratio ครอบคลุมเพียงส่วนล่าสุดของประวัติ 2019-2026 OHLCV — ตัวอย่างที่ใช้ได้จริงไม่สามารถรองรับการทดสอบ walk-forward แบบ 3 ช่วง + ชุด holdout 20%
ทบทวนผลทดสอบย้อนหลัง
commission_pct_of_gross 47% — ค่าธรรมเนียมบวก impact ใช้ gross ไปแล้วครึ่งหนึ่ง แม้ยังไม่รวม edge ที่มีเครื่องหมายลบ
ทบทวนผลทดสอบย้อนหลัง
สอดคล้องกับคลาส order-flow-gated single-perp ที่ไม่มีผู้รอดชีวิตเลย (BtcTakerAggressionPersistence, AvaxTakerAggressorDominance, EthTakerFlowBreakout ถูกยุติทั้งหมด) และคลาส L55 sub-1.15-PF single-name fade
ทบทวนผลทดสอบย้อนหลัง
6mo (2026 เท่านั้น)
ทบทวนผลทดสอบย้อนหลัง
หลายปี
Iteration History
การตรวจสอบล้มเหลว (Layer 3 — sandbox backtest): ไม่มีการสร้างเทรด
ประเภทแท่งที่ใช้: BTCUSDT.BINANCE-1-HOUR-LAST-EXTERNAL, ประมวลผลแท่งแล้ว: 8729
การวินิจฉัย: should_enter() คืนค่า side 0 ครั้งจากแท่งที่ประเมิน 8679 แท่ง -> ENTRY CONDITION ของคุณไม่เคยทำงาน ผ่อน logic / threshold ของ entry
ตรวจสอบให้แน่ใจว่ากลยุทธ์สร้างเทรดได้ด้วยข้อมูลและพารามิเตอร์ที่กำหนด
Iteration History
การตรวจสอบไม่ผ่าน (ชั้น 4 — การทบทวน QA):
- เงื่อนไขเข้าสถานะทำงานน้อยครั้งเกินกว่าจะให้ผลที่วัดได้ สภาพแวดล้อม sandbox สร้างเพียง 6 เทรดใน 363 วัน (~6 เทรด/ปี) เงื่อนไขแบบผสมกำหนดให้เกิดพร้อมกันทั้ง (a) ภาวะตลาด RANGING (อัตราส่วนประสิทธิภาพ Kaufman < regime_threshold), (b) ค่า z แบบเลื่อนช่วงของสัดส่วนการซื้อแบบ taker อยู่ในระดับสุดขั้ว (|z| >= entry_z=1.2) และ (c) กลยุทธ์อยู่ในสถานะ FLAT จากนั้นถือสถานะนานถึง 24 แท่ง -- จึงเกิดการเข้าสถานะจริงน้อยครั้ง แม้ค่า z จะข้ามแถบเกณฑ์บ่อยก็ตาม นี่คือรูปแบบความล้มเหลว L16 แบบเดียวกันทุกประการ ('BTC ความไม่สมดุลของฝ่ายรุกส่งคำสั่ง 4H 16 เทรด', 'BTC อัตราส่วน taker 16 เทรด') และในกรณีนี้เป็น WORSE (6 เทรด) แม้ทดสอบย้อนหลังหลายปีด้วยอัตรานี้ จำนวนเทรดก็ยังต่ำกว่าเกณฑ์ขั้นต่ำที่วัดผลได้ประมาณ 100 เทรดมาก เหตุผลสนับสนุนของสมมติฐานเอง ('หลายสิบครั้งต่อปี มีเทรดหลายร้อยครั้งเพื่อวัดความได้เปรียบได้อย่างน่าเชื่อถือ') ถูกผลลัพธ์ที่มีเพียง 6 เทรดหักล้างโดยตรง
- เนื่องจากผลลัพธ์อาศัย 6 เทรด ตัวชี้วัดหลักทุกตัวจึงไม่สามารถใช้วินิจฉัยได้: Sharpe 0.84 แต่ sharpe_ci_low -1.08 (CI คร่อมศูนย์), profit_factor 10.26 และ win_rate 0.667 จากตัวอย่าง 6 รายการ, return_skew 7.23 / ความโด่ง 94.8 และ avg_win $300 เทียบกับ avg_loss $58 -- largest_win $662 เพียงรายการเดียวเป็นแหล่งของผลตอบแทนบวกทั้งหมด (+1.08%) ไม่มีตัวชี้วัดใดในนี้ที่เชื่อถือได้ว่าเป็นหลักฐานของความได้เปรียบ นี่เป็นผลโดยตรงจากปัญหาจำนวนเทรดข้างต้น ไม่ใช่ข้อบกพร่องอีกประการที่แยกเป็นอิสระ
Iteration History
การตรวจสอบล้มเหลว (Layer 4 — การทบทวน QA):
- edge หลักเป็นลบและต่ำกว่าค่าธรรมเนียม ทำให้ข้ออ้างศูนย์กลางของสมมติฐานเป็นเท็จ สมมติฐานระบุว่า fade นี้จับ “0.4-0.6% reversal move” แต่ sandbox วัดได้ avg_trade_return_pct -0.025% -- เป็นลบ และต่ำกว่าทั้งข้ออ้างและค่าขั้นต่ำของค่าธรรมเนียม futures 0.15% อยู่หนึ่งลำดับขนาด หลักฐานยืนยันว่าไม่มี edge จริง (ไม่ใช่เพียง noise): profit_factor 0.518, Sharpe -1.53 (CI [-2.73, +0.07]), win_rate 0.50 โดยมี reward/risk INVERTED (avg_loss $338 ~= 2x avg_win $175), omega_ratio 0.35 ที่สำคัญ สิ่งนี้เกิดขึ้น BECAUSE การผ่อนเกณฑ์ใน iter-3 (entry_z 1.2->0.8, regime_threshold 0.55->0.65) เพิ่มจำนวนเทรด: entry เพิ่มเติมเกิดขึ้นกับ flow extreme ที่อ่อนกว่าและไม่ revert NOT ทำให้ edge เฉลี่ยติดลบ นี่เป็นหลักฐานโดยตรงว่า signal taker-flow-exhaustion ไม่มี reversal alpha ที่สูงกว่าต้นทุน -- แท่งที่มี aggressor-imbalance รุนแรงไม่ได้ mean-revert อย่างเป็นระบบที่ threshold เหล่านี้
- จำนวนเทรดยังต่ำกว่าขั้นต่ำสำหรับการวัดผล iter-3 เพิ่มเทรดจาก 6 เป็น 26 ตลอด 363 วัน (~26/ปี) แต่ยังต่ำกว่าขั้นต่ำประมาณ 100 เทรดที่จำเป็นต่อการแยก edge ออกจาก noise อย่างมาก (L16; ความพยายามของ sibling BTC ที่ใช้ aggressor-imbalance/taker-ratio จบลงที่ 16 เทรด) เมื่อมี 26 เทรดและ skew -4.83 / kurtosis 43 (การขาดทุน -$945 ครั้งเดียวมีอิทธิพลเหนือผลลัพธ์) metrics ยังคงถูกครอบงำด้วย noise -- ช่วงของ Sharpe CI ครอบคลุมตั้งแต่ -2.73 ถึง +0.07 นักพัฒนาติดอยู่ระหว่าง regime ที่ล้มเหลวสองแบบ: gate เข้มขึ้น -> วัดผลไม่ได้ (6 เทรด), gate ผ่อนลง -> edge พอวัดได้แต่เป็นลบ (26 เทรด, -0.025%/เทรด) ทั้งสองแบบล้มเหลว
Stratmill เป็นเครื่องมือสำหรับการวิจัยและ paper trading ไม่ใช่คำแนะนำทางการเงินหรือโบรกเกอร์ ผลการทดสอบย้อนหลังและ paper trading เป็นเพียงสมมติฐาน การเทรดมีความเสี่ยงที่จะขาดทุน