ระบบคำนวณ Z-Score อัตโนมัติด้วย Python



คลิปที่ 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) พอดี

ความคิดเห็น