Efficient Market Hypothesis

นักลงทุนที่เริ่มหันมาสนใจ การวิเคราะห์เชิงปริมาณ หรือ ผู้สนใจใน การเรียนรู้ของเครื่อง มือใหม่หลายๆ (ขอย้ำว่าเฉพาะมือใหม่นะครับ ) คนอาจจะเคยคิดว่า ทางที่ดีเราควรจะเรียนสร้างโมเดลในการทำนาย ให้ทำนายหลักทรัพย์การลงทุนต่างๆ ไม่ว่าจะ หุ้น ค่าเงิน พันธบัตร โดยอาจจะเริ่มจาก Moving Average Crossover ก็คงได้ผลลัพธ์ประมาณนึง (อาจจะ searching กันจนผลทดสอบย้อนหลังอลังการก็ได้?) ไปจนถึงโมเดล Machine Learning ตั้งแต่ขั้นต้นอย่าง Linear, Logistic Regression ผลก็คงจะออกมาระดับหนึง และ ยิ่งเราเพิ่มความซับซ้อนให้โมเดลไปเรื่อยๆ จนไปถึงโครงข่ายประสาทเทียม (Artificial Neural Network) การเรียนรู้เสริมกำลัง (Reforcement Learning) ผลลัพธ์ก็จะดีขึ้นเรื่อยๆ(ใช้โมเดลซับซ้อนมา searching พารามิเตอร์ เพื่อผลลัพธ์ย้อนหลัง) หรือจะโคตร Overfit กับ โมเดลต้นไม้การตัดสินใจ(Decision Tree) จนเราสามารถกำหนดได้ว่าจะซื้อหุ้นตัวไหนเวลาไหน แล้วก็จะรวยแหลกกันไปเลย ซึ่งมันก็มีโอกาสที่จะเป็นไปได้อยู่บ้าง(ละมั้ง?) แต่โอกาสที่มันจะเป็นไปไม่ได้นั้นมีมากกว่ามากๆ มาคิดๆ ดู ถ้าแค่สร้างโมเดลทำนายให้แม่นยำขึ้นเรื่อยๆแล้วก็จบเลย…

Backtest และ Optimization ด้วย Backtesting.py

วันนี้เราจะมาทดลองใช้ Library Backtestในการเขียนแบบจำลองการซื้อขายหุ้นอย่างง่ายกันนะครับ ที่จริงแล้วมันก็เหมือนที่เราเคยเขียนกันเองแบบไม่ใช้ Library ในคอร์ส Python for Finance แต่เมื่อเราเข้าพื้นฐานแล้วมันก็จะสะดวกกว่าที่เราจะทดลองไอเดียของเราแบบเร็วๆ โดยไม่ต้องเขียนทุกอย่างขึ้นมาเองให้เสียเวลา!!!(แต่ถ้าเรามีเวลา ผมคิดว่าเราควรเขียนขึ้นมาเองเพื่อจะความเข้าใจได้คุม environment ได้แบบสมบูรณ์ครับ) จริงๆแล้ว Library ที่ใช้ในการ Backtest มีหลายตัว ตัวที่โด่งดังอย่าง Backtrader, PyAlgotrade, bt, Zipline(อดีตเคยดังแต่ตอนนี้ไม่มีคนดูแลแล้วข้ามได้ก็ข้ามครับ) แต่เราจะขอยกตัวที่เราคิดว่ามีความเรียบง่ายที่สุดมาให้ทดลองใช้กันครับ ซึ่งก็คือ Backtesting.py นี่เอง Backtesting.py นั้นมีความเรียบง่ายมากเหมือนกับเป็นการตัดเอาฟีเจอร์ที่สำคัญของ Backtest ตัวอื่น เช่น Backtrader  ออกมาและทำให้มันมีขนาดเล็กที่สุดมีเฉพาะฟีเจอร์ที่สำคัญจริงๆเท่านั้น แต่ก็ยังทำงานได้ครบถ้วนพอสมควรครับ ติดตั้ง ก่อนอื่นถ้าเรายังไม่มี Backtesting.py ในเครื่อง เราก็ลง Library การเปิด ใน Anaconda prompt และพิมพ์คำสั่ง หรือเปิด Notebook ของเราละใช้คำสั่ง เราสามารถเข้าไปเยี่ยมชมเว็บไซต์ได้ที่ https://kernc.github.io/backtesting.py/ เริ่มโค้ด Import Library ที่ต้องใช้…

ตลาดหุ้นฮ่องกงเทกระจาดในมุมมองของ Value at Risk แบบต่างๆ

เมื่อวานนี้ตลาดหุ้นฮ่องกงเทกระจาดไป 6% ซึ่งเป็นเหตุการณ์ที่เราจะไม่ค่อยได้เห็นกันบ่อยนะ แต่การทำงานของข้อมูลการลงทุนนะครับโดยเฉพาะหุ้นหรือสินทรัพย์อื่นๆเนี่ย  Characteristics ของมันก็มีความ Random อยู่มาก แต่ไอ้การ Random นี้เราสามารถประเมินได้ (ในคอร์ส Python for Finance คงจำได้ว่าเรามีวิธีการประเมินเหตุการณ์แบบนี้อยู่แล้วด้วยสิ่งที่ชื่อว่า Value At Risk)  ซึ่งเป็นวิธีการประเมินความเสี่ยงที่ค่อนข้างจะคลาสสิคนะครับแล้วมันก็จะมีหลักๆอยู่ 2 แบบ  เหตุการณ์ที่ไม่เกิดบ่อยแบบ ทั้งตลาดตกวันเดียว -6% แบบนี้มันจะเป็นเหตุการณ์ที่เกิดด้านปลายของการแจกแจง ฉะนั้นเราจะมาดูข้อดีข้อเสียของ Value At Risk แต่ละแบบกันครับ แบบไหนที่จะประเมินได้สมจริงสมจังกว่าในกรณีที่เกิดปัญหาการแจกแจงเกิดที่ปลายด้านของการแจกแจงแบบนี้ แบบไหนที่มีจุดอ่อนกับการเหตุการณ์แบบตลาดฮ่องกงเมื่อวานโดยเฉพาะ Data ที่ใช้ Data ใช้ เป็นดัชนีฮังเซงตลาดหุ้นฮ่งกงตั้งแต่ปี ถึงปี 2022 วันที่ 24 เดือน 10 ซึ่งก็คือเมื่อวานนี้นะครับ ก็เป็นเวลากว่า35 ปี มีข้อมูลใน observe ทั้งหมด 8844 วัน แบบแรก Non parametric Value…

ประเมินโอกาสชนะพนันด้วย Monte Carlo Simulation

ห่างหายกันไปนานเหมือนกันนะครับสำหรับบทความวันนี้เราจะมาเราจะมาเข้าบ่อนพนันกันบ้างแต่ว่าไม่ใช่บ่อนพนันจริงๆนะครับ มันคือบ่อนพนัน Simulation ของเราเองนะครับเพื่อการศึกษาเท่านั้น โดยเราจะใช้เทคนิค Monte Carlo Simulation ซึ่งเป็นหลักการทางคณิตศาสตร์ Stochastic process เพื่อมาช่วยเราประเมินโอกาสการชนะหรือโอกาสการแพ้จากการเดิมพันในบ่อนคาสิโนกัน โดยเรามาประเมินโอกาสชนะจากการทอยเต๋า, โอกาสถูกรางวัลที่ 1 ซึ่งเราจะเห็นความเชื่อมโยงระหว่างโลกการพนันกับโลกไฟแนนซ์ เราจะเห็น characteristics การสุ่มของมันที่โลกไฟแนนซ์มีมากกว่านี้เยอะ ทำให้เรารู้ว่าทำไม “การ backtest ด้วย indicator เทพ ซักตัวแล้วได้ผลดีมากๆๆ อาจะเป็นแค่เรื่องไร้สาระจากมุมมอง Stochastic ก็ได้” โดยมีวีดีโอการทำโปรเจ็คเล็กๆตัวนี้อยู่ในคอร์สฟรี Python programming ของเรา(กำลังอยู่ในขั้นตอนอัพเดตอยู่ครับ) Stochastic process vs Deterministic  process Monte Carlo Simulation ก็เป็น stochastic process ตัวหนึง คำว่า “stochastic” ถ้าเราไปดูใน google เราจะเห็นว่า stochastic   แปลว่า “สุ่ม” ต่างกับด้านตรงข้ามของมันคือ…

อยากลงทุน แต่ไม่รู้จะเอาข้อมูลจากไหน? มาทางครับ “ชี้เป้า Python API แหล่งรวมข้อมูลการลงทุนที่น่าสนใจ”

เราจะเอาข้อมูลหุ้นข้อมูลการลงทุนจากไหนดีครับ? คำถามนับว่าเป็นคำถามที่ได้รับหลังไมค์บ่อยต้นๆ เลยคิดว่าควรจะรวบรวม Python Library ดึงข้อมูลมารวมๆกันไว้ที่เดียวกันพร้อมข้อดีข้อเสียของแต่ละที่ครับ 1.Yfinance (Yahoo Finance) source: https://github.com/ranaroussi/yfinance ตัวนี้น่าจะโด่งดังที่สุดตัวนึง เค้าแจกข้อมูลอะไรบ้าง? ง่ายๆ ก็คือ แจกที่ Yahoo Finance แจกนั่นแหละครับ เช่น ราคาหุ้นย้อนหลัง คริปโต งบการเงิน ข้อมูลบริษัท ทุกอย่างที่ Yahoo เค้าปล่อยให้เราเข้าถึงได้ฟรีเลย แต่ถึงอย่างไรก็ตาม แม้จะชื่อ Yfinance แต่นี่ไม่ใช่ของ Yahoo เองนะครับ แต่เป็น Open Source Tool ที่ช่วยเราดึงข้อมูลจาก Yahoo Finance เท่านั้นเอง ฉะนั้นถ้าเกิดเหตุการณ์ Yahoo อัพเดตเปลี่ยนแปลงอะไร ก็อาจจะต้องใช้เวลาอยู่บ้างกว่าที่ Lib ตัวนี้จะถูกแก้ไขกลับมาใช้งานได้ และก็ข้อมูลจะมี Delay อยู่นะครับ แต่ก็ฟรีอะนะ ก็ต้องอดทนกันซักเล็กน้อย 2. Pandas-datareader source:…

Update Course 2021

หลังจากห่างหายกันไปนาน จากคอร์สแรกในปี 2019 ในที่สุดพวกเราก็หมดภาระทางวิชาการเสียที พอกลับมามีเวลามองดูคอร์สเก่าของเราแล้ว ผมก็พบว่ามันผ่านมาสองปีแล้ว ข้อมูลหลายอย่างก็เก่าไปบ้าง ผมจึงตัดสินใจทำคอร์สนี้ขึ้นมาใหม่ให้ทุกคนได้เข้าไปดูกันได้ที่ https://algoaddict.com/p/python-for-finance ผมจะมีการปรับโครงของคอร์สให้มีเนื้อหาเชื่อมโยงกัน ปรับปรุงโค้ดให้เหมาะสมยิ่งขึ้นไม่ว่าจะเพิ่มประสิทธิภาพให้โค้ด วิธีการเรียกใช้งานฟังก์ชั่น หรือ สไตล์ชื่อตัวแปรเล็กๆน้อยๆ สิ่งที่ยังเหมือนเดิมคือ คอร์สนี้คือ คอร์ส “Python for Finance” ไม่ใช่ “Algorithmic Trading” เราจะไม่ได้เน้นหนักทางการสร้างโมเดลเพื่อการลงทุนที่กำไรมาก ๆ ไม่มีการบอก “Magic Formula” ที่ทำให้รวยได้ แต่อย่างใด algoaddict 2019 คอร์สสำหรับการอัพเดตครั้งแรก ณ ปี 2021 นี้ จะแบ่งออกเป็น 9 session หลักๆ ประกอบด้วยวีดีโอ 129 วีดีโอ ความยาวเกือบๆ 15 ชั่วโมง ไม่นับที่ผมยังค้างทุกคนอยู่ไม่ได้อัพเดตของเก่าและของใหม่ที่ผมจะอัพเดตมาในอนาคต และไม่ได้นับ คือ machine learning, beta, alpha และอย่างอื่นที่ยังไม่ได้เพิ่มเข้ามาในตอนนี้…

Modern Portfolio Theory — หนึ่งในนวตกรรมเปลี่ยนโลกการลงทุน

(อันนี้เป็นบทความเก่าที่ผมลืมย้ายมาลงบล็อคใหม่นะครับ) ในปี 1956 อาจารย์ Harry Markowitz(รูปบน) ได้นำเสนอเปเปอร์สำคัญทางด้านการลงทุน ว่าด้วยการจัดสรรพอร์ตการลงทุนด้วยสมการ Modern Portfolio Theory หรือเรียกอีกชื่อว่าMarkowitz Portfolio Theory(MPT) ซึ่งมี Impact อย่างสูงและได้เปลี่ยนโลกการเงินไปตลอดกาล จากการวิเคราะห์การลงทุนแบบรายตัวมาเป็นวิเคราะห์การลงทุนแบบ Portfolio สมัยใหม่ เดี๋ยวเรามาดูกันอย่างกันครับว่า MPT มีไว้ทำอะไร และ สำคัญอย่างไร เพื่อความเข้าใจง่ายผมจะทำให้มีสมการน้อยเท่าที่จำเป็นนะครับ การเข้ามาของ MPT ถือว่าเป็นการเปลี่ยนแปลงมุมมองต่อ Portfolio ให้เป็นวิชาการขึ้น จำคำที่ว่า “Don’t put all your eggs in one basket” มันได้มีการกล่าวถึงกันมานานแล้วก็จริงแต่งานนี้จะก้าวไปอีกสเตป เป็นการพิสูจน์มันทางคณิตศาสตร์ และ พรูพให้เราเห็นไปเลยว่าทำไม เพราะอะไรถึงต้องมี MPT? จากรูปเรามี Asset 2 ตัว ที่กำไรและความเสี่ยต่างกัน ตัวที่กำไรมากกว่าก็จะมีความเสี่ยงมากกว่าตัวที่กำไรน้อยกว่า ดังคำกล่าว High Risk…

การรู้จำรูปแบบสำหรับข้อมูลแบบตามลำดับเวลาด้วย Hidden Markov Model (Pattern Recognition with Sequential Data using HMM)

การค้นพบ “รูปแบบ” หรือ “Patterns” ที่ซ่อนอยู่ภายในข้อมูล เป็นอีกสาขาวิชาที่น่าสนใจ และ มีความท้าทายเป็นอย่างมาก เนื่องจากในปัจจุบันนี้ที่เรากำลังใช้ชีวิตอยู่ในโลกของข้อมูล ซึ่งเรากำลังพูดถึงข้อมูลจำนวนมหาศาล (ต้องขอคุณเทคโนโลยีในการเก็บข้อมูลที่ก้าวล้ำอย่างรวดเร็วไว้ ณ ที่นี้ด้วย!) ข้อมูลถูกเก็บบันทึก แทบจะทุกที่ทุกเวลา ไม่มีใครสามารถวิ่งหนีกระบวนการนี้ได้เลย “Data” หรือ “ข้อมูล” ถือเป็นสิ่งที่มีคุณค่ามหาศาล การมีข้อมูล ถูกเรื่อง ถูกเวลา นั้น ถึงขนาดเปลี่ยนยาจกเป็นเศรษฐี เปลี่ยนขาวเป็นดำ ได้เลยทีเดียว! แต่ถึงอย่างนั้นก็ตาม “ข้อมูล” นี้ จะกลายเป็นแค่ “ขยะไซเบอร์” ทันที ถ้ามันไม่ได้ถูกนำมาใช้งานอย่างถูกต้อง จุดนี้นี่เองที่ทำให้การศึกษาในสาขา “Pattern Recognition” หรือ การระบุรูปแบบที่ซ่อนอยู่ภายในข้อมูล ได้รับความสนใจเป็นอย่างมาก เพราะสามารถขุดค้นเอา “ความรู้” ที่ซ่อนอยู่ในข้อมูล เพื่อนำไปสู่การใช้งานอย่างเหมาะสมได้ “Pattern Recognition” มีด้วยกันมากมายหลากหลายรูปแบบมาก ขึ้นอยู่กับลักษณะการใช้งาน ระบบ Pattern Recognition ยกตัวอย่างระบบที่เราคุ้นเคยกัน เช่น ระบบรู้จำใบหน้า (Face…

Ray Dalio’s woring style

พาไปดูวัฒนธรรมการทำงานใน Bridgewater Associates inverstment firm ที่ใหญ่ที่สุดของโลก ที่บริหารโดยนักลงทุนชื่อดังอย่างคุณ Ray Dalio กัน สวัสดีค่ะ โพสนี้ออกตัวก่อนว่าไม่เกี่ยวกับการลงทุนนะคะ แต่แอดผ่านไปเจอมา แล้วคิดว่า น่าสนใจดี เลยหยิบมาฝากกันค่ะ เป็นการสัมภาษณ์คุณ Ray Dalio แค่ 5 นาทีเท่านั้น จากที่ไม่เคยคิดจะอ่านหนังสือ Principles เพราะ หนังสือเล่มโตมากกก คิดว่าคงอ่านไม่จบ 555 รู้สึกอยากลองอ่านดูเลยค่ะ อยากรู้ว่าเค้าคิดอะไร ทำอะไร รู้สึกว่าเป็นบุคคลที่มีความคิด และ หลักการทำงานที่น่าสนใจมากๆ อีกท่านนึง Idea mertocacy เป็นการสัมภาษณ์เกี่ยวกับการทำงานในองค์กร แบบ Idea mertocacy หรือ แนวคิดเชิงความสามารถนิยม ซึ่งคุณ Dalio ให้ความเห็นว่าในการทำให้องค์กรมีทิศทางไปในทางนี้ได้ เกิดจาก 2 สิ่งคือ Radical Truthfulness กับ Radical Transparency ซึ่งก็คือ…

[Reinforcement Learning 101] ตะลุยคาสิโนด้วย RL: Muti-Armed Bandit (2)- UCB1

จากบทความที่แล้ว เราได้พาไปดูการกำหนดปัญหา การไปเล่น Slot machine ที่คาสิโนของเราและได้หาวิธีการประเมินโอกาสชนะของเครื่อง Slot machine ด้วยวิธีการ Epsilon greedy มาแล้วและได้เปรียบเทียบผลลัพธ์ดู นับว่าทำงานได้ดีประมาณหนึง เอาเข้าจริงๆวิธีการนั้นก็ไม่ได้เป็นอะไรมากไปกว่าการคำนวณ mean ของแต่ละเครื่องผ่านการเล่น Slot machine แต่ละรอบๆเสริมด้วยวิธีการสุ่มเล่นเครื่อง Slot machine บ้างเป็นครั้งคราวเท่านั้นเอง วันนี้เราจะมาดูสมการคณิตศาสตร์ที่ซับซ้อนขึ้นมาอีกนิดหนึง(นิดเดียว) UCB1 ตัวนี้ก็ใช้ในการประเมิน mean ตัวหนึงทำหน้าที่เหมือน Epsilon greedy แต่วิธีการทำนั้นต่างกัน เนื่องจากเราจะแก้ปัญหาเดิม ก่อนอื่นผมขอนำ โอกาสในการชนะของ Slot machine มาแปะกันอีกครั้งนะครับ ​เครื่องที่ 1 มี win rate 10% ต่อการเล่นแต่ละครั้ง เครื่องที่ 2 มี win rate 20% ต่อการเล่นแต่ละครั้ง เครื่องที่ 3 มี win rate 50%…

ตัวอย่างการใช้ ARIMA ในการทำนายค่า GDP ของประเทศไทย พร้อม source code (2)

ทความนี้เราจะมาว่ากันต่อในเรื่องของการทำนายข้อมูล Time Series ด้วย ARIMA กันค่ะ โดยบทความนี้เป็นบทความที่ 3 ของบทความชุด “ARIMA เท่าที่เข้าใจ” ซึ่งได้เขียนไปแล้ว 2 ตอนด้วยกัน สามารถอ่านได้ตามลิงก์ด้านล่าง เมื่ออ่านครบทั้ง 3 บทความนี้ ก็น่าจะสามารถนำ ARIMA ไปประยุกต์ใช้ในการทำนายข้อมูลประเภทต่างๆ ได้อย่างไม่ยากแล้วค่ะ บทความชุด “ARIMA เท่าที่เข้าใจ” 1) ARIMA เท่าที่เข้าใจ อธิบายการทำงานของ ARIMA model จากประสบการณ์ใช้งานของเรา link 2) ตัวอย่างการใช้ ARIMA ในการทำนายค่า GDP ของประเทศไทย พร้อม source code ตอนที่ 1 link ต่อกันเลยนะคะ หลังจากบทความที่แล้ว เราได้เตรียมข้อมูลที่เป็น “Stationary” ไว้เรียบร้อย พร้อมสำหรับ “การทำนาย” แล้ว ในบทความนี้ เราจะนำเอาข้อมูลนั้นมาเริ่มทำการทำนาย…

ตัวอย่างการใช้ ARIMA ในการทำนายค่า GDP ของประเทศไทย พร้อม source code (1)

จากบทความที่แล้ว ตามลิงก์ด้านล่าง link เราได้พูดถึง Basic of ARIMA เอาไว้ ซึ่งถึงแม้ว่าตัวโมเดลจะไม่ได้ถูกออกแบบมาโดยเฉพาะสำหรับการทำนายมากนัก แต่ก็เป็นโมเดล Time-series ที่สามารถนำมาประยุกต์ใช้ในการทำนายข้อมูลได้ ดังนั้น วันนี้เราจึงได้นำตัวอย่างการประยุกต์ใช้ ARIMA พื้นฐานในการทำนายอย่างง่ายมาให้ดูกัน โดยตัวอย่างนี้ใช้ จะเป็นข้อมูล GDP ของประเทศไทย ดังนี้ Data: GDP of Thailand during (1960 – 2017) File name: GDP_Thailand.csv 1) มาดูข้อมูลดิบกันก่อน ก่อนอื่นมาโหลดข้อมูล และ เนื่องจากข้อมูลของเราเรียงจากปีปัจจุบันไปยังอดีต แต่เพื่อให้ง่ายต่อความเข้าใจ จากนั้น เราจะได้พล็อตดูแนวโน้มข้อมูลกันต่อไป 1.1) Import libraries ที่จำเป็น import pandas as pdimport matplotlib.pyplot as pltimport numpy as np 1.2) อ่านข้อมูล และ ตั้งชื่อ คอลัมน์ว่า…