Morning Gaps Trading with Naive Bayes

cway investment
cw-quantlab
Published in
3 min readOct 8, 2018

อธิบายเรืองของ Probability กับการเทรดไปเลยทำให้ได้มีโอกาสจับเอาเรื่อง Day Trading Morning Gap มาอธิบายเป็นตัวอย่างอีกครั้ง ย้อนไปสัก 2 ปีที่แล้วผมมีโอกาสทำ research เรื่อง Gap Trading ในตลาดหุ้นไทย แนวคิดหลักคือ เราจับเอาพฤติกรรมของการเกิด GAP ในตอนเช้า (Morning Gap) ก่อนเปิดตลาด ร่วมกับพฤติกรรมราคา ของวันก่อนหน้า มาใช้เป็นสัญญาณในการเข้าซื้อขาย ดัชนี(ตอนนั้นทำใน Tfex Set50)

ทดสอบระบบตอนนั้นพยายามหนีแนวคิดเทคนิคอลแบบเดิมที่ใช้การสรุปประเภท GAP ต่างๆแล้วมาหาข้อสรุปเป็นเงื่อนไขการซื้อขาย ผมเลือกใช้การทำ Data Analysis เพื่อหา Pattern ของข้อมูลโดย Machine Learning แทน โดยเราจะทดสอบระบบเทรดและมาเรียนรู้พฤติกรรมของ GAP ใน SET กัน

ก่อนอื่นเรามาทำความเข้าใจเรื่องของ GAP หรือช่องว่างราคา รอยต่อที่เกิดจากภาวะไม่ปกติของการซื้อขาย ทำให้เกิดการกระโดดและมีช่องว่างระหว่างราคาเกิดขึ้น โดย GAP เราเลือก Morning Gap หรือ Gap เปิดตลาด ซึ่งเป็น GAP เกิดบ่อยและมีนัยยะต่อทิศทางราคา โดยเราทดสอบสมมติฐาน กลยุทธ์การเทรดที่เชื่อว่า GAP ก่อนเปิดตลาด ถ้าขนาดมีนัยยะสำคัญ มันเป็นตัวกำหนดพฤติกรรมของราคา ในช่วงวันนั้น และเป็นตัวสะท้อนอารมณ์ตลาดอีกด้วย

ภาพตัวอย่าง Morning Gap

การเตรียมข้อมูล

การทดลองนี้ ใช้ข้อมูล GAP Size และข้อมูลพฤติกรรมราคาของวันก่อนหน้า ได้แก่ Price Spread, Return , Volatility เป็นหลักในการวิเคราะห์หา pattern ของข้อมูล ที่นำมาใช้เป็นตัวพยากรณ์ผลการเกิด Bullish และ Bearish ในลักษณะแบบ Binary Classification เพื่อพยากรณ์ลักษณะของแท่งเทียนที่เกิดในอนาคต เพื่อกำหนดเป็นเงื่อนไขการ Long หรือ Short ต่อไป ซึ่งในการทดลองนี้ใช้ข้อมูล SET ช่วงปี 2007–2016 ครอบคลุมภาวะตลาดต่างๆให้มากที่สุด

ตัวอย่างข้อมูลดิบ จากฐานข้อมูล

เริ่มต้นทำ EDA ลองนำข้อมูลทั้งหมดที่เราเตรียมจากฐานข้อมูล มาวิเคราะห์เบื้องต้น เพื่อดูพฤติกรรมของข้อมูล ก่อนเริ่มทำการ Training Model

ภาพข้อมูล SET ช่วง 2007–2016 ที่ใช้วิเคราะห์ GAP Pattern

ทดลองทำการวิเคราะห์ความสัมพันธ์ของ Data หลักที่ใช้ และดูการกระจายตัวข้อมูล

ช่วงระดับดัชนี SET สูง จะเห็นการเกิด GAP ขนาดใหญ่ช่วงเปิดตลาด ยิ่งมาก

Gaussian Naive Bayes

แนวคิดการเทรด ด้วย Morning Gap เป็นกลยุทธ์การเทรดที่มีมานานแล้ว ส่วนใหญ่จะอิงกับ Probability เป็นหลัก ดังนั้นเพื่อให้หยืดหยุ่นและให้สอดคล้องกับลักษณะการใช้ข้อมูล GAP แบบเดิม ผมเลือกใช้ Naive Bayes มาเป็น Training Algorithm ให้กับ Model

Naive Bayes Classifier Model อาศัย Bayes theorem ในการคำนวณเพื่อใช้อนุมานหรือทำนายค่าของผลลัพธ์จากความน่าจะเป็นที่เกิดก่อนหน้าเพื่อนำมาใช้ในการจำแนก โดยทฤษฎีของเบย์ (Bayes theorem) อิงกับ Conditional Probability ใช้ในการคำนวณค่าโดยคิดคำนวณจากค่า posterior probability , prior probability และ likelihood

ข้อดีของ Naive Bayes algorithm คือความสะดวก ง่ายในการ Training โดยเฉพาะกับจำนวน Feature ที่มาก และข้อมูลขนาดใหญ่ ประกอบกับสามารถใช้จำแนกคลาสจำนวนมากได้(อนาคตกรณีต้องการไปพัฒนาโมเดลให้ซับซ้อนขึ้นกว่านี้) แน่นอนว่าข้อจำกัดก็มีเช่นกัน และความถูกต้อง หรือประสิทธิภาพอาจจะสู้ Training Algorithm ประเภทอื่นไม่ได้

Naive Bayes ยังมีประเภทเทคนิคการคำนวณย่อยอีกหลากหลาย ในการทดลองนี้เลือกใช้แบบพื้นฐาน ที่ไม่มีการปรับแต่งค่า ใช้ Gaussian Naive Bayes algorithm ตั้งบนสมมติฐานที่เหมาะกับข้อมูลของเราที่มีการกระจายตัวแบบ normal distribution

Training Model

ทำการแบ่งข้อมูลทั้งหมดราวๆ 2200 record เราใช้ช่วงปี 2007 -2015 แล้วแยกเป็น 2 ส่วนคือการ Training และ Testing โดยใช้อัตราส่วน 70:30 เพื่อให้ได้ค่าประเมินความถูกต้อง ที่ดี ทำการ cross validation เพื่อทำการวิเคราะห์ค่า accuracy และค่าสถิติของโมเดล โดยใช้ค่า K = 10

ผลลัพธ์ที่ได้จากการทดสอบโมเดลที่เรา Train ตามคาดเหมือนสมมติฐานที่ตั้งไว้ ได้ค่าความถูกต้อง ราวๆ 0.52 ถือว่าค่อนข้างต่ำ เพราะการ อนุมานจาก GAP ซึ่งเกิดในอดีต โอกาสใช้ทำนายอนาคตค่อนข้าง ยาก ยิ่งในภาวะตลาดผันผวน

ประเมินค่า ROC ของ ได้ผลออกมาดังภาพด้านล่าง

Testing Model

ทดสอบโมเดล Gaps Trading ที่พัฒนาด้วย Gaussian Naive Bayes บนข้อมูลอิสระ เฉพาะช่วงปี 2016 ที่เป็นภาวะตลาดมีความผันผวนและมีระดับ PE สูง เป้าหมายตรงนี้เพื่อดู การตอบสนองของโมเดล และดูผลลัพธ์ที่เกิดกับตลาดช่วงปี ที่ผ่านมา

ประเมินความถูกต้องของการทดสอบ GNB Model กับข้อมูล ปี 2016 ได้ค่า accuracy ที่ 0.56 ทดสอบระบบเทรด โดย Buy ที่ bullish signal และ Sell ที่ bearish signal ผลลัพธ์ของ return ที่ได้จากการเทรด คิดเป็น point ได้ดังภาพด่านล้าง

ซึ่งเราจะเห็นว่า โมเดล Morning Gaps Trading ที่ใช้ข้อมูล GAP ก่อนเปิดตลาด และข้อมูลราคาในวันก่อนหน้า มาพยากรณ์ สัญญาณซื้อขาย ที่เราทดสอบนี้ มีทั้งช่วงที่ทำผลงานได้ดีและช่วงที่ทำผลงานได้แย่ โดยเฉพาะในภาวะตลาดที่มีความผันผวนสูงๆ ซึ่งตรงกับสมมติฐานที่ตั้งตอนแรก คือ ตลาดไม่อาจจะคาดเดาได้แม่นยำ 100% โดยเฉพาะเกิดค่าความผันผวนสูง เกิดภาวะความไม่แน่นอนของพฤติกรรมราคา

สรุป

การทดลองนี้ทำเพื่อทดสอบตามแนวคิดของ Morning Gaps Trading ดังนั้นจึงไม่มีการปรับแต่งโมเดลเพิ่ม หรือทำการ Optimization อะไร อนาคตถ้าใครต้องการทำต่อ ก็สามารถปรับปรุงด้วยการเพิ่ม Feature ข้อมูลอื่นๆ เช่น Volume, Trend / Momentum เข้าไปได้ เพื่อเพิ่มความซับซ้อนของข้อมูลและปรับปรุงประสิทธิภาพของโมเดล

อ้างอิง

http://www.statsoft.com/textbook/naive-bayes-classifier

https://en.wikipedia.org/wiki/Naive_Bayes_classifier

https://www.linkedin.com/pulse/gap-trading-probability-sanjay-k-mota

--

--