การดึงข้อมูลย้อนหลัง



 ดึงราคาหุ้นปัจจุบัน:เช่น ปตท. (PTT) หรือหุ้นยอดนิยมใน SET ถ้าราคาต่ำกว่าค่าเฉลี่ย 5 วัน ให้แจ้งเตือน

การดึงข้อมูลย้อนหลัง: ใช้ ticker.history(period="10d") เพื่อเอาตารางราคาปิด (Close) ย้อนหลังมาคำนวณ

สาเหตุที่เราต้องใช้ period="10d" (ดึงข้อมูลย้อนหลัง 10 วัน) ทั้งที่ต้องการหาค่าเฉลี่ยแค่ 5 วัน เป็นเพราะ "วันทำการของตลาดหุ้น" 

การคำนวณ MA5: * ใช้ .iloc[-6:-1] คือการเอาข้อมูล 5 วันย้อนหลัง โดยไม่นับรวมราคาของวันนี้ 

สมมติว่าวันนี้คือ วันจันทร์ที่ 22 ธันวาคม และคุณดึงข้อมูลมา 10 วัน (Trading Days) 

ตารางสมมติข้อมูลหุ้น (Index)ตำแหน่ง 

(Index)วันที่ (Date)ราคาปิด (Close)คำอธิบาย

[-10] 8 Dec 34.00

[-9] 9 Dec 34.25

[-8] 11 Dec 34.50

[-7] 12 Dec 34.75

[-6] 15 Dec 35.00 เริ่มดึงจากตรงนี้ (จุดเริ่มต้น)

[-5] 16 Dec 35.25

[-4] 17 Dec 35.50

[-3] 18 Dec 35.75

[-2] 19 Dec 36.00 สิ้นสุดตรงนี้

[-1] 22 Dec 32.00

(ราคาปัจจุบัน/วันนี้) - ไม่เอา

เพื่อให้ค่าเฉลี่ย เป็นตัวเปรียบเทียบที่นิ่ง ใช้ .mean() เพื่อหาค่าเฉลี่ยเลขคณิต

mean() จึงเป็น Method ของ Pandas DataFrame (ไม่ใช่ของ yfinance โดยตรง)

yfinance มีหน้าที่แค่ "ส่งมอบ" ตารางข้อมูลให้คุณ ส่วน mean() คือ "เครื่องมือ" ที่ติดมากับตารางนั้นเพื่อใช้คำนวณครับ

เงื่อนไขการแจ้งเตือน (If Statement): * ถ้า current_price < ma5_value ให้แสดงข้อความเตือน

### full code

#pip install yfinance

#pip show yfinance

import yfinance as yf

import time

# 1. กำหนดชื่อหุ้น

ticker_symbol = "PTT.BK"

stock = yf.Ticker(ticker_symbol)


def get_ma5(ticker):

    # ดึงข้อมูลย้อนหลัง 10 วันเพื่อให้มั่นใจว่ามีข้อมูลพอคำนวณ MA5 (เผื่อวันหยุด)

    hist = ticker.history(period="10d")

    # คำนวณค่าเฉลี่ย 5 วันล่าสุด (ไม่รวมราคา Real-time ของวันนี้)

    ma5 = hist['Close'].iloc[-6:-1].mean() 

    return ma5


print(f"--- เริ่มต้นระบบติดตามราคา {ticker_symbol} ---")

ma5_value = get_ma5(stock)

print(f"ค่าเฉลี่ย 5 วันก่อนหน้า (MA5): {ma5_value:.2f} บาท")


while True:

    try:

        # ดึงราคาล่าสุด

        current_price = stock.fast_info['last_price']

        

        # ตรวจสอบเงื่อนไข

        if current_price < ma5_value:

            status = "⚠️ ต่ำกว่าค่าเฉลี่ย!"

        else:

            status = "✅ ปกติ"

            

        print(f"ราคาปัจจุบัน: {current_price:.2f} | MA5: {ma5_value:.2f} | สถานะ: {status}")

        

    except Exception as e:

        print(f"เกิดข้อผิดพลาด: {e}")

        

    time.sleep(10) # พัก 10 วินาที (แนะนำให้ไม่ถี่เกินไปเพื่อป้องกันการโดน Block)

--------------------------------------------------------


-----------------------------------------------------------------

สำหรับปก YouTube:16:9

Main Title: "Python for Stock Tracking"

Sub Title: "Real-time PTT.BK Price Alert"

Keywords: yfinance, VS Code, Simple Moving Average (MA),History 5 days 

Tags: "Python for Stock Tracking","Real-time PTT.BK Price Alert",yfinance, VS Code, Simple Moving Average (MA),History 5 days 

Link :

ความคิดเห็น