#!/usr/bin/env python3 """ LOF基金溢价检查 (使用 akshare) """ import akshare as ak import pandas as pd from datetime import datetime def clean_number(x): try: if pd.isna(x) or x == '-': return None return float(str(x).replace('%', '').replace('+', '')) except: return None def get_lof_report(): """生成LOF基金溢价报告""" df = ak.qdii_e_index_jsl() df['premium'] = df['T-1溢价率'].apply(clean_number) df['price'] = df['现价'].apply(clean_number) df['change'] = df['涨幅'].apply(clean_number) df['volume'] = df['成交'].apply(clean_number) # 过滤有效数据 valid_df = df.dropna(subset=['premium', 'volume']) # 高溢价TOP10 premium_top = valid_df.sort_values('premium', ascending=False).head(10) # 高成交TOP10 volume_top = valid_df.sort_values('volume', ascending=False).head(10) report = [] report.append("=" * 70) report.append("📊 LOF/QDII基金溢价排行 TOP 10") report.append("=" * 70) report.append(f"\n数据时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}\n") report.append(f"{'代码':<10} {'名称':<16} {'溢价率':>10} {'现价':>8} {'涨幅':>8}") report.append("-" * 55) for _, row in premium_top.iterrows(): code = str(row['代码']) name = str(row['名称'])[:14] premium = row['premium'] price = row['price'] change = row['change'] report.append(f"{code:<10} {name:<16} {premium:>+9.2f}% {price:>7.3f} {change:>+7.2f}%") report.append("\n" + "=" * 70) report.append("💡 套利提示:") report.append(" 溢价 > 2%: 可考虑申购→卖出") report.append(" 成交量 > 1000万/日 流动性较好") report.append("=" * 70) return "\n".join(report) if __name__ == "__main__": print(get_lof_report())