
หลังจากห่างหายกันไปนาน จากคอร์สแรกในปี 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 และอย่างอื่นที่ยังไม่ได้เพิ่มเข้ามาในตอนนี้ อนึ่งพื้นฐานภาษา python (ส่วนนี้เราแยกเป็นคอร์สฟรีให้ทุกคนเข้าไปเรียนได้อยู่แล้ว แต่อนาคตผมอาจจะอัพเดตต่างหากไว้ในนี้ด้วยนะครับ)
ทั้ง 10 session ประกอบไปด้วยData Management
- Data Management
- Data Source
- Basic Statistics
- Value at Risk
- Time Series
- Peformance Metric
- Backtest – vectorization
- More Backtest – non-vectorization
- Porftfolio Allocation
- Monte Carlo
- Data Management
ส่วนแรก จะเป็นเรื่องของการจัดการข้อมูลด้วย library pandas ประกอบไปด้วย
- การดึงข้อมูลจาก csv
- ดูข้อมูลเบื้องต้น และการดูสรุปข้อมูลด้วยสถิติ
- วิธีการเข้าถึงข้อมูลใน dataframe
- วิธีการเลือกข้อมูลตามช่วงเวลา และ การใช้ loc – iloc และความแตกต่างของมัน
- การ resample, การเปลี่ยน timeframe ของข้อมูลหุ้น เพื่ออธิบาย insight ข้อมูล
- การทำ lagging ข้อมูล
- การสร้างฟีเจอร์ moving average อย่างง่าย
- การแสดงผลข้อมูลแบบ subplot เช่นการจัดวาง subplot
- จบท้ายด้วยการ plot candlestick ด้วย mplfinance และสร้าง candlestick ตามสไตล์ของผู้ให้บริการเจ้าต่างๆเช่น yahoo, binance
- สร้าง support-resistant line

2. Data Source
(ใหม่)การดึงข้อมูลจากผู้ให้บริการ Yahoo Finance ประกอบไปด้วย
- ดึงข้อมูลหุ้นจาก yahoo finnance ดึงมาทั้งราคาและอื่นๆ
- ดู financial statement, cashflow etc.
- ดู recommendation ของหุ้นนั้นๆว่าเค้าแนะนำอย่างไร ให้ซื้อ ให้ขาย?
- ดึงข้อมูลเฉพาะราคา
- ดึงข้อมูลหุ้นหลายๆตัวในครั้งเดียว
- ดึงข้อมูลหุ้นในกลุ่ม dow jones industrial average ด้วยการดึงข้อมูลผ่านการ read table
- ดึงข้อมูลหุ้นในกลุ่ม set 100 ด้วยการดึงข้อมูลผ่านการ read table

รู้จักกับ quandl ประกอบไปด้วย
- รู้จักการ quandl และการใช้ api key
- ดึงข้อมูลอื่นๆจาก quandl

siamchart ในส่วนนี้เราจะเขียนโปรแกรมเพื่ออ่านข้อมูลจากเวปไซด์ siamchart
- โหลดข้อมูลจาก siamchart
- โหลดข้อมูลทั้งหมดจาก siamchart ใส่ dataframe เดียว
- การเขียน function เพื่อสกัดหุ้นรายตัวออกมาจากข้อมูลจาก siamchart
- การ import และ export เพื่อใช้ในอนาคต
- เก็บฟังก์ชั่นของเราไว้เป็น utility file เพื่อสะดวกในการใช้งานต่อไป

สุดท้ายเราจะมาจัดการกับข้อมูลที่ไม่สมบูรณ์กันครับ
- การ cleaning data ถ้าข้อมูลหุ้นมีความผิดพลาดเราจะจัดการอย่างไร ถ้าข้อมูลหุ้นในพอร์ตเริ่มเทรดไม่ตรงกันจะจัดการอย่างไร
- normalization เพื่อการเปรียบเทียบหุ้นที่ราคาต่างกันในสเกลเดียวกัน

3. Basic Statistics
สิ่งที่ขาดไม่ได้จริงๆ ถ้าเราจะสนใจ finance อย่างจริงจังคือ คณิตศาสตร์ครับ และสถิติก็สำคัญมาก ในส่วนนี้เราจะมาเรียนสถิติที่ผมคิดว่าจำเป็นต่อความเข้าใจของเราในการทำงานกับข้อมูลหลักทรัพย์ครับ
เริ่มด้วย return มี return กี่แบบและแบบไหนเอาไว้ใช้งานกับอะไร
- simeple return กับ log return คืออะไร และอะไรคือคุณสมบัติที่แตกต่างกันระหว่าง simple and log return
- ทำไมเราควรใช้ log return มากกว่า simple return เวลาทำงานที่ต้องผ่านช่วงเวลาต่างๆกันเช่น การ backtest แบบหนึง และทำไม backtest บางแบบสามารถใช้ simple return ได้

จากนั้นมาดูข้อมูลด้วยสถิติพื้นฐาน distribution
- อะไรคือ normal distribution และทดลองสร้างข้อมูลตาม distribution นั้น
- เปรียบเทียบกับกับข้อมูลจริง real data ว่าเหมือนหรือต่างกันอย่างไร
- เข้าใจ Basic statistic เช่น mean, median และ การตีความสองค่าสำหรับข้อมูลหุ้น

ต่อมาเรามาดูความแปรปรวน และที่มาของความเสี่ยงในการลงทุน
- ความแปรปรวน variance คืออะไร มาทำความเข้าใจและเขียนโปรแกรมสร้างมันทั้งแบบยากทำเอง แบบง่ายใช้ฟังก์ชั่นทำ
- รู้จักกับส่วนเบี่ยงเบนมาตราฐาน หรือ standard deviation ทำความเข้าใจความสัมพันธ์ระหว่างมันและ variance จากนั้นมาสร้างมันเองจนเกิดความเข้าใจ และมาใช้ฟังก์ชั่นสำเร็จรูปทำ

(ใหม่)ส่วนที่ 4 เป็นโปรเจ็คเล็กๆ หลังจากเรียนสถิติมาระยะหนึงแล้ว ก็จะมาลองทำโปรเจ็คหา outlier กันครับ
- (ใหม่)สร้างฟังก์ชั่นหา outlier จากค่า z-score โดยใช้ความรู้จากบทที่ผ่านมา ทั้ง return และ standard deviation
- (ใหม่)ทดลองใช้ฟังก์ชั่นกับดาต้าจริง

ต่อมาเรามาดูว่าด้วยเรื่องความสัมพันธ์ของข้อมูล ถ้าจะยกตัวอย่างง่ายๆก็คือ ตอบคำถามว่าหุ้นสองตัวนี้มันขึ้นลงตามกันมาน้อยแค่ไหน ซึ่งต่อไปเราจะนำไปใช้กับหลายๆอย่างมากฉะนั้นเราจะมาทำความเข้าใจกันครับ
- หาว่าสิ่งของสองสิ่งมีความสัมพันธ์กันแบบไหนด้วย co-variance ทั้งทำเองและใช้ฟังก์ชั่นเหมือนเดิม เพื่อความเข้าใจ
- ทำให้ co-variance ที่ได้ มีมาตราฐานในการตีความ ทั้งเขียนเองและฟังก์ชั่นเช่นเดิม
- มาดู correlation กับดาต้าจริงกันครับ
- (ใหม่)ดู Autocorrelation ความสัมพันธ์ของหุ้นตัวนึงกับตัวมันเองบ้างครับ งงไหมครับ แต่มันคือดูกับตัวเองที่เป็น lagging ข้อมูลนั่งเอง

เรียนมาพอสมควรแล้ว เราจะมาดูการแจกแจงแบบ fat tail ด้วย violion และ qq plot กันครับ
- รู้จักกับ qq plot และ violin plot
- เปรียบเทียบข้อมูลจริง และข้อมูลตามทฤษฎีว่าแตกต่างกันอย่างไร

4. Value at Risk
หลังจากเรียนสถิติกันไปแล้ว เรามีความเข้าใจมากพอที่จะไปประเมินความเสี่ยงของการลงทุนกันต่อแล้วครับ และการประเมินนั้นก็ไม่ได้ใช้อะไรมากไปกว่าที่เรียนมาใน session ที่ 2
- Value at Risk 2 แบบแตกต่างกันอย่างไร
- เรียนรู้การประเมินความเสี่ยง Value at Risk แบบ non-parametric ที่ไม่ต้องใช้พารามิเตอร์ใช้แค่ข้อมูลดิบมาประเมิณความเสี่ยง โค้ดกันเองทั้งหมดครับ
- การประเมิณความเสี่ยง Value at Risk แบบ แบบ parametric ที่ใช้พารามิเตอร์มาประเมินความเสี่ยง โดยการสร้าง distribution ที่พยายามก็อปปี้ดาต้าจริงขึ้นมาและใช้มันในการประเมินความเสี่ยง
- (ใหม่) เพิ่มเติมการประเมินความเสี่ยงแบบ non-parametric ด้วยการเขียน conditional Value at Risk
- (ใหม่) เพิ่มเติมการประเมินความเสี่ยงแบบ parametric ด้วยการเขียน cornish-fisher เพื่อสร้าง distribution ที่ไม่จำเป็นต้องดื้อแพ่งใช้ normal distribution ถ้าข้อมูลมันไม่เป็น normal(eq fat tailed เป็นต้น) อันนี้สมการเยอะนิดหนึงแต่เราจะมาทำความเข้าใจกันครับ

5. (ใหม่)Time Series
ส่วนนี้จะเป็นส่วนเพิ่มเติมมาใหม่ทั้งหมดครับ เราจะว่ากันด้วย ทฤษฎี time series และใช้ โมเดลของมันมาพยายามโมเดลข้อมูลการลงทุนและทำนายอนาคตกันครับ
- ดูองค์ประกอบของ time series ด้วยการแกะมันออกมา decompose ออกเป็นองค์ประกอบต่างๆเพื่อทำความเข้าใจ ดูทั้งแบบ linear และ non-linear
เริ่มมาทำนายกันครับ
- exponentially weighted moving average (ewma) ก้าวแรกของการพยายามสร้างโมเดลในการอธิบายดาต้าทองคำและ ทำนายมันกันครับ
- หลังจากดูโมเดลพื้นๆไปแล้ว เรามาลองเพิ่มราละเอียดด้วยการโมเดล holt และ holt-winter แล้วลองมาทำนายราคาทองคำครับ ดูว่ามันต่างกันยังไง และมันดีพอจะให้เราเอาไปใช้หรือไม่
คั่นเบรกด้วยการกลับมาดูข้อมูล
- ดูว่าข้อมูลของเรานั้นเป็น stationarity หรือไม่ ด้วยการเทส augmented dickey–fuller test จากนั้นเขียน function on top ของ adf อีกทีหนึงเพื่อการแปลผลที่ดีขึ้น
- ถ้าดาต้าไม่เป็น stationarity เราต้องทำอย่างไรให้มันเป็น
- ดู partial autocorrelation (pacf) ดูความสัมพันธ์ของข้อมูลทองคำเรากับตัวมันเองแบบแยกส่วน ผมจะอธิบายหลักการทางคณิตศาสตร์กันครับว่าต่างกันยังไงและตีความมันกันครับ
ส่วนสุดท้ายเราจะมาใช้โมเดลที่ชื่อดังตัวหนึงครับ AutoRegressive Integrated Moving Average (ARIMA) มารู้จักมันกันครับ
- มารู้จัก ARIMA กันครับ ว่าโมเดลนี้มีใช้หลักการอะไรในการโมเดลราคาทองคำของเรากันบ้างครับ และเรามาดูกันด้วยว่าตัวแปร p d q ของARIMA หมายถึงอะไร และใส่แบบไหน โมเดลจะกลายเป็นAutoRegressive Moving Average (ARMA)
- เรามาเลือก p d q ว่าเลือกกันยังไง และ ค่าไหนที่บอกว่ามันดี ไม่ดีกันครับ
- โมเดลทองคำด้วย ARIMA และทำนายมันกันครับ
- รู้จักกับ Auto ARIMA เพื่อการทำนายราคาแบบไม่ต้องสนใจเรื่องการเลือกตัวแปรมากนักกันครับ
- ลองใช้ SARIMAX กันครับ

6. Peformance Metric
เราจะมาพูดกันเรื่องการวัดผลกันครับว่าผลจากการ simulation ของเรามันดีหรือไม่ดียังไง
- ก่อนจะมาวัดผลเรามามาสร้าง strategy ในการเทรดกันก่อนครับโดยเราจะ backtest แบบ trend following กันครับ แบบ sma crossover กันครับ โดยเราจะทำกันเป็น step 5 step และเราจะทำมันแบบ vectorization ครับ เราจะเปรียบเทียบความเร็วกันว่ามันเร็วกว่าแบบ for loop แค่ไหนอย่างไร
จากนั้นผลที่ได้ เราก็จะไม่สามารถตอบได้ว่ามันดีหรือแย่อย่างไรเราเลยจะมาเข้าเรื่องการวัดผลกันครับ
- มารู้จัก drawdown กันครับ และมาโค้ดมันเองตั้งแต่เริ่มต้นกันเลยครับ และหา maximum drawdown เพื่อวัดผลความเสี่ยง
- วัดความเสี่ยงด้วย volatility รู้จัก daily volatility และทำมันเป็น yearly volatility
- วัดความเสี่ยงเทียบกับกำไรด้วย sharpe ratio และมาโค้ดดิ้งมันกันครับ และดูรายละเอียดเล็กๆน้อยอย่างประเภท return ที่จะนำมาใช้ด้วยครับ
- Compound annual growth rate (CAGR) รู้จักและคำนวณเรตผลกำไรต่อปีกันครับ
- วัดผลความแม่นยำของสัญญารด้วย hit rate กันครับ
- สุดท้ายนี้เรานำทุกอย่างที่เขียนมาสร้างเป็น fuction ในการวัดผลการลงทุนที่ทำไว้ตอนแรกของ session นี้กันครับ
- ใช้ pyfolio มาวัดผลของเรา และเปรียบเทียบกับผลลัพธ์ของเราว่าต่างกันอย่างไร ถ้าต่างเพราะอะไร มาดูเหตุผลของ industry กันครับ

7. Backtest
หลังจากเขียนวัดผลไปแล้วเรากลับมาทำ backtest กันต่อครับ
- เรานำ trend following ที่เขียนไว้มา optimization เพื่อหาค่าที่ดีที่สุด หรือค่าที่ให้ return sharpe ratio ทีเราต้องการกันครับ
- แต่ optimization อย่างเดียวมันไม่ได้ครับ เราต้องนำข้อมูลมาแยกเป็น insample และ out of sample ครับ เราจะ optimization บน insample และ เทสมันบน sample
- เขียน mean reversal แบบใช้ฟีเจอร์ basic ที่สุดกันครับ มาเรียนกันว่า mean reversal จริงๆแล้วมันมีสมมุติฐานแบบไหน จากนั้นก็วัดผลครับ
- optimization mean reversal ปิดท้ายกันครับ

8. (ใหม่)More Backtest – non-vectorization
เราจะมาเขียน backtest แบบช้ากันบ้างครับ อย่างที่บอกมันช้า ถ้าช้าแล้วเราเขียนทำไม มันก็ต้องมีประโยชน์อะไรเพิ่มขึ้นมาครับ เช่น การเจอเหตุการณ์แบบ point by point คล้ายๆ event based backtest กันครับ แต่เราจะทำมันแบบไม่ได้สร้าง OOP นะครับ ใช้เป็น function ธรรมดาไม่ใช่class
- สร้าง backtest แบบเรียบง่ายที่สุดกันครับ โค้ดอาจจะเยอะกว่าแบบ vectorization เยอะ แต่เราจะทำเพื่อเป็นพื้นฐานมนการเพิ่มรายละเอียดต่อๆไปครับ
- ใส่ stoploss ให้กับการลงทุนของเรากัน
- ทำโค้ดวุ่นวายของเราให้สั้นลงกำจัดการทำงานซ้ำซ้อนให้เป็น fucntion
- จัดการราคาเข้าเปิด-ปิดสัญญาซื้อ เข้าเปิด-ปิดสัญญาขาย ให้มันสมจริงกันครับ
- เก็บ log ของการเปิดสัญญาเทรดแต่ละครั้งไว้วิเคราะห์ต่อไป
- อันนี้เป็นเรื่องทาง assumption ทางคณิตศาสตร์ที่มันต่างกับ vectorization กันครับ และเราจะแก้ให้มันตรงเป๊ะกับ assumption ได้อย่างไร


9. Portfolio Allocation
เราพูดถึงการลงทุนกันไปหลาย session แล้วแต่เรายังไม่พูดถึง การลงทุนแบบเป็น portfolio เลย โดยผมจะมารู้จักกับการคิดกำไรขาดทุนแบบเป็น portfolio จากนั้นมาคิดความเสี่ยงของ portfolio และจะไปปิดท้ายที่ Modern portfolio theory(MPT) เราจะตอบคำถามสำคัญข้อหนึงคือเป็นไปได้ไหมที่เราจะคาดหวังกำไรเพิ่มขึ้นโดยที่เราจะไม่ต้องเสี่ยงเพิ่มขึ้นไปด้วย เราจะไม่เอา higher risk higher return เราจะเอา higher return แต่ lower risk ได้ไหมใน session นี้ผมทำใหม่ทั้งหมดนะครับ มีการปรับโค้ดให้มันมีประสิทธิพาขึ้น เพิ่มโค้ดเพื่อสร้างความเข้าใจกับโลกการลงทุนมากขึ้นครับ
- คำนวณ portfolio return อันนี้ง่ายครับ
- คำนวณ portfolio variance อันนี้วุ่นวายขึ้นเยอะครับแต่ไม่เป็นไร ผมได้เพิ่มคำอธิบายมากขึ้น ทั้งทางคณิตศาสตร์และโค้ดครับ และเรามาดูว่าตัวแปรไหนที่จะเพิ่มหรือลดความเสี่ยวของ portfolio ได้บ้าง

- ดูผลกระทบของ correlation ในการสร้าง portfolio กันแบบ manual
- (ใหม่)สร้างความเข้าใจกับความสัมพันธ์ที่ว่า ด้วยการเลือกฟอร์มหนึงของการคิด portfolio variance มาสร้างเป็นฟังก์ชั่นเพื่อใช้ดูผลกระทบของ correlation กันครับ โดยฟังก์ชั่นนี้จะถูกนำมาใช้ทั้งดาต้าจริงแต่ดาต้าสมมุติครับ

- (ใหม่)เราเริ่มสร้าง Modern portfolio theory เพื่อประเมินการลงทุนเพื่อ optimization การลงทุน พยายามหา portfolio ที่เพิ่มกำไรโดยไม่เพิ่มความเสี่ยงได้ไหม โดยเราจะเลือกหุ้นมาแบบไม่ได้มีหลักการมากนัก
- (ใหม่)รู้จักกับ Efficient frontier เส่นการลงทุนที่มีประสิธิภาพที่สุด และเขียนมันในโค้ดกันครับ
- (ใหม่)มาดึง weights ของหุ้นต่างๆใน portfolio เรากันครับ ว่าเราจะลงทุนใน porfolio แบบไหน ได้กำไรมากสุด? sharpe ratio สูงสุด หรือความเสี่ยงต่ำสุด หรือจะเอาเป็น sharpe ratio สูงสุด 10 ตัวแรก เป็นต้น
- (ใหม่)เข้าใจกับ magnitude จากการหุ้นมนพอร์ตมีผลกับ shape ของการแจกแจงใน MPT อย่างไร
- (ใหม่)ลองสร้าง Modern portfolio theory ที่เลือกมาด้วย correlation และดูว่าเราลดความเสี่ยงจากตัวแรกได้ไหม

10. Monte Carlo
ราคาหุ้นหรือหลักทรัพย์ที่เราเห็นๆกันอยู่เนี่ย มันเป็นเพียงความเป็นไปได้แค่ 1 แบบ จากความน่าจะเป็นนับล้านๆแบบ ถ้าเราเชื่อ random walk theory แปลว่าอนาคตไม่มีทางแน่นอน เราต้องอาศัยการประเมินการลงทุนที่พยายามโปรเจ็คหาอนาคตให้มากที่สุดเท่าที่เราจะทำได้ แต่เราจะไม่เดาอย่างเดียว เราจะใช้ความรู้ในอดีตผสมกระบวนการ random ด้วย
- ทำความเข้าใจ monte carlo กับ การทำ stock simulation มาดูว่าเราจะใช้ความรู้ในอดีตมาประเมินอนาคตที่ดำเนินรอยตาม random walk theory ได้อย่างไรทำไมมันจึงสมเหตุสมผล ทั้งคณิตศาสตร์และโค้ด
- monte carlo อาจจะเกิด bias ได้อย่างไร ้เราจะมาเรียนกันแบบ สมการ ต่อ สมการ กันเลยครับ
- การใช้ VaR มาประเมินค่าที่ได้จาก monte carlo
