反推日股港股估值

import yfinance as yf
import pandas as pd
import time

def get_valuation_fast_track(ticker_str):
    print(f"⚡️ 启动快速通道: {ticker_str}")
    stock = yf.Ticker(ticker_str)
    
    try:
        # 1. 只拿最稳的两个表,不调用 stock.info (因为 info 最容易卡死)
        income = stock.financials
        # 尝试拿过去两年的价格,减少请求量
        df_price = stock.history(period="2y")['Close']
        
        if income is None or income.empty:
            print("❌ 财务表为空,可能被暂时降级限流。")
            return
            
        print("✅ 基础数据就位,开始逻辑对齐...")
        
        # 2. 提取 EPS (优先找 Basic EPS 字段)
        # 雅虎的索引有时候是 'Basic EPS', 有时候是 'BasicEPS'
        income_t = income.T
        eps_col = [c for c in income_t.columns if 'EPS' in c and 'Basic' in c]
        
        if eps_col:
            fin_series = income_t[eps_col[0]].to_frame(name='EPS')
        else:
            # 如果没有 EPS,找 Net Income 和 Share Issued 强制计算
            net_income = income_t['Net Income Common Stockholders']
            # 注意:'Share Issued' 通常在 balance_sheet 里
            shares = stock.balance_sheet.T['Share Issued']
            fin_series = (net_income / shares).to_frame(name='EPS')

        # 3. 对齐日期 (去掉时区)
        fin_series.index = pd.to_datetime(fin_series.index).tz_localize(None)
        price_df = df_price.to_frame().reset_index()
        price_df['Date'] = pd.to_datetime(price_df['Date']).dt.tz_localize(None)

        # 4. 合并并计算
        merged = pd.merge_asof(
            price_df.sort_values('Date'),
            fin_series.sort_index(),
            left_on='Date',
            right_index=True,
            direction='backward'
        )
        
        merged['PE'] = merged['Close'] / merged['EPS']
        
        print(f"\n🚀 {ticker_str} 历史 PE 片段 (最新 5 条):")
        print(merged[['Date', 'Close', 'EPS', 'PE']].tail())
        return merged

    except Exception as e:
        print(f"🚨 快速通道报错: {e}")

# 立即测试 0700.HK
df_hk = get_valuation_fast_track("0700.HK")
# 如果通了,立即接上日股 7203.T,中间休息 5 秒
if df_hk is not None:
    time.sleep(5)
    get_valuation_fast_track("7203.T")
posted @ 2026-05-03 07:52  Parallax  阅读(21)  评论(0)    收藏  举报