เขียนโค้ดไพธอน ดึงข้อมูลเปรียบเทียบ "อัตราปันผล" Dividend Yield ของหุ้นไทย VS หุ้นสหรัฐฯ
หุ้นไทย (High Yield & Stable)
หุ้นไทยในกลุ่มธนาคารและอสังหาริมทรัพย์มักให้ปันผลที่สูงมาก:
TISCO (บมจ.ทิสโก้ไฟแนนเชียลกรุ๊ป): ตัวท็อปเรื่องปันผล (Yield ~7-8%) จ่ายปีละครั้งสม่ำเสมอ
SCB (เอสซีบี เอกซ์): กลุ่มธนาคารที่มีนโยบายจ่ายปันผลสูง (Yield ~6-7%)
LH (แลนด์แอนด์เฮ้าส์): กลุ่มอสังหาฯ ที่จ่ายปันผลค่อนข้างดีและต่อเนื่อง (Yield ~6-7%)
AP / SPALI: หุ้นอสังหาฯ ที่มี Yield สูงระดับ 6% ขึ้นไป
หุ้นสหรัฐฯ มักไม่เน้น Yield ที่สูงปรี๊ด แต่เน้น "การเติบโตของเงินปันผล" ทุกปี:
Verizon (VZ): หุ้นสื่อสารขนาดใหญ่ ปันผลสูง (Yield ~6.5%)
Realty Income (O): หุ้นกลุ่ม REIT ที่จ่ายปันผล "ทุกเดือน" (Yield ~5-6%)
Coca-Cola (KO) / PepsiCo (PEP): กลุ่ม Dividend Kings ที่เพิ่มเงินปันผลติดต่อกันเกิน 50 ปี (Yield ~2.8% - 3.2%)
Chevron (CVX): กลุ่มพลังงานที่มีกระแสเงินสดดี (Yield ~4.5%)
1. อัปเดต Library ให้เป็นเวอร์ชันล่าสุด
pip install --upgrade yfinance curl_cffi
เมื่อไม่นานมานี้ Yahoo Finance ได้มีการอัปเดตระบบป้องกัน การดึงข้อมูลที่เข้มงวดขึ้น
ทำให้ไลบรารี yfinance เวอร์ชันเก่าที่ใช้ requests แบบธรรมดาเริ่มดึงข้อมูลไม่ได้
curl_cffi เป็นตัวกลางในการรับส่งข้อมูลแทน เพื่อให้สามารถดึงข้อมูลราคาหุ้นกลับมาได้ตามปกติ
---------------------------------------------------------
# Full Code
import yfinance as yf
import pandas as pd
from curl_cffi.requests import Session
session = Session(impersonate="chrome")
tickers = {
"TISCO.BK": "TISCO (TH)",
"SCB.BK": "SCB (TH)",
"LH.BK": "Land & Houses (TH)",
"KO": "Coca-Cola (US)",
"VZ": "Verizon (US)",
"O": "Realty Income (US)"
}
def get_dividend_data(ticker_list):
results = []
for symbol, name in ticker_list.items():
try:
stock = yf.Ticker(symbol, session=session)
info = stock.info
# ดึงค่า Yield
raw_yield = info.get('dividendYield') or info.get('trailingAnnualDividendYield', 0)
# ปรับจูนตัวเลข (ถ้า Yahoo ส่งมาเกิน 1 แสดงว่าเป็น % มาอยู่แล้ว)
actual_yield = raw_yield if raw_yield < 1 else raw_yield / 100
yield_pct = round(actual_yield * 100, 2)
# คำนวณปันผลหลังหักภาษี (ไทย 10%, สหรัฐฯ 15% กรณีทำ W-8BEN)
tax_rate = 0.10 if ".BK" in symbol else 0.15
net_yield = round(yield_pct * (1 - tax_rate), 2)
# ดึงราคาย้อนหลัง 1 ปี เพื่อดูความคุ้มค่า
hist = stock.history(period="1y")
if not hist.empty:
start_price = hist['Close'].iloc[0]
end_price = hist['Close'].iloc[-1]
price_return = round(((end_price - start_price) / start_price) * 100, 2)
else:
price_return = 0
# คำนวณ Total Return (ปันผล + ส่วนต่างราคา)
total_return = round(yield_pct + price_return, 2)
results.append({
"Stock": name,
"Yield (%)": yield_pct,
"Price Return 1Y (%)": price_return,
"Total Return (%)": total_return,
"Market": "Thailand" if ".BK" in symbol else "USA"
})
print(f"✅ {name} ดึงข้อมูลสำเร็จ")
except Exception as e:
print(f"❌ {name} ล้มเหลว: {e}")
return pd.DataFrame(results)
df = get_dividend_data(tickers)
df = df.sort_values(by="Yield (%)", ascending=False)
print("\n--- ตารางเปรียบเทียบปันผล (ปรับปรุงตัวเลข) ---")
print(df.to_string(index=False))
--------------------------------------

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