ลุ้นราคาหุ้นไทยใน SET100 สอยกำไรใน 7 วัน
ทีม DSE16
Team member: Pop 🏠, nnew 📊, ป๋ำ 🎭, โอ๊ต ⚙️, หมิว ✈️, นภันต์ 💻, เท็น 🏭, ภู 📡, กระติ๊บ 📈, ตุ๊ก 📚, โอ๋ 💾, Pui 📱
เกริ่นนำ
ช่วงนี้ตลาดทุนทั่วโลกมีความผันผวนสูงมาก Earning ของตลาดโดยรวมได้รับผลกระทบจากสถานการณ์การแพร่ระบาดของ COVID-19 ที่ยังไม่ดีขึ้น สิ่งที่เราไม่เคยเจอมาก่อนในรอบ 100 ปี ขนาด Warren Buffet เจ้าพ่อการลงทุนเชิงคุณค่ายังบอกว่าตลอด 90 ปีที่ลงทุนมายังไม่เคยเจอแบบนี้มาก่อน รัฐบาลทั่วโลกหากลไกทางเศรษฐกิจและการเงินต่างๆ มาใช้อย่างที่ไม่เคยมีมาก่อนจนเงินคงจะล้นโลกในไม่ช้า ในขณะที่ตลาดหุ้นสหรัฐทำ All time high ทุกวัน แต่ตลาดหุ้นไทยไม่ไปไหน แถมผลประกอบการโดยรวมค่อนข้างแย่แต่หุ้นบางตัวกลับขึ้น เราอาจจะต้องหาทางเลือกในการลงทุนหุ้นใหม่ๆ ทางเลือกที่ดีทางหนึ่งตามสไตล์ Botnoi แบบเราๆ คือ การใช้ Machine Learning เพื่อคาดการณ์ราคาหุ้นตามหัวข้อ “ลุ้นราคาหุ้นไทยใน SET100 สอยกำไรใน 7 วัน”
ที่มาที่ไป
งานนี้เป็นโจทย์ประจำสัปดาห์ที่ 4 และ 5 ของ Botnoi Data Science Essential Class ที่เหมือนกินบุฟเฟต์ที่กินเท่าไรก็ไม่หมด มีให้เรียนเยอะไม่หมดจนเรียนไม่ทัน เรียนกันจนจุก งานนี้ให้พยากรณ์ราคาหุ้นจาก SET100 แล้วเลือกหุ้นเพื่อลงทุนด้วยเงิน 10,000 บาท โดยซื้อที่ ATO ของวันที่ 17 กันยายน และขายที่ ATO ของวันที่ 24 กันยายน หรือ 7 วัน เป็นที่มาของ สอยกำไรใน 7 วัน และผลทดสอบอยู่ที่กำไรที่จะได้รับ
Library แนะนำสำหรับนักลงทุนหุ้นไทย
Library หนึ่งที่ใช้สำหรับการดึงข้อมูลหุ้นไทยในการทำงานครั้งนี้ถูกพัฒนาโดยคนไทย (น่าจะนะครับเพราะพี่เค้าเขียนภาษาไทยและ Chat ไทยได้) เจ้าของ Facebook Page “Superstarman” ที่เน้นเรื่องการให้ความรู้ด้านการลงทุนผ่านการใช้งานการเขียนโปรแกรม Python และ Library “starfishX” ผู้เขียนเองก็เป็น Fan Page และพูดคุยขอคำแนะนำหลายอย่างจากเจ้าของ Page เป็นประจำ สามารถติดตาม “Superstarman” และสามารถดูการติดตั้งและการใช้งาน Library “starfishX” ได้ตาม Link ด้านล่างครับ
!pip install starfishx
SET100 ตอนนี้ !?!
ก่อนจะไปพยากรณ์ราคาหุ้นใน SET100 เรามาดูข้อมูลทั่วไปใน SET100 กันก่อน
ตามชื่อ SET100 ประ กอบด้วยบริษัทจดทะเบียนในตลาดหลักทรัพย์แห่งประเทศไทย 100 อันดับแรกที่เเป็นบริษัทใหญ่ที่เข้าเกณฑ์ของ SET ประกอบไปด้วยบริษัทโดยมีสัดส่วนของ Sector 5 อันดับแรกในด้านจำนวนมากกว่า 50% คือ
- พลังงาน
- พัฒนาอสังหาริมทรัพย์
- เกษตรและอาหาร
- ค้าปลีก
- ธนาคาร
รายได้ของ SET100 ในปี 2019 นั้นจะเห็นว่าส่วนใหญ่มาจากธุรกิจพลังงาน ปิโตรเคมี วัสดุก่อสร้าง ค้าปลีก
ที่น่าสังเกตคือรายได้ในครึ่งปีแรกของ 2020 ที่ได้รับผลกระทบจาก COVID-19 TOP5 ยังคงเป็นกลุ่มเดิมแต่ ธุรกิจที่ได้ผลกระทบมากคือกลุ่มขนส่ง การท่องเที่ยว และ Media & Publishing ที่รายได้ลดลงจากเดิม
จะเห็นได้ว่าอาจจะต้องระมัดระวังในการลงทุนในช่วงนี้เนื่องจากการเปลี่ยนแปลงของเงินทุน Sector นักลงทุนรายย่อยหรือเม่าน้อย (ไม่ใช่ Botnoi นะครับ ^^) อย่างเราต้องพิจารณาหลายปัจจัย เช่น ในระยะกลางถึงยาวควรหลีกเลี่ยงหุ้นการเดินทางและการท่องเที่ยว หรือธนาคาร แต่ในการลงทุนครั้งนี้ใช้เวลา 1 สัปดาห์ ดังนั้นอาจจะต้องหาหุ้นที่รับข่าวระยะสั้น เช่น มาตรการของรัฐ ในการใช้จ่ายเงิน หรือ การเปิดให้นักท่องเที่ยวเดินทางเข้าเมืองไทยแต่ให้อยู่ยาว หุ้นประเภทค้าปลีก หุ้นประเภทโรงแรม ปั๊มน้ำมัน หรือ ประกันชีวิต ประกันภัย อาจจะได้รับอานิสงค์ในช่วงนี้
ในงานของเราคราวนี้จึงใช้การประกอบกันระหว่างปัจจัยพื้นฐาน ข้อมูลทางเทคนิคเช่น EMA, MACD, RSI และการใช้ Machine Learning มาประกอบการตัดสินใจเลือกหุ้นเพื่อทำการซื้อขายในครั้งนี้
เรื่องราวเล็กๆ ของ Recurrent Neural Network หรือ RNN
ฟังดูแล้วมันไม่น่าจะเกี่ยวกับการทำนายราคาหุ้นได้เลย แต่ Recurrent Neural Network หรือ RNN เป็นระเบียบวิธีในการคำนวณที่เราเลือกเพื่อการพยากรณ์ RNN ถูกใช้พยากรณ์ที่เป็นเหตุการณ์ที่เรียงลำดับกัน หรือที่เรียกว่า Sequential หรือ Time Series Analysis โดยใช้แนวคิดของการเชื่อมโยงเครือข่ายประสาทของมนุษย์ที่ถูกส่งผ่าน Layer ของการกรองข้อมูลต่างๆ หลายชั้น
เราเลือกใช้ Long Short-Term Memory หรือ LSTM ใน Tensorflow ที่ถูกพัฒนาโดย Google เป็นระเบียบวิธีในการวิเคราะห์ครั้งนี้ โดยใช้ Keras ท่านสามารถศึกษาเพิ่มเติมได้ตาม Link ด้านล่างครับ
เข้าสู่กระบวนการทำงาน
ก่อนอื่นก็ import library ที่จำเป็นในการวิเคราะห์ของเรา มีบางอันใส่ไว้เผื่อๆ ครับอาจจะไม่ได้ใช้
ถัดไปขออธิบายจากรายบรรทัดของภาพด้านล่างนะครับ
- กำหนดตัวแปรเพื่อใส่ชื่อของหุ้นที่เราจะดึงข้อมูล หรือ Get Data
- Get Data จากการใช้ Library starfishX ดังที่กล่าว โดยกำหนดชื่อหุ้น และการดึงราคา Open, High, Low Close และ volumn ซึ่งข้อมูลที่ได้ก็จะเป็น Column โดยจะได้หน้าตาประมาณนี้
4. จากโจทย์จะซื้อที่ ATO ดังนั้นเราจึงใช้ราคาเปิด OPEN เป็นตัววิเคราห์ การใช้ LSTM มาวิเคราะห์จะได้ผลที่ดีถ้าเราใช้ Time Series เดียวในการเป็น Feature
6. — 24. เป็นการแบ่งข้อมูลที่ใช้ Train และ Test โดยเราเลือกเป็นอัตราส่วน 80% ต่อ 20% และจึงทำการ Scale ข้อมูลโดยใช้ MinMaxScaler ให้อยู่ในช่วงระหว่าง 0 ถึง 1 เนื่องจากใช้ LSTM MinMaxScaler จึงเหมาะสมในการทำ Scale ข้อมูลที่สุด
25. — 34. จะเป็นการสร้างโมเดลโดย 50 Layers ตามมาตรฐาน จากนั้นจึง Train และ Fit Model
35. — 47. เป็นการทดสอบ Test Model ที่ 100 วันย้อนหลัง
48. — 51. ทำ Prediction Model
51. — 52. หาค่า Root Mean Square Error จาก Prediction Model
หาค่า prediction ที่ได้มาเพื่อทำ Visualize
สร้าง Exponential Moving Average
สร้าง MACD
สร้าง RSI
สร้าง Model Prediction Price เพื่อเปรียบค่า
ก็จะได้ผลลัพธ์ประมาณ CBG กราฟสวยนะครับ
ทำการหาราคาใน 7 วันข้างหน้า
ค่าและผลลัพธ์ที่ได้ก็จะประมาณนี้ครับ
จากการรัน Model ของหุ้นทุกตัวใน SET100 มีหลายตัวที่น่าสนใจ แต่เราเลือกที่มีความเป็นไปได้ทั้งสามด้านคือ Machine Learning, เทคนิค และพื้นฐานครับ
TU หรือ Thai Union Group คือตัวเลือกที่เห็นว่าเหมาะสมครับ เนื่องจาก
- ราคาที่พยากรณ์ออกมาอยู่ที่ 15.23 บาท ใกล้เคียงกับความเป็นคืออยู่ในแนวต้านระยะสั้นพอดี
- ค่า RMSE อยู่ที่ 0.67
- RSI ออกจาก Sideway เกิน 55 และ กำลังวิ่งไปที่ที่ 70
- MACD มากกว่า 0 ได้
เทียบกับกราฟปัจจุบัน
สามารถศึกษา Code ของเราได้ตาม Link ด้านล่างครับ
https://drive.google.com/file/d/1RYMZ8R4S-_yPD_h6B0fMo2N4i2O-6Xw4/view?usp=sharing
สุดท้ายผมนี้ผมได้แนบการซื้อขายของ SET100 มาให้ดูประกอบครับ
อย่าลืม !!! การลงทุนมีความเสี่ยงควรใช้ ML ประกอบกับวิจารณญาณและความรู้การลงทุนในการตัดสินใจครับ