一个监控纳指额度的脚本
import akshare as ak
import yagmail
from datetime import datetime
import pandas as pd
# 邮箱配置
QQ_EMAIL = "xx@qq.com" # 发件人邮箱
QQ_PASSWORD ="xx" # 发件人邮箱密码或授权码
TO_EMAIL = "xx@qq.com" # 收件人邮箱
# 获取基金申购状态数据
def get_fund_purchase_data():
fund_purchase_em_df = ak.fund_purchase_em()
return fund_purchase_em_df
# 筛选纳指和标普相关的基金,并排除申购状态为“暂停申购”的基金
def filter_related_funds(fund_data):
keywords = ["纳斯达克", "纳指", "标普500"]
# 筛选包含关键词的基金,并排除申购状态为“暂停申购”的基金
related_funds = fund_data[
(fund_data['基金简称'].str.contains('|'.join(keywords), na=False)) &
(fund_data['申购状态'] != '暂停申购')
]
return related_funds
# 检查限购额度并生成报告
def check_fund_limits(fund_data):
report = []
for index, row in fund_data.iterrows():
fund_code = row['基金代码']
fund_name = row['基金简称']
limit_amount = row['日累计限定金额']
report.append((fund_code, fund_name, limit_amount))
# 按限购额度从大到小排序
report.sort(key=lambda x: float(str(x[2]).replace("万", "")) if x[2] and pd.notna(x[2]) else 0, reverse=True)
return report
# 发送邮件
def send_email(report, today):
try:
# 邮件主题
subject = f"纳指和标普相关基金限购额度监控报告 ({today})"
# 邮件正文内容
text_content = f"""
日期: {today}
以下是纳指和标普相关基金的限购额度监控结果(按限购额度从大到小排序):
"""
for fund_code, fund_name, limit_amount in report:
text_content += f"{fund_code} ({fund_name}) - 限购额度: {limit_amount}元\n"
# 初始化 yagmail
yag = yagmail.SMTP(user=QQ_EMAIL, password=QQ_PASSWORD, host='smtp.qq.com', port=465, smtp_ssl=True)
# 发送邮件
yag.send(to=TO_EMAIL, subject=subject, contents=[text_content])
print("邮件发送成功")
except Exception as e:
print(f"邮件发送失败: {e}")
# 主函数
def main():
# 获取当前日期
today = datetime.now().strftime("%Y-%m-%d")
# 获取基金申购状态数据
fund_data = get_fund_purchase_data()
# 筛选纳指和标普相关的基金,并排除申购状态为“暂停申购”的基金
related_funds = filter_related_funds(fund_data)
# 检查限购额度并生成报告
report = check_fund_limits(related_funds)
# 发送邮件
if report:
send_email(report, today)
else:
print("没有找到符合条件的基金数据")
# 运行主函数
if __name__ == "__main__":
main()