Libro

Machine Learning for Algorithmic Trading ฉบับที่ 2: เนื้อหา โค้ด และเหมาะกับใคร

หนังสือของ Stefan Jansen ฉบับที่ 2 ปี 2020 ไล่ตั้งแต่ข้อมูล การสร้าง alpha factor การ backtest ไปจนถึง NLP และ deep learning สำหรับการเทรด บทความนี้สรุปจากโครงสร้างบทใน repository ทางการของผู้เขียนและข้อมูลแคตตาล็อก

ภาพประกอบบทความ: ปกหนังสือ Machine Learning for Algorithmic Trading, 2nd ed. โดย Stefan Jansen

ขอบเขตของบทความ: แนะนำขอบเขตเนื้อหาจากสารบัญและคำอธิบายบทใน README ของ repository ทางการ (branch second-edition) และข้อมูลแคตตาล็อกจาก Open Library ยังไม่ได้อ่านเนื้อหาเต็มเล่มหรือบทใดในหนังสือ

คนที่เขียน Python เป็นและเริ่มสนใจใช้ Machine Learning สร้าง trading signal มักเจอคำถามว่าจะเริ่มจากตรงไหน ข้อมูลมาจากไหน จะสร้าง feature อย่างไร และจะรู้ได้อย่างไรว่าผล backtest ไม่ได้ดีเกินจริง หนังสือที่มีทั้งเนื้อหาและโค้ดครบกระบวนการช่วยให้เห็นภาพรวมได้เร็วขึ้น

บทความนี้ดูว่า Machine Learning for Algorithmic Trading ฉบับที่ 2 แบ่งเนื้อหาอย่างไร โค้ดประกอบมีอะไร และควรรู้อะไรก่อนเลือก

หนังสือเล่มนี้ว่าด้วยอะไร

Machine Learning for Algorithmic Trading ฉบับที่ 2 เขียนโดย Stefan Jansen ตีพิมพ์โดย Packt Publishing เมื่อ 31 กรกฎาคม 2020 ความยาว 820 หน้า ISBN 9781839217715 ตามระเบียนของ Open Library ซึ่งตรงกับ ISBN ในโฟลเดอร์หนังสือ ปกในโฟลเดอร์ระบุ Second Edition ตรงกัน

README ของ repository ฉบับที่ 2 ระบุว่าหนังสือแบ่งเป็นสี่ภาค 23 บทกับภาคผนวก ยาวกว่า 800 หน้า และ repository มี notebook มากกว่า 150 ไฟล์ ผู้เขียนแนะนำให้เปิด notebook ไปพร้อมกับอ่าน เพราะมักรันผลไว้แล้วและมีข้อมูลเพิ่มที่ไม่ได้อยู่ในเล่ม

เนื้อหาครอบคลุมหัวข้ออะไร

ตามโครงสร้างใน README (GitHub):

ภาค

บท

ชื่อบท (ย่อ)

Part 1: From Data to Strategy Development

1–5

ML for Trading จากไอเดียถึงการลงมือ, Market & Fundamental Data, Alternative Data, Financial Feature Engineering (Alpha Factors), Portfolio Optimization and Performance Evaluation

Part 2: Machine Learning for Trading: Fundamentals

6–13

The ML Process, Linear Models, The ML4T Workflow (Backtesting), Time Series Models (Volatility, Statistical Arbitrage), Bayesian ML (Dynamic Sharpe Ratios, Pairs Trading), Random Forests (Long-Short หุ้นญี่ปุ่น), Boosting, Unsupervised Learning (Risk Factors, Asset Allocation)

Part 3: Natural Language Processing for Trading

14–16

Sentiment Analysis, Topic Modeling ข่าวการเงิน, Word Embeddings สำหรับ Earnings Calls และ SEC Filings

Part 4: Deep & Reinforcement Learning

17–22

Deep Learning, CNN (Time Series และภาพดาวเทียม), RNN, Autoencoders (Conditional Risk Factors), GANs (Synthetic Time Series), Deep Reinforcement Learning

ปิดท้าย

23–24

Conclusions and Next Steps, Appendix: Alpha Factor Library

ฉบับที่ 2 เพิ่มอะไร

README ระบุสิ่งที่ฉบับที่ 2 เน้นหรือเพิ่มจากฉบับแรก:

  • กรอบ ML4T workflow มอง ML เป็นส่วนหนึ่งของกระบวนการตั้งแต่หาข้อมูล สร้าง feature ปรับ model ไปจนถึงออกแบบและ backtest กลยุทธ์

  • บทใหม่เรื่อง backtesting (บทที่ 8) ใช้ backtrader และ Zipline พร้อมเทียบ backtest แบบ vectorized กับ event-driven และพูดถึงข้อผิดพลาดที่ทำให้ผลลำเอียง

  • ภาคผนวก alpha factor มากกว่า 100 ตัว

  • ข้อมูลกว้างขึ้น รวมหุ้นต่างประเทศ ETF ข้อมูลรายนาที SEC filings และภาพดาวเทียม

  • ทำซ้ำงานวิจัยสามชิ้น ได้แก่ CNN กับ time series ที่แปลงเป็นภาพ (บทที่ 18) autoencoder asset pricing ของ Gu, Kelly และ Xiu (บทที่ 20) และ TimeGAN (บทที่ 21)

พื้นฐานที่ควรมีก่อนอ่าน

README ไม่ได้ระบุพื้นฐานที่ต้องมีไว้ชัดเจน แต่จากโครงสร้างบทและคำแนะนำการติดตั้ง ผู้อ่านน่าจะต้องเขียน Python และใช้ pandas ได้ และพร้อมจัดการสภาพแวดล้อม conda หรือ Docker เอง README แนะนำให้ติดตั้ง library ทีละบทเพื่อลดปัญหาเวอร์ชันชนกัน และมีหมายเหตุว่าเครื่องมือ backtest ย้ายไปใช้ zipline-reloaded บน conda-forge แล้ว ข้อนี้เป็นการอนุมานของบทความ ไม่ได้มาจากคำแนะนำของผู้เขียนโดยตรง

เหมาะกับใคร และใครควรเริ่มจากเล่มอื่นก่อน

  • เหมาะ กับคนที่เขียน Python เป็นแล้ว และอยากเห็นภาพรวมการใช้ ML กับการเทรดครบตั้งแต่ข้อมูลจนถึง backtest พร้อมโค้ดให้ทดลอง

  • เหมาะ กับคนที่สนใจ alternative data เช่น ข้อความจาก SEC filings และ earnings call เพราะมีทั้งภาค NLP

  • ควรรู้ไว้ ว่าฉบับที่ 2 อ้างซอฟต์แวร์รุ่นปี 2020 เช่น pandas 1.0 และ TensorFlow 2.2 โค้ดบางส่วนอาจต้องปรับกับ library รุ่นใหม่

  • ควรรู้ไว้ ว่า branch หลักของ repository ตอนนี้เป็นฉบับที่ 3 แล้ว ผู้อ่านฉบับที่ 2 ต้องใช้ branch second-edition ซึ่ง README ของ branch หลักบอกว่าคงสภาพไว้

  • คนที่ยังไม่คุ้นกับ ML พื้นฐานอาจหนักเกินไปกับความยาวกว่า 800 หน้า ควรเริ่มจากเล่ม ML ทั่วไปก่อน

ข้อจำกัดของข้อมูลที่ใช้ในบทความนี้

  • ไม่ได้อ่านเนื้อหาในหนังสือ ข้อมูลทั้งหมดมาจาก README ของ repository และระเบียนแคตตาล็อก

  • หน้าหนังสือของ Packt ปฏิเสธการเข้าถึงระหว่างค้นข้อมูล จึงไม่ได้ใช้คำอธิบายของสำนักพิมพ์

  • ไม่ได้รัน notebook ใน repository

  • README ของ branch หลักกล่าวถึงฉบับที่ 3 บทความนี้เขียนถึงฉบับที่ 2 ตามโฟลเดอร์หนังสือเท่านั้น

แหล่งอ้างอิง

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