Monte Carlo Simulation

วันนี้เราจะมาพูดถึงอีกหนึ่งเรื่องที่ได้ยินบ่อยๆ คือ  “Monte Carlo” กันครับ ถ้าจะถามว่า “จะเอา Monte Carlo มาใช้งานในด้านการลงทุนได้ยังไงดี?” คำตอบคงไม่พ้น

1) การ  “Simulation”   เพื่อหาสเถียรภาพของระบบจำพวก Risk/Reward จากการ Backtest ซึ่งในความเป็นจริงแล้วเราจะหาเสถียรภาพค่าจากอะไรก็ได้ที่เราสนใจจะวัดมัน แต่ค่าที่ไม่มีสาระมากนักก็ไม่ต้องหาก็ได้นะ (ฮาาา) หรือ

2) เราอาจจะอยากจะลองนำ Monte Carlo มาลองนำมาทำนายอนาคตก็ได้เช่นกัน เช่น pricing option, predict volatility

บทความนี้ผมจะนำ Monte Carlo มาพูดให้ฟังตามความเข้าใจอันจำกัดของตัวผมเองแบบคร่าวๆ นะครับ

ที่มาที่ไปของ Monte Carlo

ชื่อ “Monte Carlo” นั้นมาจาก เมือง “Monte Carlo” ของประเทศ โมนาโก ซึ่งเป็นเมืองที่โด่งดังเรื่องคาสิโนมากที่สุดในโลกเมืองหนึง ว่าด้วยการพนันนั้นก็ คือ เกมส์ ที่มีความน่าจะเป็นทางคณิตศาสตร์มากมายเข้ามาเกี่ยวข้อง หรือ มีการ Random มากมายเกิดขึ้น เช่น ความน่าจะเป็นในการได้เงินที่เกิดจากการเล่นเครื่องเล่นจำพวก Slot Machine เป็นต้น คาสิโนจึงเป็นแรงบันดาลใจให้นำมาเป็นชื่อของโมเดลทางสถิติ (Statistics) เพื่อจำลองเสมือน (Simulation) ตัวแปรสุ่มเหล่านั้น (โมเดลนี้ไม่ได้ใช้เฉพาะทาง Finance)

01.jpg

Casino Monte Carlo ที่ Monaco

แล้ว Monte Carlo Simulation คืออะไรกันแน่?

ถ้าว่าตามทษฏษี “Random Walk” ที่มีการตั้งสมมุติฐานว่า “การเคลื่อนที่ของหุ้นหรือ Asset อื่นๆ ในตลาดการเงินนั้นเป็นการสุ่มในแต่ละวัน” (ไม่ว่าตลาดจะมีประสิทธิภาพแบบเข้ม หรือ อ่อนก็จะมีการสุ่มผสมอยู่มากน้อยลดหลั่นกันไป) เช่น

  1. ราคาหุ้นวันที่ AAA  วันที่ 17 เมษายน 2560 อยู่ที่ 15 บาท = 15 + x|x=0
  2. ราคาหุ้นวันที่ AAA  วันที่ 18 เมษายน 2560 อยู่ที่ 13 บาท = 15 – x|x=2
  3. ราคาหุ้นวันที่ AAA  วันที่ 19 เมษายน 2560 อยู่ที่ 14 บาท = 13 + x|x =1

หรือ

  1. เทรดออเดอร์ที่ 1 ค่า commission คงที่ + slippage + 2% = commission +|x=2
  2. เทรดออเดอร์ที่ 2 ค่า commission คงที่ + slippage + 4% = commission +|x=4
  3. เทรดออเดอร์ที่ 3 ค่า commission คงที่ + slippage + 1% = commission +|x=1

ตัวแปร x นี่คือตัวแปรสุ่มที่เราไม่อาจกำหนดได้ทั้งหมดนั่นเอง

โดยปกติแล้ว เวลาเราทำการ Backtest ระบบใดๆ ก็ตาม จะได้ผลลัพธ์ออกมาค่ามา “ค่าเดียว” ใช่ไหมครับ ซึ่งตามความเป็นจริงแล้วมันไม่เพียงพอที่จะนำมาประเมินความเสี่ยง ตัวแปร x ที่ด้านบนไม่ถูกนำมาคำนวณเลยทั้งที่ในความเป็นจริงมันต้องอะไรที่ Random ไม่ตรงตัวอยู่พอสมควร เช่น ถ้าเราตั้ง Slippage(x) ไว้ที่ 2% ต่อครั้งการเทรด ในการเทรดจริงมันคงไม่ได้ Slippage เท่านี้ตลอดเวลาแน่ครับ อาจจะมีครั้งไหนที่มี Slippage มากกว่าหรือน้อยกว่าที่เราตั้งไว้ด้วย ดังนั้นด้วยผลลัพธ์จริงมันคงไม่ตรงตัวเหมือนการ Backtest ทั่วๆไปแน่ ถ้าเราใช้การเทสแบบให้ค่ามาค่าเดียว เช่น ระบบนี้ทำกำไรได้ “y%” ต่อปี มีค่า Std อยู่ที่ “z%” อย่างละค่าเดียว มันก็คือการเทสแบบ A + B = C ซึ่งก็จะเกิดปัญหาคือ “ไม่เพียงพอที่จะสรุปแบบนี้ได้” ทำให้ Monte Carlo ได้ถูกนำเข้ามาแก้ไขในส่วนของปัญหานี้ครับ

*** Monte Carlo เป็นวิธีการหนึงที่ถูกนำมาประยุกต์ใช้งานด้านตัวแปรสุ่ม x ด้านบนมันซะ การทำงานอย่างคร่าวๆ ก็คือ การสุ่มตัวแปรขึ้นมา แล้วนำมารวมใส่เข้าไปในผลของข้อมูลนั้นๆเพื่อให้สุ่มออกมาเป็นความน่าจะเป็นใหม่ ดังนั้น มันจะไม่ใช่แค่ค่ามั่วๆ สุ่มค่าออกมาอย่างเดียว ถ้ายกตัวอย่างให้เห็นภาพง่ายๆคือ โมเดลอาจจะมีการแรนด้อมข้อมูลบางส่วน เช่น slippage ที่เป็นค่า Random(Range เท่าไหร่แล้วแต่เราจะปรับ) หรือค่าอื่นๆแล้วแต่เราจะใส่ให้มัน Random มาคำนวณรวมกับ Equity Curve เดิมของเราเพื่อนสร้างออกมาเป็นความน่าจะเป็นใหม่ของมันนั่นเอง ***

Monte Carlo จะถูกนำมา ทำการจำลองแบบเสมือน (Simulation) เพื่อวัดผลที่เราสนใจ  และ เราก็จะทำการจำลองนี้เป็นจำนวนมากๆครั้ง เพื่อให้มีจำนวนเพียงพอที่จะนำค่าที่ได้จากการสุ่มเหล่านั้นมาหาความน่าจะเป็น (Probability) ของค่าที่เราต้องการวัด เช่น “มีโอกาสกี่เปอร์เซ็นที่ระบบเทรดของเราจะมี Drawdown มากกว่า y%” หรือ “ระบบเทรดของเรามีโอกาสที่จะขาดทุนมากที่สุดใน 1 วัน มากกว่า z% นั้นกี่เปอร์เซ็น” เป็นต้น

01
ตัวอย่าง ผลลัพธ์ที่ได้จากการทดลอง Monte Carlo simulation เมื่อนำมาประเมินเป็น Cumulative function

จากรูปด้านบน จะสังเกตุได้ว่า แทนที่ผลลัพธ์จากออกมาเป็นเลขตัวเดียวว่ากำไรที่ทำนายได้เป็นกี่เปอร์เซน กลับออกมาในรูปแบบ Cumulative distribution ระหว่างค่า กำไร และ ความน่าจะเป็น แทนครับ จากรูปก็จะมีโอกาสน้อยกว่าหรือเท่ากับ 20% ที่ระบบนี้จะทำกำไรต่ำกว่า ~90$ เป็นต้น

ลองใช้ Monte Carlo ในการ Simulation ข้อมูลในอนาคตดูบ้าง

จากนี้เราจะใช้กระบวนการ Monte Carlo มารันหลายๆรอบเพื่อซิมมูเลชั่นความเป้นไปได้ของข้อมูลหุ้น AOT ในอนาคต 1 ปีหลังจากนี้ มันจะเป็นค่าสุ่มตาม Random Walk hypothesis ที่มีการนำลักษณะนิสัยของข้อมูลนั้นๆ(Return Std)มารวมด้วยไม่ได้ Random เฉยๆ

01.png
AOT ‘s Adjusted Close

กราฟด้านบนเป็นกราฟของราคาปิดแบบ Adjusted Close ของหุ้น AOT โดย แกน x คือเวลา และ แกน y คือราคา เดี๋ยวผมจะลองนำหุ้นตัวนี้มาใช้กระบวนการ Monte Carlo เพื่อหาทิศทางความน่าจะเป็นในอนาคตอีกซัก 252 วันทำการ หรือ 1 ปีนะครับ โดยในการทดลอง ผมจะลองทำการรัน Monte Carlo simulation ไปยังอนาคตดูซัก 1000 รอบ

03.png
ผลลัพธ์จาก Monte Carlo ของหุ้น AOT ในระยะเวลา 1 ปี ***เป็นเพียงการคาดการตามทษฎษีเท่านั้น

กราฟด้านบนแสดงผลลัพธ์ ของหุ้น AOT ที่ได้จากการทำ Monte Carlo simulation จำนวน 1000 รอบ โดยแกน x คือวันเทรดจำนวน 1 ปี และ แกน y คือราคา

เนื่องจากการทำ Monte Carlo นั้นเป็นการทำเพื่อหา Probability  ฉะนั้น เราควรทำการ simulation ให้เยอะพอสมควรนะครับ ยิ่งมากยิ่งทำให้ได้ความละเอียดมากกว่า แน่นอนว่าควรทำมากกว่า 1000 ครั้งแน่นอนนะครับ แต่ที่ผมทำมาให้ดูกันแค่ 1000 ครั้ง เป็นเพราะกลัวว่าถ้าทำมากๆครั้ง เมื่อนำมาพล๊อตกราฟแล้วจะทำให้ดูรกเกินไปครับ แล้วจะดูไม่ออกกันพอดี จะเห็นได้ว่าผลลัพธ์จาก  Monte Carlo สามารถบอกเราได้ว่า นี่คือความน่าจะเป็นของหุ้น AOT ในปีที่จะถึงนี้ จากนั้นเราก็สามารถเอามาวัดผลที่เราสนใจได้นั่นเอง เช่น ในอนาคตปีหน้ามัโอกาสที่ค่าที่เราสนใจจะลดลงเกิน y  เป็นกี่เปอร์เซ็น เป็นต้น

Conclusion 

ไม่ว่าเราจะทำ Simulation backtest หรือ Simulationไปยังอนาคต แบบ A + B = C ที่เราว่าเป็นปัญหานั้น การใช้ Monte Carlo จะทำให้เรามาเปลี่ยนเป็น Prob(A) + Prob(B) = Prob(C)

แต่ยังไงซะสำหรับการ Simulationไปยังอนาคต มันก็คือการสุ่มตามทษฏษีเท่านั้น พูดง่ายๆ มันก็เป็น การเดาอนาคตหลายๆทางแบบมีสาระ เท่านั้นเอง (การสุ่มทั่วไป + ลักษณะนิสัยของตัวข้อมูล Return Std) อย่างเช่น ในตัวอย่าง ลักษณะนิสัยของหุ้นตัวนี้ที่ผ่านมามันมีนิขาขึ้นชัดเจนมาก เมื่อเรานำมาสุ่มด้วย Monte Carlo ผลส่วนใหญ่มันเลยยังเป็นบวกอยู่นั่นแหละครับเจ้า AOT นี่เป็นต้น ฉะนั้น ผมจึงไม่แนะนำให้ใช้มันมาทำนาย(เดา)อนาคตนะครับแต่ถ้าเอามาวิเคราะห์ก็โอเคอยู่ครับ(มันยังมีข้อจำกัดอีกหลายอย่าง) แต่สำหรับ Backtest ควรทำครับแต่ที่สำคัญต้องเลือกช่วงข้อมูลให้ดีด้วยนะครับไม่งั้นผลก็จะออกมาคล้ายๆไอ่เจ้า Monte Carlo ทำนายอนาคตโดยเลือกช่วงข้อมูลไม่ดีพอแหละครับ!!!

การทำความเข้าใจ Monte Carlo นี้ถือว่าสำคัญ และ ควรทำเป็นอย่างยิ่งครับ เนื่อง ทฤษฏี Monte Carlo นับเป็นทฤษฏีที่มีประโยชน์มากใน Quantitative Finance และ ยังเป็นรากฐานให้กับโมเดลต่างๆ มากมาย รวมทั้ง pricing model ด้วย

หวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อย สำหรับทุกท่านที่เสียสละเวลาอ่านกันนะครับ

ขอบพระคุณมากครับ

ส่งท้าย

ลองมาดูความสำคัญของการเลือกช่วงข้อมูลกันครับโดยจะยกตัวอย่างแบบ Simulation ไปยังอนาคตนะครับ(ไม่ใช่ Backtest)  โดยจะทำเพื่อหาความน่าจะเป็นหลังจากเหตุการ์ณ event ใหญ่ในอดีตปี 2014 ที่หุ้นตก 138 จุดในระหว่าง 1 วัน แต่กลับมาปิดได้ที่ลบไป 30 กว่าจุด และวันต่อมาก็ปิดลบไปอีก 10 กว่าจุดโดยรวม 2 วันราคาปิดตกไป 50 กว่าจุด ถ้าเราอยู่ในเหตุการ์ณนั้นเราคงตกใจไม่น้อย ลองเลือกดาต้ามาทำ Monte Carlo ดูนะครับ

  1. จะเลือกข้อมูล SET Index ขาขึ้นชัดเจนมาลอง Simulation

05 2009-2014-12-16

ข้อมูล SET index จาก 2009 จนถึง วันที่ 16 – 12 – 2014 ภาพรวมเป็นขาขึ้นชัดเจน

ผลที่ได้จากการทำ Monte Carlo 100 รอบ

06 2009-2014-12-16

ผลยังเป็นขาขึ้นชัดเจนนะครับ

ถ้าเราเชื่อผลนี้และเราวางแผนตามมันเราก็คงได้ประโยชน์ไปแล้ว และเราอาจจะเชื่อว่าโมเดลนี้มันเจ๋งมันดี แต่เอามันไม่ใช่อะไรนอกไปจากเราไปสร้างการ random บนข้อมูลที่มีลักษณะ bias เกินไป การทำนายอนาคตของมันจึงออกมารูปแบบนี้

2. เลือกข้อมูลในช่วงที่ SET index ไม่มีเทรนชัดเจน(และช่วงข้อมูลไม่ยาวพอ)มาลองทำดูใหม่ครับ

07 2013-2014-12-16.png

ข้อมูล SET Index ตั้งแต่ 2013 จนถึง 16 – 12 – 2014

ลองมาทำ Monte Carlo ดูซัก 100 รอบ เพื่อสังเกตความแตกต่าง

08-2013-2014-12-16

เทรนไม่ชัดแล้วนะใช่ไหม เพราะฉะนั้นช่วงที่เลือกมาทำก็สำคัญนะครับทั้งในการ Simulation เพื่อ backtest หรือ จะ Simulation อนาคตก็ตาม

Advertisements

One thought on “Monte Carlo Simulation

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