#!/usr/bin/env python3 """ 添加新的美股持仓到Notion数据库 """ import requests import json from datetime import datetime # Notion API 配置 NOTION_API_KEY = "ntn_c43902219395mirQBetIfYoww1qKCAF14GBRUQeDee29o2" DATABASE_ID = "2fb105ad-7873-8175-bbbd-e5b87cf101d9" # 持仓数据 positions = [ {"symbol": "BND", "name": "Vanguard Total Bond Market ETF", "shares": 6.7219, "cost": 501.83, "current_price": 74.22}, {"symbol": "SGOV", "name": "iShares 0-3 Month Treasury Bond ETF", "shares": 33.7072, "cost": 3380.48, "current_price": 100.44}, {"symbol": "VOO", "name": "Vanguard S&P 500 ETF", "shares": 3.1963, "cost": 1969.46, "current_price": 636.09} ] def calculate_pnl(shares, cost, current_price): """计算盈亏""" market_value = shares * current_price total_cost = cost pnl_amount = market_value - total_cost pnl_percent = (pnl_amount / total_cost * 100) if total_cost > 0 else 0 return market_value, total_cost, pnl_amount, pnl_percent def add_position_to_notion(symbol, name, shares, cost, current_price): """添加持仓到Notion""" url = "https://api.notion.com/v1/pages" headers = { "Authorization": f"Bearer {NOTION_API_KEY}", "Content-Type": "application/json", "Notion-Version": "2022-06-28" } # 计算盈亏 market_value, total_cost, pnl_amount, pnl_percent = calculate_pnl(shares, cost, current_price) # 获取当前时间(UTC) now = datetime.utcnow() date_str = now.strftime("%Y-%m-%dT%H:%M:00Z") data = { "parent": { "database_id": DATABASE_ID }, "properties": { "股票代码": { "title": [ { "text": { "content": symbol } } ] }, "公司名称": { "rich_text": [ { "text": { "content": name } } ] }, "持仓数量": { "number": shares }, "买入成本": { "number": cost }, "当前价格": { "number": current_price }, "总成本": { "number": total_cost }, "当前市值": { "number": market_value }, "盈亏金额": { "number": round(pnl_amount, 2) }, "盈亏百分比": { "number": round(pnl_percent, 2) }, "最后更新": { "date": { "start": date_str } }, "备注": { "rich_text": [ { "text": { "content": "自动添加" } } ] } } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() page_id = result["id"] print(f" ✅ 成功添加 {symbol} - 页面ID: {page_id}") return page_id else: print(f" ❌ 添加失败 {symbol}: {response.status_code}") print(f" 响应: {response.text}") return None def main(): print("开始添加新的美股持仓到Notion...") print("=" * 60) for position in positions: symbol = position["symbol"] name = position["name"] shares = position["shares"] cost = position["cost"] current_price = position["current_price"] print(f"\n添加 {symbol} ({name})...") # 计算盈亏 market_value, total_cost, pnl_amount, pnl_percent = calculate_pnl(shares, cost, current_price) print(f" 持仓数量: {shares}") print(f" 买入成本: ${cost:.2f}") print(f" 当前价格: ${current_price:.2f}") print(f" 当前市值: ${market_value:.2f}") print(f" 盈亏: ${pnl_amount:.2f} ({pnl_percent:.2f}%)") # 添加到Notion page_id = add_position_to_notion(symbol, name, shares, cost, current_price) if page_id: print(f" 📄 页面链接: https://www.notion.so/{page_id.replace('-', '')}") print("\n" + "=" * 60) print("所有持仓添加完成!") print("=" * 60) if __name__ == "__main__": main()