Basic Pair Trading (2) : การประยุกต์ใช้ Cointegration

บทความนี้เขียนมาจากการเข้าร่วมสัมมนากับกลุ่ม Quantopain ที่กรุงลอนดอน ประเทศอังกฤษ ในช่วงต้นปีที่ผ่านมา ส่วนหนึ่งของสัมมนาได้กล่าวถึง Basic pair trading strategy ที่มีการประยุกต์ใช้ค่า Cointegration เราจะตัดส่วนนี้มาพูดถึงกันในบทความชุดนี้ค่ะ

บทความแรก Basic Pair Trading (1)  สามารถหาอ่านได้จากลิงก์นี้

   https://qtmlresearch.com/2017/03/12/cointegration-%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%97%E0%B8%B3-pairs-trading-1/

Cointegration idea 

แนวคิดหลักๆ ของ Cointegration ที่เราจะนำมาใช้กันใน basic pair trading ก็คือ การใช้ค่า Cointegration เพื่อหาหุ้นที่มี “Economic link”  ต่อกัน โดยที่ หุ้น 2 ตัวจะ Cointegrated กันก็ต่อเมื่อความแตกต่างของข้อมูล 2 ชุด มีลักษณะเป็น “Mean Reverting” หรือ พูดง่ายๆ ก็คือ ค่าวิ่งไปมาอยู่รอบๆ ค่า Mean ของตัวเองนั้นเอง ตัวอย่างเช่น ถ้าเรามีข้อมูล 2 ชุด คือ  X และ Y ดังรูปที่ 1

Screen Shot 2017-08-25 at 10.25.49.png
รูปที่ 1 ข้อมูลจำลอง X และ Y

ถ้าเราลองจับค่าความแตกต่าง (spread) ระหว่างข้อมูลสองรูปนี้มา plot คู่กับค่าเฉลี่ย (mean) ดังรูปที่ 2 จะเห็นว่า ค่า spread (กราฟสีฟ้า) ไม่ว่าจะเคลื่อนที่ขึ้น หรือ ลง แต่อย่างไรก็ตาม จะ  reverse กลับเข้าสู่ค่า mean (เส้นประสีแดง)

Screen Shot 2017-08-25 at 10.34.08.png
รูปที่ 2 Mean reverting ของข้อมูลจำลอง X และ Y

การดูด้วยตาอาจจยากที่จะตัดสินค่า Cointegration ซึ่งในที่นี้ เราจะใช้ฟังก์ชันที่มีใน ​Python โดยสามารถเรียกใช้ได้โดย คำสั่ง

from statsmodels.tsa.stattools import coint

ซึ่งเวลาจะใช้งานเราก็สามารถเรียกใช้ได้ดังนี้

score, pvalue, _ = coint(X,Y)

จากคำสั่ง ค่า X และ Y คือ ข้อมูลที่เราต้องการทดสอบ Cointegration และ ค่าที่เราสนใจก็คือ pvalue ซึ่ง function “coint” ในที่นี้เรา Null Hypothesis คือ ข้อมูล 2 ชุดนี้ไม่ Cointegrated ดังนั้น ค่า pvalue ที่เราสนใจก็จะเป็นค่า Pvalue ที่ “ต่ำ” ซึ่งหมายถึง การปฏิเสธ Null Hypothesis  แต่จะตัดค่า pvalue ที่เท่าไหร่นั้น ก็ขึ้นอยู่กับค่า “Level of Confidence” ในการ Test นั้นๆ ด้วย เราจึงจะนำมาตัดสินได้ว่าค่า pvalue ต่ำ หรือ สูงกว่า Level of Confidence ถ้า ค่า P-value ต่ำกว่า Level of Confidence ก็หมายความว่า เรา Reject Null Hypothesis นั่นเองคะ (ขออนุญาติไม่ลงในรายละเอียดทางสถิติมากไปนะคะ เดี๋ยวจะยาวเกินไป เนื้อหาสามารถหาอ่านได้ตามหนังสือ สถิติพื้นฐานได้ไม่ยากค่ะ) ในที่นี้ค่า  Level of Confidence  จะเซ็ตเป็น 0.05 ซึ่งเป็นค่าที่ได้รับความนิยมกันมากไปก่อน เพื่อเป็นตัวอย่างค่ะ

PP04-Tang-hedge-900.jpg

Hedged Position

Pair Trading เป็นหนึ่งในกลยุทธ์ในการทำ Hedging ซึ่งเป็นเทคนิคที่นิยมใช้กันมากในกลุ่มของ Hedged fund เพื่อเป็นการปกป้องตัวเองจากภาวะที่ตลาดตกต่ำ หลักการทำงานง่ายๆ ก็คือ ทำการ Long และ Short position ไปพร้อมๆ กัน ทำให้เมื่อภาวะตลาดตกต่ำ แทนที่จะเสียเงินทั้งหมดในการ Long position  ก็จะยังไม่ Short position ที่ทำให้ได้กำไรคืนมาอยู่

การทำ Hedging เราสามารถป้องกันตัวเองจากภาวะตลาดทั้งขาขึ้น และ ขาลง ทำให้เกิดภาวะที่เรียกว่า “market neutral” เนื่องจาก

  • ในสภาวะของตลาดขาขึ้น เราจะสามารถทำกำไร จาก  Long positions และ เสียบางส่วนจาก Short position
  • ในภาวะของตลาดขอลง แม้ว่าเราจะเสียเงินบางส่วนให้กับ Long postions และ short positions ก็ยังสามารถทำกำไรกลับมาให้เราได้

หลักการง่ายๆ แบบนี้แหละค่ะ ที่มีนักลงทุนที่ไม่ต้องการแบกรับความเสี่ยงที่สูงมากพยายามนำมาใช้ในการจัดการบริหาร Portfolio แต่สิ่งที่สำคัญในการทำ Hedging ก็คือ การหาคู่ของหุ้นที่เหมาะสม และเป็นตลาดที่มีความคล่องตัวทั้งด้าน Long และ  Short  ดังนั้นในบทความนี้ เราก็นำเสนอหนึ่งในกลยุทธ์ที่สามารถนำไปประยุกต์ใช้ในการ Heding ได้ ซึ่งก็คือ เจ้า “Cointegration” ที่ได้กล่าวถึงมาแล้วนั่นเองค่ะ เราจะมาประยุกต์ใช้ Cointegration มาเพื่อนทำการหาคู่ของหุ้นที่เหมาะสมในการทำ Hedging

 

AAEAAQAAAAAAAANbAAAAJGVlM2Q2YmI3LTFmNWUtNGUwNC05MjNkLTNlOTMxZDM1YmEyMA.jpg

Cointegration idea in Hedging

หลักสำคัญของการใช้  Cointegration ในการทำ Hedging ด้วย Pair Trading ก็คือ เราจะ bet ว่าหุ้น 2 ตัวถ้าอยู่ห่างกัน (spread กว้าง) เดี๋ยวจะต้องเคลื่อนที่เข้าหากัน หรือ หรืออยู่ใกล้กัน (Spread แคบ) เดี๋ยวก็จะต้องเคลื่อนที่ออกจากกัน! โดยที่เราจะไม่สนใจทำนายเลยว่าราคาหุ้นตัวไหนจะ ขึ้น หรือ ลง ลองมาดูตัวอย่างกันจากรูปที่ 3

Screen Shot 2017-08-27 at 01.20.42
รูปที่  3 การ Long & Short เมื่อค่า Spread แคบ / กว้าง ของข้อมูลจำลอง X และ Y

จากรูปที่ 3 สมมุติว่า กราฟ X และ Y หุ้น 2  ตัวที่ Cointegrated ต่อกัน ดังนั้น ถ้าเราหาจุดที่หุ้นมีการเคลื่อนที่เข้าใกล้กันมาก (Spread แคบ ณ จุดวงกลมสีแดง) เราก็จะ bet ว่าในอนาคตหุ้นสองตัวนี้ ก็จะต้องมีการเคลื่อนที่ออกจากกัน ดังนั้น เราจะทำการ  Long Y ณ จุดสีเขียว และ ทำการ hedge positon โดยการ Short  X ณ จุดสีแดง ในอนาคตถ้าหุ้น 2  ตัวนี้เคลื่อนที่ไปตามตลาด

  • ตลาดมีการเคลื่อนไหวลง ก็จะมีความเป็นไปได้สูงที่หุ้น Y จะมีราคาลงต่ำกว่าหุ้น X (ราคาขยับลงทั้งคู่) ทำให้ เราสามารถทำกำไรได้จาก  Short Position ของหุ้น X ได้มากกว่า  เสียเงินจาก  Long Position ในหุ้น Y
  • ในทางกลับกัน ถ้าตลาดมีการเคลื่อนไหวขึ้น แน่นอนว่า มีความเป็นไปได้สูงที่หุ้น Y จะมีราคาขยับขึ้นสูงกว่าหุ้น X (ราคาขยับขึ้นทั้งคู่) เราก็จะทำกำไรใน Long Position หุ้น Y ได้มากกว่าการเสียเงินใน Short Position หุ้น X  นั้นเองค่ะ

หรือ แม้กระทั้งถ้าหุ้น 2 ตัวนี้ divert หรือ ขยับแยกออกจากกันคนละทิศทาง ซึ่งหมายความว่า หุ้น Y  จะมีการขยับขึ้น และ หุ้น X จะมีการวิ่งลง (เรา bet ไปแล้วว่าหุ้น 2 ตัวนี้จะต้องวิ่งออกจากกัน ตามผลจากทฤษฏี Cointegration) นั่นยิ่งดีใหญ่ เพราะหมายความว่าเราสามารถทำกำไรได้ทั้งใน Long Position ของหุ้น Y และ  Short Postion ของหุ้น X นั่นเอง

ในทางกลับกัน ถ้าเราหาจุดที่หุ้นมีการเคลื่อนที่ออกห่างจากกันมาก (Spread กว้าง ณ จุดวงกลมสีน้ำ) เราก็จะ bet ว่าในอนาคตหุ้นสองตัวนี้ ก็จะต้องมีการเคลื่อนที่เข้าหากัน เราก็จะ take position ตรงกันข้ามกับกรณี Spread แคบ คือ  Short Y และ  Long X

สรุปความคาดหวังของเราก็คือ การทำเงินบนพื้นฐานการ Revert เข้าออกจาก mean ดังนั้น จากข้อมูล X และ Y ดังรูปที่ 3 เราจะพยายามมองหา 2  กรณีด้วยกัน คือ

Screen Shot 2017-08-27 at 01.54.46.png
รูปที่ 4 การ take position โดยอาศัยค่า Spread ของข้อมูลที่ Cointegrated ต่อกัน

Example: Applying Cointegration in Pair Trading

แน่นอนว่า Concept  ในทางทฤษฏีไม่ว่าจะดูดีแค่ไหน แต่จะมีประโยชน์ก็ต่อเมื่อ เราสามารถนำมาประยุกต์ใช้จริงได้ ดังนั้น ในส่วนนี้เราจะนำเสนอตัวอย่างในการประยุกต์ใช้ Cointegration  กับการทำ Pair Trading โดยจะนำเสนอเป็นขั้นตอนๆ เพื่อให้เข้าใจง่าย และ สามารถนำไปประยุกต์ใช้งานจริงได้ ดังนี้

Step 1: Find Securities

ขั้นตอนแรก และ นับเป็นขั้นตอนที่สำคัญมากก็คือ  “การมองหาคู่หุ้น” ที่เราต้องการ ในที่นี้เราก็ควรจะมีไอเดียเกี่ยวกับหุ้นที่เราคิดว่าน่าจะมี  “Economic link” ต่อกันอยู่บ้างแล้ว เผื่อที่จะไม่ต้องเสียเวลากับการเทสหุ้นจำนวนมากเกินไป และ เพื่อป้องกันปัญหาของ Multiple Comparison Bias (https://en.wikipedia.org/wiki/Multiple_comparisons_problem) จากการทดสอบคู่ข้อมูลจำนวนมากอีกด้วย

ในที่นี่ เราจะขอยกตัวอย่างด้วยหุ้นในกลุ่มของ Financial Service ออกมา ซึ่งเป็นหุ้นในกลุ่มที่มักจะมี Economic link  ต่อกันค่อนข้างชัดเจน หุ้นที่เราจะนำมาเป็นตัวอย่างในบทความนี้คือ

หุ้นในกลุ่ม 4 ธนาคารยักษ์ใหญ่ของโลกแห่งปี 2017
(cr. http://www.investopedia.com/investing/top-bank-stocks/)

  • BAC – Bank of America Corporation
  • BBT – BB&T Corporation
  • BAP – Credicorp Ltd
  • JPM – JPMorgan Chase & Co

และ 3 หุ้นใหญ่ในส่วนของ Finacial service ที่นับว่าเป็นมี  Economic link ที่แข็งแรงมากต่อเนื่องกันเป็นเวลานาน อย่าง

  • NYSE:V – Visa
  • NYSE: MA – MasterCard
  • AXP – American Express

มาดูค่า Cointegration ของหุ้นในกลุ่มที่เราเลือกมาโดยการ Plot เป็น Heat map ของค่า Pvalue ที่ได้จากการทำ  Cointegration test ที่กล่าวมาแล้วข้างต้น ดังรูปที่ 5

Screen Shot 2017-08-26 at 13.27.33.png
รูปที่ 5 Heatmap แสดงค่า Pvalue

จากรูปที่ 5 จะเห็นได้ว่า คู่หุ้นที่มีค่า Pvalue < 0.05 (Level of confidence ที่เรากำหนดไว้) มีเพียงคู่เดียวเท่านั้นคือ Visa (NYSE: V) และ Mastercard (NYSE:MA) ซึ่งมีค่า Pvalue = 0.0075 ซึ่งข้อมูลหุ้นสองตัวที่เราเลือกมา แสดงดังรูปที่ 6

Screen Shot 2017-08-27 at 01.17.06.png
รูปที่ 6 กราฟราคาของ NYSE: V และ NYSE: MA

Step 2: Spread Calculation

ในขั้นตอนนี้เราจะคำนวณค่าความแตกต่าง (Spread) ของหุ้น 2  ตัวที่เราเลือกจากขั้นตอนที่ 1 ดังรูปที่ 7

Screen Shot 2017-08-27 at 00.29.29.png
รูปที่ 7

จากรูปที่ 7  จะเห็นว่ายังสามารถสังเกตุเห็นการแกว่งตัวรอบค่าเฉลี่ยของค่า Spread ซึ่งก็ตรงกับที่เราต้องการ ถึงแม้ว่าจะไม่สามารถเห็นได้ชัดเท่ารูปที่ 2 ที่พล็อตจากข้อมูลจำลอง แต่ก็ยังถือว่าเข้าเกณฑ์ Cointegration ที่เราต้องการ

Step 3: Zscore Calculation

จากรูปที่ 7 เมื่อกราฟเคลื่อนที่ขึ้นสูงนั่นหมายถึงว่า ระยะห่างระหว่างหุ้น 2 ตัว (Spread) สูง หรือ หุ้นสองตัวกำลังดีดออกจากกัน ในทางกลับการ ถ้ากราฟเคลื่อนที่ลงต่ำ ก็จะหมายความว่า ระยะห่างระหว่างหุ้น 2 ตัว (Spread) ตำ่ ซึ่งก็คือ ราคาของหุ้น 2  ตัวนั้นกำลังกลับเข้าใกล้กัน ซึ่งในที่นี้เราก็จะสามารถทำการ Long และ Short position ตามหลักการในรูปที่ 4

แต่ปัญหาก็คือ กราฟจะต้องขึ้นไปสูงแค่ไหน หรือ ต่ำลงมาถึงจุดไหนเราถึงจะ take position ล่ะ??? ในที่นี้ดูจากแค่กราฟ Spread ในรูปที่ 7 จะยังบอกไม่ได้ เราจะต้องทำการปรับค่า หรือ ​normalisation ค่า ด้วยการคำนวณค่า Standard Score หรือ Zscore จากนั้นเราจึงจะสามารถตั้งกฏได้ว่า เมื่อไหร่ที่กราฟ spread เคลื่อนที่ออกห่างจากค่า Zscore เท่าไหร่ เราจึงจะทำการ take position ดังรูปที่ 8

Screen Shot 2017-08-27 at 01.57.06.png
รูปที่ 8  การ take postion โดยอาศัยค่า Zscore

จากรูปที่ 8 เราสามารถ enter postion ได้โดยอาศัยกฏจากการดู Zscore ดังนี้

  • ถ้า Zscore < -1.0 ให้ Long the Spread โดยการ take position  “Long V” และ  “Short MA”
  • ถ้า Zscore > 1.0 ให้ Short the Spread โดยการ take position “Short V” และ  “Long MA”
  • Exit Position เมื่อ Zscore  =  0

และทั้งหมดนี้ก็เป็นไอเดียการทำ Pair Trading แบบง่ายๆ โดยอาศัยค่า Cointegration เข้ามาช่วยนะคะ หวังว่าจะเป็นประโยชน์ให้แก่ผู้สนใจไม่มากก็น้อยในการนำไอเดียนี้ไปใช้งานกันต่อไป จริงๆ แล้วตัวอย่างที่ทำให้ดูไปก็ยังมีจุดอ่อนในเรื่องของ Look ahead bias อยู่ ซึ่งถ้าจะนำไปใช้งานจริงจะต้องใส่ใจปัญหาในจุดนี้ด้วย วิธีการแก้ปัญหาก็พอจะมีอยู่แต่คงต้องขออนุญาติไม่ลงในรายละเอียดเนื่องจากจะทำให้บทความนี้ยืดยาวจนเกินไป อีกอย่างจุดประสงค์ของบทความนี้ก็อยากให้ทุกๆ ท่านได้ไอเดียใหม่ๆ เพื่อนำไปพัฒนาต่อเท่านั้นค่ะ ในโอกาสหน้าถ้ามีเวลา ทางเราจะพยายามนำ Back test ที่ของการทำ Pair Trading ด้วยวิธีต่างๆ มาฝากกันค่ะ

Cr : เนื้อหาจากการเข้าร่วม Quantopian ณ กรุงลอนดอน ประเทศอังกฤษ

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s