Pairs Trading 5 · Cut loss ด้วย Volatility Model
เมื่อคู่ที่เคยเดินด้วยกันฉีกออกจากกัน Volatility Model ช่วยกำหนดขนาดสถานะและระยะ Cut loss ได้ แต่ราคาที่ปิดจริงอาจทำให้ขาดทุนเกินงบ
ตอน 2 อธิบายว่า Cointegration เป็นคุณสมบัติของกระบวนการภายใต้เงื่อนไขหนึ่ง ส่วน ตอน 3 แยกสัญญาณออกจากราคา fill เราจะใช้ Volatility Model วางขนาดสถานะและระยะ Cut loss โดยตรึงงบขาดทุนของสถานะเดิมไว้ แม้ vol จะเพิ่มขึ้น
เมื่อกรอบนโยบายอัตราแลกเปลี่ยนเปลี่ยนไป
ความผันผวนต่ำอาจสะท้อนการแทรกแซงหรือกรอบอัตราแลกเปลี่ยน เมื่อกรอบนั้นถูกยกเลิก กระบวนการสร้างราคาอาจเปลี่ยนไปด้วย
| เหตุการณ์ | สิ่งที่เปลี่ยน | สิ่งที่คนถือคู่ควรตั้งคำถาม |
|---|---|---|
| ปอนด์อังกฤษ · 16 กันยายน 1992 | อังกฤษระงับการอยู่ใน ERM หลังการแทรกแซงและแรงกดดันต่อตลาดเงิน | หากความสัมพันธ์กับมาร์กเยอรมันพึ่งกรอบ ERM อยู่ จะยังใช้ระดับเดิมเป็นเป้าหมายได้หรือไม่? |
| เงินบาท · 2 กรกฎาคม 1997 | ไทยเปลี่ยนจากระบบอัตราแลกเปลี่ยนคงที่อิงตะกร้าเงินเป็นลอยตัว | ความนิ่งในอดีตประเมินความเสี่ยงหลังเปลี่ยนระบบต่ำไปหรือไม่? ควรทบทวนสมมติฐานที่เคยอิงตะกร้าเงินเดิมด้วย |
| ฟรังก์สวิส · 15 มกราคม 2015 | SNB ยกเลิกอัตราขั้นต่ำ 1.20 CHF ต่อ EUR | ถ้า Long EUR / Short CHF โดยเชื่อว่าอัตราขั้นต่ำจะอยู่ต่อ ความเสี่ยงที่ไม่เคยปรากฏในช่วงสงบคืออะไร? |
แหล่งประวัติศาสตร์: Bank of England: กรกฎาคม–กันยายน 1992, ธปท.: บทเรียนวิกฤตปี 1997 และ งานวิจัย ธปท. เรื่องประวัติระบบอัตราแลกเปลี่ยน, ประกาศ SNB วันที่ 15 มกราคม 2015
ทั้งรัฐบาลและธนาคารกลางมีบทบาทต่างกันในแต่ละเหตุการณ์ ตารางนี้เป็นตัวอย่างการเปลี่ยนกรอบนโยบาย ไม่ใช่ผลทดสอบว่าคู่เงินเหล่านี้เคย cointegrated หรือหลักฐานว่ากลยุทธ์ใดจะทำกำไรได้
EUR/CHF: อัตราขั้นต่ำหายไปในวันที่ 15 มกราคม 2015
SNB ยกเลิก minimum exchange rate ที่ 1.20 CHF ต่อ EUR ในวันดังกล่าว กรอบนี้เป็นอัตราขั้นต่ำ ไม่ใช่คำสัญญาว่าราคาจะเท่ากับ 1.20 ตลอดเวลา การวางแผนว่าคู่จะกลับสู่เส้นนั้นหลังประกาศจึงต้องมีเหตุผลใหม่รองรับ
ข้อมูลอ้างอิง ECB ให้ค่า 1.2010 CHF ต่อ EUR วันที่ 14 มกราคม และ 1.0280 วันที่ 15 มกราคม คำนวณการเปลี่ยนแปลงเป็น หมายถึงหนึ่งยูโรแลกฟรังก์ได้น้อยลง ตัวเลขนี้ไม่ใช่การบอกว่าฟรังก์แข็งค่า 14.40% ในการกลับด้าน quote และไม่ใช่ราคาต่ำสุดระหว่างวัน
เลื่อนกราฟแนวนอนบนจอเล็ก หรือแตะภาพเพื่อเปิดขนาดเต็ม
ECB ระบุว่าอัตราอ้างอิงมีไว้เพื่อให้ข้อมูลและไม่ควรใช้เป็นราคาทำธุรกรรม จึงใช้ชุดนี้ศึกษาขนาดการเปลี่ยนแปลงและข้อจำกัดของ vol forecast เท่านั้น ไม่ใช้สร้าง Backtest ที่อ้างว่าส่งคำสั่งและปิดได้ตามตัวเลขเหล่านี้ คำอธิบายอัตราอ้างอิง ECB
เก็บ CSV ต้นฉบับพร้อม metadata และ วิธีคำนวณกับ SHA-256 ไว้ตรวจย้อนหลัง ใช้เฉพาะวันที่ ECB มีข้อมูล ไม่เติมราคาให้วันหยุด และไม่ใช้ข้อมูลหลังเหตุการณ์ไปประมาณ vol ก่อนเหตุการณ์
Vol ของระดับ Spread กับ Vol ของการเปลี่ยนแปลง
ให้ hedge ratio h คงที่ และราคาทั้งสองขาอยู่ในสกุลบัญชีเดียวกัน
SD ของ ระดับ spread ที่ใช้ทำ z-score ตอบว่า s อยู่ห่าง mean แค่ไหน ส่วน conditional volatility ของ การเปลี่ยนแปลง spread ตอบว่าในหนึ่งช่วงถัดไปมันอาจเคลื่อนมากเพียงใด ระยะ Cut loss ในบทนี้ใช้ vol ของการเปลี่ยนแปลง spread
| ปริมาณ | ใช้ตอบอะไร | สิ่งที่ยังสรุปไม่ได้ |
|---|---|---|
| ห่างจาก mean ของระดับ spread กี่ SD | จะกลับมาแน่นอนหรือภายในกี่วัน | |
| ของ | ขนาดความผันผวนหนึ่งช่วงถัดไปภายใต้โมเดล | ราคาจะไม่กระโดดเกินค่านี้ |
| การเคลื่อนไหวที่เพิ่งเกิดใหญ่กว่าที่โมเดลเคยประเมินแค่ไหน | ความน่าจะเป็นแบบ Normal หรือการยืนยัน structural break |
ถ้าถือ Long spread จำนวน q หน่วยเป็น และไม่เปลี่ยน h กำไรขาดทุนก่อนต้นทุนในหนึ่งช่วงคือ ดังนั้น vol ของ P&L เป็น เมื่อเปลี่ยน h ระหว่างถือ ต้องทำบัญชีการปรับ hedge ด้วย ไม่ใช้ส่วนต่างของ spread ที่นิยามใหม่แทนเงินที่ได้จริง
เริ่มด้วย EWMA ที่ตรวจลำดับเวลาได้
ภายใต้การประมาณว่า mean ของ x ต่อหนึ่งช่วงเป็นศูนย์ EWMA อัปเดต second moment เป็น
ค่า λ สูงทำให้จำอดีตนานขึ้น ค่า λ ต่ำตอบสนองต่อข้อมูลล่าสุดมากขึ้น ค่า 0.94 เป็นจุดเริ่มต้นที่ใช้กับข้อมูลรายวันใน RiskMetrics ไม่ใช่ค่าที่เหมาะกับทุกคู่และทุกความถี่ RiskMetrics Technical Document, บท 5
เมื่อ x มี mean ที่ไม่เป็นศูนย์ การใช้ ตรง ๆ จะรวมส่วนของ mean เข้าไปด้วย ถ้าจะสร้างโมเดล mean ให้ใช้ error ที่ได้จากการพยากรณ์ด้วยข้อมูลอดีต ไม่หักค่าเฉลี่ยจากข้อมูลทั้งช่วงย้อนหลัง ค่า vol ที่เพิ่มเพราะ drift ไม่ได้ทำให้ spread กลับมา stationary
ในกรณี ECB เราใช้ ซึ่งเป็น simple return ของอัตราอ้างอิง จึงแสดง σ เป็นเปอร์เซ็นต์ ส่วนตัวทดลองสองขาด้านล่างใช้ และแสดง σ เป็น USD ต่อหน่วย ทั้งสองใช้สูตรเดียวกันแต่เป็นคนละหน่วย
เริ่ม variance จากค่าเฉลี่ยกำลังสองของ returns 20 จุดแรก วันที่ 2–29 ตุลาคม 2014 จากนั้นคำนวณ forecast ไปข้างหน้าทีละจุด ก่อนเห็นข้อมูลวันที่ 15 มกราคม ได้ σ ประมาณ 0.068% แต่การเปลี่ยนแปลงที่เกิดขึ้นมีขนาด 14.405% หลังนำเหตุการณ์นี้เข้ามาแล้ว ค่า forecast สำหรับจุดถัดไปจึงเพิ่มเป็นประมาณ 3.529%
เลื่อนกราฟแนวนอนบนจอเล็ก หรือแตะภาพเพื่อเปิดขนาดเต็ม
ถ้าใช้ σ ที่อัปเดตด้วย shock วันนี้ไปอ้างว่าโมเดลรู้อยู่แล้วก่อน shock จะเป็นการสลับเวลา โมเดลเรียนรู้จากสิ่งที่เกิดแล้วได้ แต่สูตรนี้ไม่ได้มีข้อมูลการตัดสินใจนโยบายที่ยังไม่ประกาศ
การประมาณ Vol ด้วย GARCH
GARCH(1,1) เพิ่มส่วนคงที่และแยกน้ำหนักของ shock กับ variance เดิม
ในสูตรนี้ คือ forecast error จาก mean model ใช้ และภายใต้เงื่อนไขมาตรฐาน เพื่อให้ unconditional variance มีค่าจำกัด ประมาณ mean model และพารามิเตอร์จาก train เท่านั้น แล้วเลือกวิธีบน validation ที่แยกตามเวลา บทนี้ใช้ EWMA ในการคำนวณ ส่วน GARCH แสดงเฉพาะสูตร ยังไม่ได้ประมาณพารามิเตอร์ การเปลี่ยนโมเดล variance ไม่ได้ทำให้นโยบายกระโดดหรือ liquidity gap หายไป
ตั้งขนาดสถานะและระยะ Cut loss ก่อนเข้า
สมมติสังเกตข้อมูลถึง close e−1 แล้วกำหนดขนาดสำหรับเข้า close e ให้ R เป็นงบขาดทุน ก่อนต้นทุน ต่อรอบ และ G เป็นเพดาน gross notional เป้าหมาย
D เป็นระยะในหน่วย spread ส่วน q เป็นจำนวนหน่วยของขา A กำหนดหน่วยและราคาทั้งสองขาให้สอดคล้องกัน หาก σ เล็กมาก ขนาดจาก R/D จะโตมาก จึงต้องมีเพดาน gross, ข้อจำกัด margin/liquidity และปฏิเสธการเข้าเมื่อค่าประมาณใช้ไม่ได้ ราคาที่ fill อาจทำให้ gross จริงต่างจากเป้าหมายได้
ในตัวอย่าง Long spread ใช้เงื่อนไขขาดทุนต่อหน่วย ส่วน Short spread ใช้ ตรวจหลัง close t แล้วปิดทั้งสองขาที่ close t+1 ตามราคาที่มีจริง ห้ามแทนราคา fill ด้วยเส้น Stop เมื่อราคากระโดดผ่านไปแล้ว
kσ เป็นกติกาวางระยะ ไม่ใช่เพดานขาดทุนที่รับประกัน และไม่ใช่ VaR ของการถือหลายวันโดยอัตโนมัติ การใช้ ขยายจากหนึ่งวันเป็น H วันต้องตรวจสมมติฐานการสะสม variance ด้วย ทั้งความสัมพันธ์ข้ามเวลาและ jump ทำให้การขยายแบบง่ายคลาดเคลื่อนได้
สำหรับเงินทุน 10,000 USD ในตัวทดลอง ตั้ง R=100 USD หรือ 1% ของเงินทุนก่อนต้นทุน และ G=20,000 USD ต้องนับค่าธรรมเนียมเพิ่ม ในการใช้งานจริงควรกันงบต้นทุนและตรวจเพดานขาดทุนสุทธิแยกต่างหาก ตัวเลข 1%, k และ G นี้เป็นค่าประกอบการสอน ไม่ใช่ข้อแนะนำให้ใช้กับทุกบัญชี
Stop ที่ขยายตาม Vol เพิ่มงบขาดทุนของสถานะเดิม
ถ้าตั้ง Stop ใหม่ทุกวันเป็น หลังเห็น shock ระยะอาจขยายขึ้นมาก ขณะที่ q ของสถานะเดิมยังเท่าเดิม งบขาดทุนที่ยอมรับโดยปริยายจึงโตตามไปด้วย ในช่วงสงบระยะนี้อาจแคบลงและปิดเร็วกว่าวิธีตรึงก็ได้ ผลไม่ได้ดีกว่าหรือแย่กว่าทุกเส้นทาง
ใช้ vol ล่าสุดประเมินความเสี่ยงและกำหนดขนาดสถานะใหม่ ส่วนสถานะเดิมให้ยึดงบขาดทุนที่ตั้งไว้ตอนเข้า หากจะลดสถานะหรือบีบ Stop ให้แคบลง ต้องนับการซื้อขายจริง ไม่ขยายวงเงินเพียงเพราะโมเดลปรับตัวตามราคาที่เสียไปแล้ว
เลื่อนกราฟแนวนอนบนจอเล็ก หรือแตะภาพเพื่อเปิดขนาดเต็ม
ทดลองให้คู่ฉีกออก แล้วดูว่า Stop ปิดได้เมื่อไร
ตัวทดลองกำหนด หน่วยราคาเป็น USD เป็นคู่สินทรัพย์สมมติ ไม่ใช่ EUR/CHF จริง กำหนดวันเข้าไว้ล่วงหน้าเพื่อศึกษาผลของกติกา Stop โดยยังไม่มีสัญญาณหา alpha ใช้ข้อมูลถึงวัน 59 คำนวณ σ และ q เปิด close 60 กรอบสถานการณ์ใหม่เริ่มวัน 80 และปิดไม่เกิน close 100 ตามวันสิ้นสุดที่กำหนดไว้
ลองสามอย่างตามลำดับ:
- ใช้ค่าตั้งต้น λ=0.94, k=3 กับ gap 12 USD ทั้งสองวิธีเห็น Stop วันที่ 80 และ fill วันที่ 81 ผลสุทธิประมาณ −432.24 USD เทียบกับงบก่อนต้นทุน 100 USD การมี Stop ไม่ได้ทำให้ปิดขาดทุนได้แค่ 100
- เปลี่ยน λ เป็น 0.80 และ k เป็น 5 กรณีกระโดดเดิมจะทำให้วิธีขยับ Stop ยอมรอถึงสัญญาณวัน 87 ก่อน fill วัน 88 ส่วนวิธีตรึง fill วัน 81 นี่คือพารามิเตอร์ของภาพด้านบน ไม่ใช่ค่าตั้งต้น
- เปลี่ยนเป็น “ค่อย ๆ ฉีกออก” และ “ผันผวนขึ้นรอบ mean เดิม” ดูว่าเวลาออกต่างกันอย่างไร การเลือกกติกาต้องทดสอบบนหลายเส้นทางและข้อมูลที่ยังไม่เคยใช้ปรับพารามิเตอร์
บัญชีคิดค่าใช้จ่าย 5 bps ของแต่ละขาทุกครั้ง ทั้งเปิดและปิด แต่ยังไม่รวมค่ายืม ดอกเบี้ย margin call และ slippage นอกเหนือจากการ fill วันถัดไป หลังปิดแล้วไม่เปิดใหม่ เส้นขาดทุนต่อหน่วยที่ยังเดินต่อจึงแสดงผลกรณีที่ยังถือ ส่วนเส้น P&L ของบัญชีหยุดเปลี่ยนเมื่อปิดจริง
เมื่อสมมติฐานพัง ให้หยุดคู่นั้นด้วย
Stop ปิดสถานะหนึ่งรอบ แต่ถ้าระบบยังเห็น spread ห่างจาก mean เดิมแล้วเปิดซ้ำทันที ความเสียหายอาจเกิดซ้ำ ต้องมี circuit breaker ระดับคู่และระดับบัญชีเพิ่มเติม
| สิ่งที่เฝ้าดู | กติกาที่ควรระบุก่อนรัน | ข้อจำกัด |
|---|---|---|
| ความผันผวนหรือ standardized shock เกินเกณฑ์ | พักการเปิดใหม่ ตรวจราคาและสภาพคล่อง; ถ้าเงื่อนไขระบุให้ลด/ปิดสถานะ จัดการทั้งสองขา | เกณฑ์ c ที่เลือกไว้บน validation ไม่ได้เป็นความน่าจะเป็น Normal โดยอัตโนมัติ |
| ขาดทุนสุทธิต่อคู่/ต่อวัน/ต่อบัญชี | หยุดรับความเสี่ยงเพิ่มและส่งคำสั่งลดความเสี่ยงตามกติกา | ราคากระโดดและสภาพคล่องทำให้ขาดทุนเกินเพดานก่อน fill ได้ |
| ข่าวเปลี่ยนกรอบอัตราแลกเปลี่ยนหรือข้อจำกัดตลาด | พักคู่จนตรวจสมมติฐานและ hedge ใหม่ | ใช้เวลาเผยแพร่ข่าวที่มีจริง ห้ามใส่ flag ย้อนหลังว่าโมเดลรู้ล่วงหน้า |
| Residual มี mean/drift เปลี่ยน หรือการทดสอบความสัมพันธ์ไม่เสถียร | จัดเป็นเหตุให้สอบสวน structural break ไม่รีบแก้ mean เพื่อเปิดเพิ่ม | การทดสอบจากหน้าต่างจำกัดมีทั้ง false alarm และการตรวจพบช้า |
ตารางนี้เป็นข้อกำหนดสำหรับต่อยอดระบบ ตัวทดลองด้านบนเปรียบเทียบ Stop สองแบบเท่านั้น ยังไม่ได้จำลองข่าว เพดานขาดทุนสุทธิ หรือการพักแล้วกลับมาเปิดใหม่
ก่อนกลับมาซื้อขาย ให้ตรวจคุณภาพข้อมูลและสภาพคล่องของตลาด ประมาณ hedge/mean/vol ด้วยข้อมูลที่มี ณ เวลานั้น แล้วทดสอบบนช่วงหลังที่ยังไม่เคยใช้เลือกกติกา การ fit ใหม่ให้กราฟดูนิ่งไม่ใช่หลักฐานว่าคู่นั้นกลับมามีเหตุผลทางเศรษฐศาสตร์
ทดสอบทั้งขาดทุนที่ลดลงและโอกาสที่เสียไป
เปรียบเทียบกติกาบนรายการเข้าเริ่มต้นเดียวกันก่อน เพื่อแยกผลของ exit แล้วจึงทดสอบระบบเต็มที่ entry และขนาดเปลี่ยนตาม vol ตรวจ P&L สุทธิ ขาดทุนเกินงบ จำนวนครั้งที่พักคู่ เวลาที่ไม่มีสถานะ และรอบที่ถูกตัดก่อน spread กลับ กำหนด train/validation/test ตามลำดับเวลาและเก็บผลที่ไม่ดีไว้ด้วย
ทดสอบความไวต่อ λ, k, เพดาน gross, ความล่าช้าในการ fill และต้นทุน ไม่เลือกเหตุการณ์ปี 2015 เพื่อแต่งกติกาแล้วใช้ปี 2015 เป็น final holdout ซ้ำ กรณีนี้เป็น stress case ทางประวัติศาสตร์ที่เลือกมาศึกษาข้อจำกัด ไม่ใช่การพิสูจน์ความสามารถพยากรณ์นอกตัวอย่าง
ข้อมูลและการทำซ้ำ
- ECB CSV ต้นฉบับ · สรุปการคำนวณและที่มา · เงื่อนไขนำสถิติ ECB ไปใช้
- บัญชีจำลองและพารามิเตอร์ · โค้ด EWMA และ Stop
- Notebook ทั้งซีรีส์ ฝังภาพและข้อมูล EUR/CHF ที่ใช้คำนวณไว้ เปิดได้โดยไม่ดึงราคาจากอินเทอร์เน็ต