“คอมพิวเตอร์สามารถที่จะมองเห็น, รับฟัง และเรียนรู้แล้ว ยินดีต้อนรับสู่โลกอนาคต” - Dave Waters
นักลงทุนส่วนใหญ่ในปัจจุบันน่าจะคุ้นเคยกับเทคโนโลยีที่เข้ามาปฏิวัติวงการการลงทุนอยู่แล้ว ผมเชื่อว่าผู้อ่านส่วนมากคงติดตามพอร์ตหุ้นของตัวเองผ่านทางแอป และส่งคำสั่งซื้อขายทางอินเตอร์เน็ตอยู่แล้ว แต่นอกเหนือจากนั้น นักลงทุนหลายๆ คนคงไม่ได้ลงลึกมากไปกว่าการวาดเส้นต่างๆ บนกราฟราคาหุ้น
และสิ่งนี้นับเป็นเรื่องที่น่าเสียดายยิ่งนัก
ตลาดในตอนนี้ไม่ได้ถูกกำหนดด้วยนักลงทุนที่เป็นมนุษย์อีกต่อไป การซื้อขายราวๆ 50-60% ถูกตัดสินใจด้วยระบบคอมพิวเตอร์ และจากการที่ระบบปัญญาประดิษฐ์ (Aritificial Intelligence) ได้ถูกพัฒนาขึ้นอย่างมากในช่วงทศวรรษที่ผ่านมา ทำให้ AI ถูกนำมาใช้ในการลงทุนด้วยเช่นเดียวกัน ไม่ว่าจะเป็นการนำมาสร้างระบบเทรดด้วย Machine Learning หรือแม้แต่การพยากรณ์งบทางการเงินผ่านการใช้ระบบ Image Recognition กับภาพถ่ายดาวเทียม
ดังนั้น ทักษะการเขียนโปรแกรมจึงได้กลายมาเป็นอาวุธอันทรงพลังสำหรับนักลงทุน และนักเก็งกำไรทุกคนในศตวรรษนี้
และแม้ว่านักลงทุนบางคนที่เป็นนักลงทุนแบบเน้นคุณค่า หรือลงทุนระยะยาว ก็สามารถได้ประโยชน์จากทักษะการเขียนโปรแกรมเช่นกัน ผมจะขอยกตัวอย่างเล็กๆ ตัวอย่างหนึ่งด้วยการทำ Portfolio Optimization ด้วย Python
อะไรคือ Portfolio Optimization?
Portfolio Optimization คือ การคำนวนสัดส่วนการลงทุนที่ให้ผลตอบแทนต่อความเสี่ยงที่ดีที่สุด ในโลกของการลงทุนนั้น ผลตอบแทนและความเสี่ยงมักจะเป็นของที่มาคู่กัน ยิ่งความเสี่ยงสูงมากก็ยิ่งมีโอกาสได้ผลตอบแทนสูงขึ้น ด้วยหลักการนี้ เราจะเห็นได้ว่าสินทรัพย์ที่มีความเสี่ยงต่ำ เช่น พันธบัตรรัฐบาล มักจะให้ผลตอบแทนโดยเฉลี่ยที่ต่ำกว่าสินทรัพย์ที่มีความเสี่ยงสูง เช่น หุ้น หรืออสังหาริมทรัพย์ (และอาจจะรวมไปถึงสกุลเงินดิจิตอลที่เพิ่งได้รับความนิยมไม่กี่ปีมานี้) ในระยะยาว
ในทางคณิตศาสตร์ เราจะใช้ผลตอบแทนคาดหวัง (Expected Return) และทำการวัดความเสี่ยงด้วยค่าความเบี่ยงเบนมาตรฐาน (Standard Deviation)
มาถึงตรงนี้ผู้อ่านหลายๆ คนอาจจะเริ่มอยากคลิกเมาส์ปิด tab หน้านี้ทิ้งไปเสียดื้อๆ เพราะเริ่มมีภาษาต่างดาวเข้ามาแล้ว แต่ผมขอสัญญาว่าจะพยายามอธิบายให้เข้าใจง่ายและเห็นภาพมากที่สุด เพราะฉะนั้นช่วยอดทนต่อไปอีกสักนิดนะครับ ^_^
สมมติว่าหุ้น ABC มีผลตอบแทนคาดหวัง (หรือผลตอบแทนเฉลี่ย สองคำนี้ชอบใช้สลับกันไปมา) อยู่ที่ 5% ต่อปี และมีความเสี่ยง หรือ Standard Deviation อยู่ที่ 8% ต่อปี นั่นหมายความว่าถ้าคุณลงทุนในหุ้นนี้สักหนึ่งพันปี ผลตอบแทนเฉลี่ยในรอบพันปีนี้จะอยู่ที่ราวๆ 5% แต่ว่าในแต่ละปีราคาของหุ้นตัวนี้อาจจะขึ้นหรือลงได้ระหว่าง -15% ~ +25% โดยประมาณ
ภาพตัวอย่างแสดงผลตอบแทนที่เป็นไปได้ของหุ้น ABC ในระยะเวลา 1 ปี (252 วันทำการ) เส้นสีแดงแสดงถึงผลตอบแทนในกรณีที่ไม่มีความผันผวนหรือความเสี่ยงใดๆ เลย
ในทางทฤษฎี เราสามารถที่จะบ่งชี้ถึงผลตอบแทนและความเสี่ยงของสินทรัพย์พื้นฐาน (สินทรัพย์ที่ไม่ใช่อนุพันธ์อย่าง Futures หรือ Options) หากมีข้อมูลย้อนหลังจำนวนหนึ่ง
เมื่อเรานำสินทรัพย์หลายๆ ตัว เช่น หุ้น ABC 100 หุ้น, หุ้น CDE 200 หุ้น และพันธบัตรของบริษัท XYZ จำนวนหนึ่งมารวมกัน ก็จะกลายเป็นพอร์ตโฟลิโอการลงทุนขึ้นมา ซึ่งพอร์ตโฟลิโอนี้ก็จะมีตัวเลข “ผลตอบแทน” และ “ความเสี่ยง” เช่นกัน ขึ้นกับชนิดสินทรัพย์และปริมาณ
คำถามจึงบังเกิดว่า เราสามารถ mix and match สินทรัพย์ให้สามารถทำกำไรสูงสุดภายใต้เงื่อนไขบางประการได้หรือไม่? เราจะรู้ได้อย่างไรว่า portfolio ที่ได้ผลตอบแทน 4% ในระดับความเสี่ยงหนึ่งจะเป็น portfolio ที่ดีที่สุด? หรือมันจะมี portfolio อื่นที่ได้ผลตอบแทนสูงกว่า 4% ในระดับความเสี่ยงเท่ากัน?
นี่คือคำถามที่นำไปสู่กระบวนการ Portfolio Optimization ครับ
แล้วทำไมถึงต้องหันมาใช้ Python?
ในอดีตนั้น การคำนวนทางการเงินส่วนมากมักจะพึ่งพา Excel อยู่เสมอๆ จริงอยู่ที่ว่า Excel เป็นเครื่องมือที่ทรงพลังมากๆ และการคำนวนด้านการเงินนั้นทำบน Excel กันมาช้านาน (ไม่เว้นแม้แต่การคำนวนยากๆ เช่น การทำ Pricing พันธบัตรหรืออนุพันธ์ต่างๆ) แต่ทุกอย่างย่อมมีขีดจำกัด เมื่อปริมาณข้อมูล และจำนวนแหล่งข้อมูลเพิ่มขึ้นเป็นทวีคูณ รวมไปถึงการเข้ามาของเทคโนโลยีใหม่ๆ ด้าน Machine Learning การมองหาตัวเลือกอื่นที่ดีกว่าจึงเกิดขึ้น ตัวเลือกหลักๆ ย่อมหนีไม่พ้น ภาษา Python นั่นเอง
Python ถือเป็นภาษาโปรแกรมมิ่งยอดนิยมตัวหนึ่งในยุคนี้ โดยเพิ่งเบียดภาษาดั้งเดิมต่างๆ ขึ้นเป็นภาษายอดฮิตอันดับ 2 ไปเมื่อไม่นานมานี้ ความนิยมของ Python มาจากความ “ง่ายดาย” ของมันเอง เมื่อเทียบกับภาษาอื่นๆ แล้ว Python สามารถเขียนโปรแกรมที่ทำงานแบบเดียวกันได้ด้วยโค้ดที่สั้นกว่ามาก และเมื่อมันสั้นกว่า จึงเรียนรู้ได้ง่ายกว่า ประหยัดเวลากว่า และเข้าใจง่ายกว่า ประกอบกับการที่ Python มี Library (โค้ดสำเร็จรูป) มาให้ใช้มากมายนับไม่ถ้วย Python จึง (แทบจะ) กลายเป็นภาษาหลักของเหล่ามนุษย์ Lab และวงการ Data Science/A.I. ไปแล้ว
ในแง่ของการใช้ Python ทำ Portfolio Optimization นั้น ค่อนข้างสะดวก เนื่องจากเราสามารถทำการคำนวนทางคณิตศาสตร์ที่จำเป็นได้ในไลบรารี่ยอดฮิตที่สามารถดาวน์โหลดมาลงได้เลย จากนั้นเราสามารถเลือกใช้โปรแกรมแก้สมการ หรือใช้กระบวนการสุ่มแบบ Monte Carlo เพื่อคำนวนสัดส่วนการลงทุนที่เหมาะสมที่สุดได้
สมมติว่าเราต้องการลงทุนระยะยาว 5 ปี ในหุ้นสองตัว คือ SCB และ DTAC โดยเราจะใช้ข้อมูลระหว่างปี 2009 - 2013 ในการคำนวน และใช้ข้อมูลหลังจากนั้นมาประเมินผลงานของ portfolio ดูนะครับ ก่อนอื่นเราก็ทำการดึงข้อมูลเสียก่อน ในกรณีนี้สามารถทำได้ง่ายๆ ด้วย library ของ Python ที่ทำให้เราสามารถดึงข้อมูลจาก Yahoo! Finance ได้อย่างสะดวก
เมื่อทำการคำนวนหาสัดส่วนการลงทุนที่เหมาะสมที่สุด ภายใต้ความเสี่ยงที่ต่ำกว่า 30% ก็พบว่าเราควรจะลงทุนใน SCB 82% และ DTAC 18%
ตัวอย่าง Efficient Frontier จากหนึ่งในการคำนวน
ซึ่งเมื่อนำมาพล็อตผลตอบแทนระหว่างปี 2014-2018 เทียบกับคนที่ลงทุนกระจายในหุ้นทั้งสองตัวที่สัดส่วน 50:50 (ที่ผมเชื่อว่าจะเป็นสัดส่วนยอดฮิตสำหรับคนที่คิดจะซื้อหุ้นแค่สองตัว) จะได้ผลลัพธ์ดังต่อไปนี้
จะเห็นได้ว่าการนำเทคนิคนี้มาใช้ ช่วยให้เราปกป้องการลงทุนได้ดียิ่งขึ้นอย่างชัดเจน
ปัจจัยสำคัญที่จะทำให้กระบวนการนี้ทำงานได้ดี คือ การคำนวนค่าผลตอบแทนคาดหวัง และความผันผวนได้อย่างถูกต้องแม่นยำที่สุด ซึ่งนี่นับเป็นเรื่องที่ท้าทายนักลงทุน และนักการเงินไม่ใช่น้อย เนื่องจากหุ้นต่างๆ มีการเปลี่ยนแปลง (Paradigm Shift) อยู่อย่างสม่ำเสมอ ทำให้ผลตอบแทนเฉลี่ยไม่คงที่
ผลตอบแทนรายปีคำนวน 5 ปีย้อนหลังของหุ้น SCB สังเกตได้ว่าผลตอบแทนแกว่งตัวไปมาตั้งแต่ 30++% จนถึงเกือบ -10%
ดังนั้นการยกกระบวนการดังกล่าวขึ้นมาทำบน Python จึงเป็นการเปิดโอกาสให้ใช้เทคนิคต่างๆ มาช่วยในการคำนวนหา Expected Return และ Risk ได้ดียิ่งขึ้น เช่นการนำ Machine Learning เข้ามาช่วย หรือนำข้อมูลอื่นๆ เข้ามาเสริมทัพ ยิงทำให้เพิ่มประสิทธิภาพการลงทุนได้ดียิ่งขึ้น