คลิปที่ 2: ระบบคำนวณ Z-Score อัตโนมัติด้วย Python
หัวข้อที่ 1: เตรียมสภาพแวดล้อม (Setup)
ติดตั้ง Library ที่จำเป็น:
```bash
pip install yfinance pandas numpy
```
การ Import Library:
```python
import yfinance as yf
import pandas as pd
import numpy as np
```
หัวข้อที่ 2: การดึงข้อมูลหุ้น (Data Acquisition)
ดึงข้อมูลหุ้นจาก Yahoo Finance (ตัวอย่าง: PTTEP.BK)
การจัดการ Multi-index สำหรับ `yfinance` เวอร์ชั่นใหม่:
```python
symbol = "PTTEP.BK"
df = yf.download(symbol, period="60d") ดึงย้อนหลัง 60 วัน
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.get_level_values(0)
```
หัวข้อที่ 3: การคำนวณค่าทางสถิติแบบ Rolling
Concept: เราจะไม่คำนวณทั้งก้อนทีเดียว แต่จะใช้หน้าต่างย้อนหลัง 20 วัน (Moving Window)
สูตร:
$\mu$ (Mean): ค่าเฉลี่ยเคลื่อนที่ 20 วัน
$\sigma$ (SD): ส่วนเบี่ยงเบนมาตรฐาน 20 วัน
```python
window = 20
df['MA20'] = df['Close'].rolling(window=window).mean()
df['Std'] = df['Close'].rolling(window=window).std()
```
หัวข้อที่ 4: การคำนวณ Z-Score (Vectorization)
เปลี่ยนสูตร $Z = (X - \mu) / \sigma$ ให้เป็นโค้ด Python บรรทัดเดียว:
```python
df['Z-Score'] = (df['Close'] - df['MA20']) / df['Std']
df_clean = df.dropna() ตัดค่าที่ยังคำนวณไม่ได้ในช่วง 20 วันแรกออก
```
หัวข้อที่ 5: ระบบจำแนกสถานะ (Classification Logic)
การใช้ `if-else` เพื่อประเมินความผิดปกติของราคา:
```python
last_z = df_clean['Z-Score'].iloc[-1]
if last_z > 2:
status = "Overbought (แพงผิดปกติ)"
elif last_z < -2:
status = "Oversold (ถูกผิดปกติ)"
else:
status = "Normal (ปกติ)"
print(f"Current Z-Score: {last_z:.2f}")
print(f"Status: {status}")
```
หัวข้อที่ 6: สรุปกลยุทธ์ Mean Reversion
Z > 2: ราคาสูงเกินไป มีแนวโน้มจะวิ่งกลับลงมาหาค่าเฉลี่ย
Z < -2: ราคาต่ำเกินไป มีแนวโน้มจะรีบาวด์กลับขึ้นไปหาค่าเฉลี่ย
Z = 0: ราคาอยู่ที่ราคาสมดุล (Mean) พอดี

ความคิดเห็น
แสดงความคิดเห็น