เดือนก่อนมีคนจากทีมวิจัยถามผมว่าทำไมเอเจนต์ออปชันของเราถึงเอาแต่ปฏิเสธไอเดีย long-gamma ที่ดูสมเหตุสมผล สัญญาณก็ใช้ได้ การคาดการณ์ vol ก็ใช้ได้ ปัญหาคือมี 2 ฟิลด์ในฟีดข้อมูลตลาด และตัวเลขอีก 1 ค่าที่ไม่มีอยู่ในฟีดเลย
นี่คือออบเจ็กต์จริงที่เราถกเถียงกัน คำตอบ ticker ของ Deribit สำหรับ BTC-25SEP26-110000-C ดึงมาตอน 11:20 UTC ในวันจันทร์ ขณะที่สัญญายังเหลืออีก 18 วัน ผมตัดฟิลด์ที่เลิกใช้แล้วออก และเก็บทุกอย่างที่สำคัญไว้
{
"instrument_name": "BTC-25SEP26-110000-C",
"index_price": 96412.18,
"underlying_price": 96980.44,
"underlying_index": "SYN.BTC-25SEP26",
"estimated_delivery_price": 96412.18,
"mark_price": 0.0041,
"mark_iv": 42.14,
"best_bid_price": 0.0038, "best_bid_amount": 4.9,
"best_ask_price": 0.0045, "best_ask_amount": 12.1,
"bid_iv": 40.42, "ask_iv": 43.94,
"last_price": 0.0043,
"interest_rate": 0.0,
"open_interest": 812.7,
"greeks": {
"delta": 0.0962, "gamma": 0.0000189,
"vega": 36.77, "theta": -42.91, "rho": 4.61
},
"stats": { "volume": 61.2, "high": 0.0051, "low": 0.0036 }
}
instrument_name: ข้อเท็จจริง 4 ข้อในสตริงเดียว
BTC-25SEP26-110000-C สินทรัพย์อ้างอิงคือ BTC วันหมดอายุ 25 กันยายน 2026 ราคาใช้สิทธิ 110,000 และเป็น call สิ่งที่สตริงนี้ไม่ได้บอก และเป็นสิ่งที่ backtest ออปชันใหม่ทุกตัวต้องอ่านผิดอย่างน้อย 1 ครั้ง คือรายละเอียดสัญญาส่วนที่เหลือ: 1 สัญญาเท่ากับสินทรัพย์อ้างอิง 1 BTC พรีเมียมเสนอราคาและชำระเป็น BTC และหมดอายุตอน 08:00 UTC ไม่ใช่เวลา 16:00 ตามเวลาท้องถิ่นที่ไหนสักแห่ง
จุดที่ต้องระวังคือการเสนอราคาเป็น BTC ค่า mark ที่ 0.0041 หมายถึง 0.0041 BTC หรือประมาณ $395 ตามดัชนี หากคุณเก็บคอลัมน์นี้เป็นราคา แล้วค่อยนำไป join กับ P&L ของกลยุทธ์ที่คิดเป็น USD คุณก็สร้างสถานะที่มูลค่าเป็นดอลลาร์ขยับตามราคา spot ไปแล้วโดยไม่รู้ตัว แม้ออปชันจะไม่ขยับก็ตาม ผมเคยเห็น backtest ที่ขา long call ทำกำไรในวันที่ BTC ร่วง เพียงเพราะตีความคอลัมน์พรีเมียมเป็นดอลลาร์ ทั้งที่นักวิจัยถือสถานะ short พรีเมียมซึ่งคิดเป็นเหรียญ โดยใช้กรอบบัญชีเป็นดอลลาร์ กว่าจะเจอปัญหาก็ใช้เวลา 2 วัน
index_price vs underlying_price: ต่างกัน $568 แต่มีค่าเดียวที่ถูก
สองค่านี้ต่างกัน $568.26 ซึ่งไม่ใช่ข้อผิดพลาด index_price คือดัชนี BTC ของ Deribit ซึ่งเป็นราคาอ้างอิง spot ที่ถัวเฉลี่ยจากกระดานเทรดหลักหลายแห่ง และเป็นราคาที่ใช้ชำระสัญญาในท้ายที่สุด ส่วน underlying_price คือราคาของ forward สังเคราะห์สำหรับวันหมดอายุนั้นโดยเฉพาะ SYN.BTC-25SEP26 ซึ่งคำนวณจากตลาดฟิวเจอร์สสำหรับวันเดียวกัน ต้นทุนถือครองตลอด 18 วันที่อัตราราว 12% ต่อปี ทำให้ราคาต่างกัน $568
greek ทุกค่าใน payload รวมถึง mark IV คำนวณจาก forward หากคุณคำนวณ implied vol เองโดยใช้ spot เพราะบังเอิญโหลดซีรีส์นั้นไว้ คุณจะได้ตัวเลขต่างกันทุก strike และความคลาดเคลื่อนจะเอนไปในทิศทางเดิมเสมอ: call ดูเหมือน vol ถูกกว่าความเป็นจริง ส่วน put ดูแพงกว่า สำหรับสัญญาอายุ 18 วันที่มี basis 0.6% คุณจะคำนวณ mark IV ที่ strike นี้คลาดไปราว 1.5 จุด ซึ่งมากกว่า vol edge ส่วนใหญ่ที่คนนำไปสร้างกลยุทธ์กัน
interest_rate: 0.0 หมายความว่า Deribit คิด discount ผ่าน forward ไม่ได้คิดผ่านอัตราดอกเบี้ย อย่าไปหาเส้นอัตราปลอดความเสี่ยงมาใส่ เพราะจะนับซ้ำ
mark_price และ mark_iv: ราคาที่ไม่มีคู่สัญญา
0.0041 BTC ไม่มีใครจ่ายราคานี้ Deribit คำนวณ mark จากพื้นผิว vol ที่ fit ไว้ โดยอ้างอิงจาก order book แล้วเกลี่ยค่าให้เรียบตลอดช่วง strike และวันหมดอายุ เพื่อให้ margin กับการล้างสถานะไม่กระโดดไปมาเมื่อ quote ที่ห่างกันมากเพียงรายการเดียวขยับ mark คือราคาที่ใช้คำนวณ margin, P&L ที่ยังไม่รับรู้ และแสดงใน endpoint ของทุกสถานะ
นี่จึงเป็นราคา fill ที่ชวนให้หลงเชื่อที่สุดในงานวิจัยออปชันคริปโต และผิดที่สุดด้วย backtest ที่ซื้อที่ mark แล้วขายที่ mark กำลังเทรดกับเส้น spline ที่ใช้เกลี่ยค่า มันจะให้ค่า Sharpe ออกมา แต่ Sharpe นั้นอธิบายเพียงตัว fit พื้นผิวราคา และไม่ได้บอกอะไรเลยว่าคุณซื้อขายได้จริงหรือไม่
กฎที่เราลงเอยด้วยการเขียนไว้ในระบบ: ใช้ mark สำหรับ margin ความเสี่ยง และการวิเคราะห์ผลตอบแทนแบบ mid-to-mid เท่านั้น ห้ามใช้เป็นราคา fill หาก backtest ต้องใช้ราคา fill แต่ไม่มี snapshot ของ book ณ เวลานั้น ให้ระบุรอบการรันว่าไม่มีราคา แทนการ fill ที่ mark เรายอมทิ้งแถวนั้นดีกว่า
best_bid 0.0038 / best_ask 0.0045: สเปรดใน 3 หน่วย
กว้าง 7 tick เมื่อคิดเป็น BTC หรือ $67.50 สำหรับออปชันราคา $395 คิดเป็น 17% ของพรีเมียม หากคิดเป็น vol จะกว้าง 3.5 จุด โดย bid อยู่ที่ 40.4 และ ask อยู่ที่ 43.9 ซึ่งเป็นตัวเลขที่เทรดเดอร์ออปชันจะบอกจริง ๆ เมื่อคุณถามว่าสเปรดกว้างแค่ไหน
ขนาดสำคัญพอ ๆ กับราคา: ฝั่ง bid มี 4.9 สัญญา ฝั่ง ask มี 12.1 สัญญา ขนาดในออปชันของ Deribit คิดเป็นจำนวนสัญญา ดังนั้นฝั่ง bid เท่ากับสินทรัพย์อ้างอิง 4.9 BTC หรือ notional ราว $472k — แต่มี delta เพียง 0.47 BTC ที่ strike นี้ หากกลยุทธ์ของคุณต้องการ gamma ที่มีนัยสำคัญ ก็ต้องใช้หลายสิบสัญญา แต่ book ที่มองเห็น ณ ราคาดีที่สุดมีให้เพียงเศษเสี้ยวของจำนวนนั้น ระดับที่ 2 มักห่างออกไปอีก 2 หรือ 3 tick backtest ออปชันที่มีโมเดลขนาดสถานะต้องไล่กิน book หรือสมมติราคาสำหรับ RFQ/block ซึ่งสองสมมติฐานนี้ให้ผลต่างกันมาก
last_price: 0.0043 คือรายการซื้อขายที่เกิดขึ้นเมื่อใดเวลาหนึ่งใน 24 ชั่วโมงที่ผ่านมา อาจเกิดเมื่อ 19 ชั่วโมงก่อน ตอนที่ราคา spot ต่างไปมากอยู่แล้ว ข้อมูลนี้ล้าสมัยตั้งแต่ต้นสำหรับตราสารที่ซื้อขายวันละ 61 สัญญา อย่าสร้างซีรีส์ผลตอบแทนจากข้อมูลนี้
greeks: 5 ตัวเลข 4 ธรรมเนียมหน่วย
บล็อกนี้สร้างความเสียหายแบบเงียบ ๆ มากกว่าฟิลด์ที่เหลือใน payload รวมกัน เพราะค่าทุกค่ามีมิติถูกต้อง แต่ไม่มีค่าไหนใช้หน่วยอย่างที่คุณคาดไว้
| ฟิลด์ | ค่า | หน่วย | การอ่านผิดที่พบบ่อย |
|---|---|---|---|
| delta | 0.0962 | BTC ของสินทรัพย์อ้างอิงต่อสัญญา | เข้าใจว่าเป็น delta ในหน่วยดอลลาร์ |
| gamma | 0.0000189 | การเปลี่ยนแปลง Δdelta ต่อการขยับของสินทรัพย์อ้างอิง $1 | เข้าใจว่าเป็นต่อการขยับ 1% |
| vega | 36.77 | USD ต่อ vol 1 จุด | เข้าใจว่าเป็นต่อ vol 100% หรือคิดเป็น BTC |
| theta | -42.91 | USD ต่อวันปฏิทิน | เข้าใจว่าเป็นต่อวันซื้อขาย |
| rho | 4.61 | USD ต่ออัตราดอกเบี้ย 1% | มองข้าม ซึ่งถูกต้องแล้ว |
Delta คิดเป็นเหรียญ, vega และ theta คิดเป็นดอลลาร์ ส่วน gamma คิดต่อการขยับของ spot $1 การเอา delta ที่คิดเป็นเหรียญไปรวมกับค่าความเสี่ยงที่คิดเป็นดอลลาร์ ทำให้ book ที่ดูเหมือนไม่มีทิศทาง กลับกลายเป็นถือ long 40 BTC ส่วน theta ที่คิดต่อวันปฏิทินนี่แหละที่เล่นงานกลยุทธ์ช่วงสุดสัปดาห์: จากปิดตลาดวันศุกร์ถึงเปิดตลาดวันจันทร์ มีค่าเสื่อม 3 วัน หรือราว $129 ต่อสัญญาในกรณีนี้ ทั้งที่ไม่มีวันซื้อขายเลย หาก backtest ของคุณเดินทีละแท่งราคาและคิด theta ต่อแท่ง วันหยุดสุดสัปดาห์ก็จะหายไป และกลยุทธ์ short-premium ทุกแบบจะแย่กว่าความเป็นจริงโดยไม่รู้ตัว
open_interest 812.7, volume 61.2: จุดที่มีสภาพคล่องจริงใน chain
มี open interest 800 กว่าสัญญาที่ strike ซึ่งเมื่อวานซื้อขายไป 61 สัญญา นี่คือ strike ที่มีการซื้อขายจริง 110,000 เป็นตัวเลขกลมในช่วง 3 สัปดาห์ข้างหน้า ซึ่งเป็นจุดที่ flow กระจุกตัวพอดี ขยับออกไปอีก 2 strike ถึง 120,000 แล้ว open interest ลดลง 10 เท่า ขยับไปยัง strike ที่ไม่ใช่เลขกลมและวันหมดอายุที่ไม่ใช่รายเดือน คุณจะเจอตราสารที่มี bid, ask ห่างกัน 40% และไม่มีการซื้อขายมาทั้งสัปดาห์
backtest ที่ไล่ทั้ง chain และวนทุกตราสารที่จดทะเบียนไว้ จะ fill ให้คุณได้ทุกตัวอย่างง่ายดาย สุดท้ายเราจึงใช้เงื่อนไขร่วมกันเป็นตัวคัดกรอง: สเปรดที่เสนอราคาต่ำกว่า 20% ของ mark, มีอย่างน้อย 1 สัญญาทั้งสองฝั่ง และมี volume ใน 24 ชั่วโมงก่อนหน้าอยู่บ้าง โดยทั่วไปจะเหลือราว 1 ใน 3 ของ chain BTC ที่จดทะเบียนไว้ในแต่ละวัน ส่วนอีก 2 ใน 3 คือแหล่งของ alpha ปลอม
ฟิลด์ที่ไม่มีอยู่ใน payload
ไม่มีอะไรในออบเจ็กต์นี้บอกว่าการซื้อขายมีต้นทุนเท่าไร Deribit คิดค่าธรรมเนียม 0.0003 BTC ต่อสัญญาออปชัน ไม่ว่าจะเป็น maker หรือ taker — คิดเป็น 0.03% ของสินทรัพย์อ้างอิงไม่ใช่ของพรีเมียม และมีเพดานอยู่ที่ 12.5% ของราคาออปชัน สำหรับสัญญานี้เท่ากับ $28.92 ต่อฝั่งเมื่อยังไม่ชนเพดาน เพราะ 12.5% ของ 0.0041 คือ 0.000513 ซึ่งสูงกว่าค่าธรรมเนียมคงที่
เมื่อค่าธรรมเนียมคิดจาก notional แต่พรีเมียมขึ้นอยู่กับ vol ต้นทุนเมื่อเทียบกับเงินที่จ่ายจะพุ่งสูงขึ้นเมื่อออปชันออกนอกเงินมากขึ้น
ซื้อที่ ask 0.0045 ($434) ขายที่ bid 0.0038 ($366) แล้วจ่ายค่าธรรมเนียม 2 ครั้ง: ซื้อขายไปกลับมีต้นทุน $125.80 ต่อสัญญาที่ mark ไว้ $395 มุมมองของคุณต้องทำกำไรให้ได้ 31% ของพรีเมียมถึงจะเริ่มคุ้มทุน นี่แหละคือเหตุผลทั้งหมดที่ไอเดีย long-gamma ถูกปฏิเสธ ซึ่งไม่เกี่ยวกับสัญญาณเลย
ถ้าลองถามว่าค่าใช้จ่ายต่อ delta เป็นเท่าไร จะเห็นภาพชัดขึ้น เพราะค่าธรรมเนียมแปรตามจำนวนสัญญา และจำนวนสัญญาแปรผกผันกับ delta เพื่อคำนวณ เรากำหนดให้ mark IV คงที่ 42.1% ทุก strike (chain จริงมี skew และในตลาดคริปโต call wing มักซื้อขายสูงกว่า ATM ทำให้ตารางนี้ดูดีกว่าความเป็นจริง):
| ตราสาร | Mark (BTC) | Delta | จำนวนสัญญาต่อ delta 1 BTC | ค่าธรรมเนียมต่อฝั่ง | ต้นทุนต่อ delta 1 BTC |
|---|---|---|---|---|---|
| 97000-C (ATM) | 0.0373 | 0.518 | 1.93 | $28.92 | $55.80 |
| 110000-C | 0.0041 | 0.096 | 10.4 | $28.92 | $301 |
| 120000-C | 0.0004 | 0.013 | 79.4 | $4.82 (ติดเพดาน) | $383 |
| BTC perp | — | 1.0 | 1.0 | $48.21 | $48.21 |
เพดาน 12.5% มีผลจริงในแถวล่างสุดนี้ หากไม่มีเพดานดังกล่าว ออปชัน deep wing จะมีต้นทุน $2,300 ต่อ delta 1 BTC และกลยุทธ์ซื้อลอตเตอรี่ก็จะเป็นไปไม่ได้ในทางคณิตศาสตร์ แทนที่จะแค่ไม่ดี ถึงมีเพดาน การซื้อ exposure ผ่าน strike 120,000 ก็ยังมีต้นทุนราว 8 เท่าของ perpetual ออปชันไม่ใช่วิธีราคาถูกในการแสดงมุมมองทิศทาง และ backtest ใดที่บอกเป็นอย่างอื่นก็แปลว่ามันไม่ได้รวมตารางนี้เข้าไป
08:00 UTC, 25 กันยายน
สิ่งสุดท้ายที่ ticker ไม่ได้บอกคือสถานะจะจบลงอย่างไร Deribit ชำระราคาออปชันโดยใช้ค่าเฉลี่ยดัชนีในช่วง 30 นาทีก่อนถึง 08:00 UTC ในวันหมดอายุ และคิดค่าธรรมเนียมส่งมอบ 0.00015 BTC สำหรับสัญญาที่อยู่ในเงิน โดยมีเพดานอยู่ที่ 12.5% ของมูลค่าชำระราคาเช่นกัน
มี 2 เรื่องที่ backtest ต้องคำนึงถึง เรื่องแรก ช่วงเวลาเฉลี่ยดังกล่าวมีผลจริงและคุณอาจคำนวณพลาดได้: ออปชันที่อยู่ในเงิน $300 ตอน 07:59 อาจหมดค่าได้หากช่วงครึ่งชั่วโมงสุดท้ายย่ำแย่ และ backtest ที่ใช้ราคาตอน 08:00 ในการชำระราคาก็จะไม่ตรงกับบัญชี paper trading ของคุณอยู่ไม่กี่ basis point ในวันหมดอายุส่วนใหญ่ และคลาดเคลื่อนมากในบางวัน เรื่องที่ 2 ค่าธรรมเนียมส่งมอบใช้กับทุกกรณี ไม่ว่าคุณต้องการให้ชำระราคาหรือไม่ ดังนั้นกลยุทธ์ที่ถือถึงวันหมดอายุจะจ่าย 3 ค่าธรรมเนียมต่อรอบ ส่วนกลยุทธ์ที่ปิดตอน 07:30 จะจ่าย 2 ค่าธรรมเนียมบวกสเปรด แบบไหนถูกกว่าขึ้นอยู่กับ strike และจุดที่ต้นทุนพลิกกันอยู่แถวพรีเมียม 0.0012 BTC เราคำนวณแยกตามแต่ละสถานะแทนการตั้งกฎตายตัวใช้ร่วมกัน
โพสต์ฉบับที่ผมอยากเขียนคือเรื่องการคาดการณ์ vol แต่ผมกลับใช้เวลา 1 สัปดาห์ไปกับหน่วยและเพดานค่าธรรมเนียม ซึ่งเป็นสัดส่วนระหว่างความหวือหวากับความจริงในงานวิจัยออปชันที่ถูกต้องพอดี
มี 20 ฟิลด์ ราคา 2 ค่าที่ต่างกันโดยตั้งใจ ราคา 1 ค่าที่ไม่มีใครซื้อขายจริง greeks ที่ใช้หน่วย 4 ระบบ และโมเดลต้นทุนที่อยู่นอก payload ทั้งหมดในหน้าเอกสาร หากคุณกำลังเริ่มทำ backtest ออปชัน วันแรกควรใช้เขียนฟังก์ชันเดียวที่แปลงออบเจ็กต์แบบนี้ให้เป็นสถานะที่คิดต้นทุนครบและใช้หน่วยถูกต้อง ทั้งสเปรด ค่าธรรมเนียม เพดาน ค่าธรรมเนียมส่งมอบ และการคิดเป็นเหรียญหรือดอลลาร์ กลยุทธ์ทุกตัวที่คุณเขียนหลังจากนั้นจะสืบทอดสมมติฐานจากฟังก์ชันนี้
← บทความทั้งหมด

