หากำไรจากตลาดหุ้น📈 ด้วย Machine Learning

Nice Lapadrada
DSE_19
Published in
6 min readSep 15, 2020

สวัสดีค่ะ/ครับ 🙏 พวกเรา DSE_19 กลับมาอีกครั้ง กับบทความที่ผู้สนใจลงทุนหุ้น SET100 ไม่ควรพลาด!! เพราะเราจะช่วยลดความเสี่ยงก่อนการลงทุนด้วยความรู้ Machine Learning ที่พวกเราได้เรียนมาตลอดสัปดาห์ที่ 4 ของคลาสเรียนบอทน้อย

📝บทความนี้เป็นส่วนหนึ่งของ project week 4 ในหัวข้อ Trend forecasting
จัดทำโดยสมาชิกกลุ่ม 19
จาก Data Science Essential Classroom (by Botnoi Consulting Co., Ltd.)

สำหรับโจทย์ใน week นี้ คือ…

หากจะซื้อหุ้นที่ ATO ในวันที่ 17 กันยายน 2563
และต้องการจะขาย ATO ในวันที่ 24 กันยายน 2563
หุ้นตัวไหนใน SET100 จะทำกำไรสูงที่สุด
โดยใช้ขั้นตอนทาง Machine Learning มาช่วยในการเลือกหุ้น

และที่ตื่นเต้นสุด ๆ สำหรับ project นี้…
ทางบริษัท Botnoi จะใช้เงิน 10,000 บาท!!!
ซื้อและขาย หุ้นที่เราเลือกกันจริง ๆ ด้วย

มารอลุ้นกันว่า...
machine learning จะช่วยให้เราทำกำไรจากการซื้อหุ้นครั้งนี้ได้หรือไม่😇

เงื่อนไขของโจทย์ คือ…

  1. ให้เลือกหุ้นที่ราคาต่ำกว่า 100 บาท (เพราะปกติซื้อหุ้นขั้นต่ำคือ 100 หุ้น)
  2. หากได้กำไรจะแบ่ง 50:50 หากขาดทุนทางทีมงาน Botnoi จะรับความเสี่ยงเอง

แปลความหมายโจทย์​

หาหุ้นจาก SET100 ที่มีผลตอบแทนหรือกำไรสูงที่สุด
จากการซื้อที่ราคาเปิด ของวันที่ 17 กันยายน 2563
และขายที่ราคาเปิด ของวันที่ 24 กันยายน 2563
หรือราคาที่ห่างกัน 5 วัน (window = 5 business days)

Input: features of stocks (from SET100)
Output: %change

โดยหาเรา Maximum %change จาก stocks ทั้งกระดาน SET100
แล้วมาทำการ ranking เพื่อเลือกว่าจะซื้อหุ้นตัวไหนดี

ก่อนจะเข้าสู่ขั้นตอนทาง machine learning เรามาทำความเข้าใจ…ความรู้พื้นฐานการลงทุนหุ้น…กันก่อนน้าา

💡 ชวนคิด: การทำกำไรจากตลาดหุ้นระยะสั้น ดีอย่างไร ?
จากบทวิจัยหลายชิ้นอ้างอิงว่าตลาดหุ้นไทยให้ผลตอบแทนเฉลี่ย 8–12% ต่อปี
แต่ระยะซื้อขายหุ้น 1 สัปดาห์ จาก 52 สัปดาห์ทำการนั่น ก็คือ 1/52
ถ้าเอาผลตอบแทนเฉลี่ย 12% หารด้วย 52 สัปดาห์ ก็จะได้ 0.23%

สรุปคือ ถ้าเทรดหุ้นภายใน 1 สัปดาห์ ทำกำไรได้มากกว่า 0.23% (ยังไม่ได้หักค่าธรรมเนียมตอนซื้อและขายซึ่งแต่ละโบรกเกอร์ก็ไม่เท่ากัน) ก็จะชนะผลตอบแทนเฉลี่ยหุ้นไทยได้

Keywords เกี่ยวกับหุ้น

📙 ทำไมต้องเลือกหุ้นจาก SET100 ?
SET100 ถือเป็นหนึ่งใน SET index ที่ popular มาก ๆ
เพราะเป็นหุ้นที่ติด top 100 ตัวแรก ที่มีราคาสูง และซื้อขายกันเยอะ
(มีการจัดลำดับหุ้นทุก ๆ 6 เดือน)
ซึ่งหุ้นที่ติด top แรก ๆ จะปลอดภัยกว่า เพราะส่วนใหญ่จะเป็นหุ้นของบริษัทใหญ่ ๆ ที่รู้จักกันดีและยากที่จะเจ๊ง

SET100 index
รายชื่อหุ้นทั้งหมดใน SET100 (20Q3)

📒 SET Index (ดัชนีราคาหุ้น) คืออะไร ?
คือ ดัชนีราคาหุ้นที่แสดงถึงความเคลื่อนไหวของราคาหุ้นทั้งหมดในตลาดหลักทรัพย์แห่งประเทศไทย ซึ่งตอนนี้มีหุ้นอยู่ประมาน 620 ตัว ถ้าราคาหุ้น (โดยเฉลี่ย) ทั้งหมดที่อยู่ในตลาดราคาสูงขึ้น ตัวเลขดัชนีก็จะขึ้น ถ้าราคาหุ้นในตลาดตก ตัวเลขดัชนีก็จะตก

📗 Indicators (ดัชนีชี้วัด) เกี่ยวข้องกับการซื้อ/ขายหุ้นอย่างไร ?
เนื่องจากพฤติกรรมของราคาหุ้นมักจะเกิดขึ้นซ้ำ ๆ จึงมีการนําวิชาสถิติมาประยุกต์ใช้และจะทำให้เราเห็น trends ที่เกี่ยวข้องกับหุ้นได้
โดย Indicators สามารถบอกสัญญาณซื้อขาย / แนวโน้ม / การกลับตัว / ระดับความเสี่ยง ได้นั่นเอง

INVESTING 101: A tutorial for beginner investors

ขั้นตอนการลงทุนในหุ้น

  1. กำหนดเป้าหมาย และ ระยะเวลาการลงทุนให้ชัดเจน
  2. วิเคราะห์ปัจจัยพื้นฐาน (Fundamental Analysis)
  3. ประเมินมูลค่าที่แท้จริง
  4. หาจังหวะลงทุนที่เหมาะสม

แต่ !!! เนื่องจากโจทย์ได้กำหนดเป้าหมาย อีกทั้งระยะเวลาการลงทุนนี้ค่อนข้างสั้น
โจทย์ที่พวกเราได้รับมามีเพียง…

การทำกำไรให้ได้สูงที่สุดจากการ trade หุ้นใน SET100 เพียงตัวเดียว โดยการซื้อ/ขายที่ราคาเปิด (ATO) และถือเป็นเวลา 1 สัปดาห์”

ดังนั้น เราจะลืมทฤษฎีการลงทุนพื้นฐานไปบางส่วน แล้วมา…เก็งกำไรระยะสั้น…จากตลาดหุ้นแทน

การเก็งกำไรระยะสั้น จะไม่คิดเรื่องปัจจัยพื้นฐาน (Fundamental Analysis) ของหุ้นตัวนั้น โดย input features หลัก ๆ จะเป็น indicators ที่ใช้สำหรับการทำ Technical Analysis

แต่เนื่องจาก indicators นั้น มีเยอะมาก ในบทความนี้ จะใช้เพียง indicators เด่น ๆ ที่ได้รับเลือกไปอยู่ใน TradingView

สามารถศึกษาเพิ่มเติมได้ที่ https://www.set.or.th/set/education/html.do?name=stock&showTitle=F

INVESTING 102: Basic technical analysis

indicators (ดัชนีชี้วัด)

โดย indicators ที่ใช้มีดังนี้

📊 สัญญาณเทคนิค (Oscillator)
1. Relative Strength Index (RSI); ‘RSI’
2. Stochastic Oscillator; ‘STOCH’
3. Commodity Channel Index (CCI); ‘CCI’
4. Average Directional Index (ADX); ‘ADX’
5. Awesome Oscillator(AO); ‘AO’
6. Momentum Indicator (MOM); ‘MOM’
7. Moving Average Convergence/ Divergence(MACD); ‘MACD’
8. Stochastic RSI(STOCH RSI); ‘STOCHRSI’
9. William %R (%R); ‘WILLIAMS’
10. Bear’s power; ‘EBBP’
11. Ultimate Oscillator (UO); ‘UO’

📊 ค่าเฉลี่ยเคลื่อนที่ (Moving Averages)
12. Exponential Moving Average(EMA); ‘EMA’
13. Simple Moving Average (SMA); ‘SMA’
14. Ichimoku Cloud; ‘ICHIMOKU’
15. Volume Weighted Moving Average (VWMA)
16. Hull Moving Average (HMA); ‘HMA’

หากอยากทำความเข้าใจเพิ่มเติมเกี่ยวกับ Indicator แต่ละประเภท สามารถศึกษาเพิ่มเติมได้ที่ https://www.finnomena.com/daddy-trader/best-indicator/

จาก INVESTING 102 ทำให้เราทราบว่า จริง ๆ แล้ว indicators เหล่านี้ หลายๆ ตัว ก็คือ Time-series model รูปแบบหนึ่งที่แสดงให้เห็นถึง ทิศทางของแนวโน้ม อัตราเร่งหรือแรงเหวี่ยงของราคา (momentum) ความผันผวนของราคา นั่นเอง

ซึ่งทางกลุ่ม DSE_19 มองว่า การใช้ indicators มาช่วยเป็น features ในการ training น่าจะพอช่วยให้ การเรียนรู้ของเครื่องแม่นยำยิ่งขึ้น เพราะเป็นการนำ (conventional) Time-series model มาใช้ในการ train เป็น Machine Learning Model เพิ่ม

โดยการคำนวน Technical analysis เพื่อหา features นั้น ทางทีมเราจะใช้ package finta (FINancial Technical Analysis)

หลังจากเกริ่นนำเรื่องหุ้นมาพอสมควร ก็ได้เวลาเข้าสู่ขั้นตอนการทำ Machine learning กัน

วางแผนก่อนลงมือ…มาร่าง framework กันก่อน

ML pipeline

หากเรานำหุ้น ทั้ง 100 ตัวมาเข้า model เพื่อ trend และ ranking ทั้งหมด คงจะใช้เวลาจำนวนมาก และใช้ทรัพยากรจำนวนไม่น้อย ทางทีมงานเราเลยวางแผนทำต้นแบบที่ใช้ เวลาไม่มาก และสามารถนำไปต่อยอดหรือ พัฒนาต่อไปเป็น model ที่มีประสิทธิภาพมากขึ้นได้

โดยเริ่มจากการเลือก trend เพื่อเลือกหุ้นที่มีโอกาสชนะ หรือ win จากการซื้อขายที่ราคา ATO โดยมี window เท่ากับ 5 วันทำการ (business days) โดยถ้า price_t+5 > price_t จะlabel เป็น 1 (win) และนำมา trend เพื่อ classify และทำนายคร่าว ๆ และแบ่งกลุ่มหุ้นของ set100 เป็น กลุ่มที่มีโอกาสชนะสูง (1) กับกลุ่มที่มีโอกาสแพ้สูง (0)

หลังจากนั้นจึงนำหุ้นในกลุ่มที่มีผลการทำนายว่าโอกาสชนะสูง ไป ทำการเรียนรู้โดยใช้ Long Short-Term Memory (LSTM) ต่อไป

รูปแบบการทำงานของ LSTM, ภาพจาก http://colah.github.io/posts/2015-08-Understanding-LSTMs/

ซึ่งที่เลือกใช้ LSTM ช่วยในการทำนายเพราะว่า LSTM เป็น Model ที่มีการเรียนรู้รูปแบบของวันก่อน ๆ หรือมี short-term memory ซึ่งสามารถ “จำ” หากข้อมูลนั้น มีความสำคัญ​ และสามารถ “ลืม” หากข้อมูลนั้นมีความสำคํญน้อยกว่า

ซึ่งเหมาะสำหรับการใช้ในการเรียนรู้ ของข้อมูลที่เป็น time-series มากกว่า

(การ classification ในตอนแรก เป็นการใช้ข้อมูลในรูปแบบของ จุดเวลา แต่ยังไม่ได้ใช้คุณสมบัติของความเป็น อนุกรมเวลา ซึ่งเราจะได้ใช้คุณสมบัตินั้น ใน LSTM)

Machine Learning Pipeline

0. Set up environment (Install Library)
1. Import and Data Collection
2. Data Pre-processing and Feature Engineering : extract feature and label, train-test split
3. Prediction Model
4. Visualize
5. Feature Engineer
6. Setup Pipeline

👨‍💻Link Google Colab:

https://colab.research.google.com/drive/15aHXZIrtk1CZh_wR4xP751IG4P1NAAhc?usp=sharing

0. Set up environment (Install Library)

ในครั้งนี้เราก็จะใช้ library yfinance ซึ่งเป็น ข้อมูลจาก Yahoo Finance และ library finta ซึ่งเป็น financial technical indicators มาใช้งาน

Install Library ต่างๆ ที่เราจะใช้งาน

1. Import and Data Collection

โดยจะสร้าง function การดึงข้อมูลจาก Yahoo Finance

function การดึงข้อมูลจาก Yahoo Finance

2. Data Processing & Feature Engineering

Split Data

โดย Model ที่เราจะเลือกใช้ในการ Classify จะเป็น Classification model แบบ classic ที่สามารถพบเห็นกันได้ทั่วไป คือ Random forrest และ kNN

Random Forest

และทำการ Vote เพื่อเลือกผลลัพธ์​ที่ดีที่สุดจาก ทั้งสอง classification โดย Ensemble learning

https://www.researchgate.net/figure/Ensemble-learning-architecture_fig2_334581217

หลังจากนั้นก็นำมารวมกันเพื่อสร้างเป็น pipeline ในการเลือกหุ้นที่มีโอกาสชนะสูง

และทำการเลือกหุ้นจากทั้ง 100 ตัว เพื่อหาหุ้นที่มีโอกาสชนะสูง

โดยผลลัพธ์ที่ได้จากขั้นตอนนี้ คือ

['ACE.BK', 'ADVANC.BK', 'AMATA.BK', 'AOT.BK', 'AP.BK', 'AWC.BK', 'BBL.BK', 'BCH.BK', 'BDMS.BK', 'BEC.BK', 'BEM.BK', 'BGRIM.BK', 'BJC.BK', 'BTS.BK', 'CBG.BK', 'CENTEL.BK', 'CHG.BK', 'COM7.BK', 'CPALL.BK', 'CPF.BK', 'CPN.BK', 'CRC.BK', 'DOHOME.BK', 'DTAC.BK', 'EA.BK', 'EGCO.BK', 'EPG.BK', 'ERW.BK', 'GFPT.BK', 'GLOBAL.BK', 'GPSC.BK', 'GULF.BK', 'HANA.BK', 'HMPRO.BK', 'INTUCH.BK', 'IVL.BK', 'JMT.BK', 'MAJOR.BK', 'MINT.BK', 'MTC.BK', 'ORI.BK', 'PLANB.BK', 'PRM.BK', 'PTT.BK', 'PTTGC.BK', 'RATCH.BK', 'RS.BK', 'SCC.BK', 'STA.BK', 'SUPER.BK', 'TASCO.BK', 'THANI.BK', 'TISCO.BK', 'TOA.BK', 'TOP.BK', 'TQM.BK', 'TRUE.BK', 'TTW.BK', 'TVO.BK', 'VGI.BK', 'WHA.BK']

หลังจากนั้นเรานำหุ้นทั้งหมดในกลุ่มนี้ ทำการ training โดยใช้ LSTM กันต่อ

Price Prediction by using LSTM model.

Split Train-Test : 90–10
LSTM Model

LSTM สามารถสร้างได้โดย ผ่าน keras ซึ่งปัจจุบัน รวมอยู่ใน tensorflow ทำให้สะดวกต่อการใช้งานมาก

โดยความเป็นจริง ถ้าอยากให้ model มีประสิทธิภาพมากขึ้น ทำนายได้แท่นยำมากยิ่งขึ้น ต้องมีการ tune hyperparameter ต่าง ๆ เพื่อให้ได้ค่า ที่ดีที่สุด ของ model นั้นๆ

โดยหุ้นทั้งหมด 10 ตัวที่ได้จากการ Predict

  1. DOHOME >> ราคาปัจจุบัน 12.80 บาท
  2. CHG >> ราคาปัจจุบัน 2.48 บาท
  3. VGI >> ราคาปัจจุบัน 6.50 บาท
  4. SCC >> มีราคาเกิน 100 บาท = 344 บาท
  5. GFPT >> ราคาปัจจุบัน 12.40 บาท
  6. MTC >> ราคาปัจจุบัน 48.75 บาท
  7. AWC >> ราคาปัจจุบัน 3.92 บาท
  8. BEM >> ราคาปัจจุบัน 9.05 บาท
  9. CBG >> มีราคาเกิน 100 บาท = 110.50 บาท
  10. BBL >> มีราคาเกิน 100 บาท = 103.50 บาท
เปรียบเทียบการเปลี่ยนแปลงราคาของหุ้นที่ถูกเลือกมาตั้งแต่ต้นปี (YTD)

จากการทำนายโดย Model ของทางทีม 19
Model ได้เลือกให้ “DOHOME” เป็นอันดับ 1 ที่คาดว่าจะได้ผลกำไรสูงสุดจากการซื้อ/ขาย ที่ ATO

ดังนั้นเราลองมาทำความรู้จักกับ บมจ.ดูโฮม กันเพิ่มเติมก่อนการตัดสินใจเลือกหุ้นเพื่อเก็งกำไรกันดีกว่า

บมจ. ดูโฮม เป็นบริษัท ค้าปลีก ค้าส่ง และให้บริการด้านวัสดุก่อสร้างและอุปกรณ์แต่งบ้านอย่างครบวงจร ปัจจุบันมีสาขาทั้งหมด 10 สาขา ​ToGo 8 สาขา และ ศูนย์กระจายสินค้าอีก 1 แห่ง

ซึ่งจากบทวิเคราะห์ของ บล.หยวนต้า ได้คาดผลประกอบการทั้งปี 63 มีโอกาสพลิกเป็นบวกได้ 1–2% (หลังจากไตรมาส 2/63 เติบโต 0.4% QoQ) โดยยอดขาย เดือน ก.ค. เติบโต 10% ซึ่งส่วนหนึ่งได้รับการตอบรับดีจาก Pent up demand และแรงซื้อที่มาจากงบประมาณภาครัฐทำให้มีงานปรับปรุงซ่อมแซมจากหน่วยงานราชการเพิ่ม

โดยในเดือน ก.ย. คาดการณ์ว่าจะเป็นเดือนที่จะมี Same Store Sale Growth (SSSG) หรือการเติบโตของรายได้ต่อสาขา บวกมากที่สุด เนื่องจากช่วงเดียวกันของปีก่อนมีผลกระทบจากน้ำท่วมทำให้ปิดสาขา โดยเฉพาะสาขาใหญ่ที่จ.อุบลราชธานี โดย บล.หยวนต้า ได้แนะนำให้ ‘ซื้อเก็งกำไร’ โดยมีราคาเหมาะสม 13.70 บาท

กราฟแท่งเทียนของ DOHOME

หากดูจากกราฟแท่งเทียนของ DOHOME พบว่า มีลักษณะเป็นเกือบเป็น Bullish Engulfing ซึ่งถ้าเกิดรูปแบบนี้ในขาลง จะมีโอกาสกลับตัวขึ้นได้ ถ้ากราฟแท่งต่อไป (16/09/63) ปิดเหนือราคา close ของแท่งนี้ ก็เป็นโอกาสในการทำกำไรจากการเปลี่ยน sentiment จากขาลงเป็นขึ้นขาขึ้นในระยะสั้น

อย่างไรก็ดี หากเรามองในมุมมองแบบ Data Scientist เมื่อพิจารณาจาก dataset ก็จะพบว่า รูปแบบของข้อมูลที่จะให้เครื่องได้เรียนรู้นั้นมีไม่มาก และส่วนมากอยู่ในลักษณะของขาขึ้น ทำให้เครื่องเรียนรู้ และจดจำ ในส่วนของ pattern ของขาขึ้นได้มากกว่า

การลงทุนมีความเสี่ยง ผู้ลงทุนควรศึกษาข้อมูลก่อนตัดสินใจลงทุน”

แล้ววันที่ 24 กันยายน หลังเวลา 10.00 น. เรามาดูกัน ว่าใน 10 ตัวนี้ จะมีราคา ATO ต่างจากราคา ATO ของวันที่ 17 กันยายน กันเท่าไหร่ (และจะได้กำไร หรือ ขาดทุน เท่าไหร่ )

Disclaimer: บทความนี้ไม่ได้มีเจตนาชี้ชวนให้ลงทุน เฉพาะหุ้นตัวใดตัวหนึ่ง เป็นเพียงการทดสอบสมมติฐานเชิงวิชาการ ในด้านของการเรียนรู้ของเครื่อง (Machine Learning) เท่านั้น

🧑👩Team members:
1. Chiraphat Boonnag (Ice)
2. Nattapas Phongthananikorn (Boom)
3. Lapadrada Pinyo (Nice)
4. Sittichai Simapanchaporn (Jo)
5. Pasin Junthawadee (Tan)

--

--