股票基金助手

👤 上下文無關文法 📦 v1.1.0 ⭐ 4.8 ⬇️ 1.5K 下載
💼 行業專業 免費

📖 技能介紹


name: "fund-analyzer-plus" slug: "fund-analyzer-plus" version: "1.1.0" displayName: "股票基金助手" summary: "基金收益計算、風險分析、同類對比、持倉回測、調倉建議、股票分析。支援基金淨值查詢、收益計算、風險分析、多基金對比、同類推薦、持倉回測,以及股票K線、盤口深度、大單流向、板塊行情、問財選股等。" description: "基金收益計算、風險分析、同類對比、持倉回測、調倉建議、股票分析。當用戶需要查詢基金淨值、計算基金收益、分析基金風險、對比多隻基金、查詢同類基金推薦、回測持倉歷史收益、檢視股票K線、盤口、大單流向、板塊行情時觸發。支援所有基金型別和A股/港股/美股股票分析。"


投資全能分析助手

專業的投資投研分析工具,支援基金和股票兩大投資品種。

核心能力

基金分析

  • 單基金深度分析
  • 持倉收益計算
  • 多基金對比
  • 同類推薦
  • 持倉回測
  • 風險排查
  • 市場行情與調倉建議

股票分析(新增)

  • 分鐘K線(1m/5m/15m/30m/60m/120m)
  • 板塊/指數行情(主要指數/申萬行業/概念板塊成分股)
  • 多股票批次對比(表格+歸一化走勢圖+相關性熱力圖)
  • 盤口深度、大單流向、集合競價異動
  • 日內分時、歷史分時
  • 問財自然語言選股

⚠️ 能力說明:本工具僅提供公開市場資料分析,不支援即時交易、個人賬戶查詢、未來收益預測、私募基金等服務。詳細說明見「能力邊界」章節。


報告輸出規範(所有模式共用)

輸出格式

所有模式的報告必須輸出為自包含的 HTML 檔案,使用 html-report 技能生成。報告儲存到使用者工作區,檔名格式:基金分析報告_{模式}_{YYYYMMDD}.html

核心配色規則(最高優先順序,必須嚴格遵守)

中國A股慣例:紅色=上漲,綠色=下跌。 生成報告時,必須根據數值正負判斷並應用對應顏色:

  • 數值 > 0(上漲/盈利/正收益)→ 紅色 color: #cf1322
  • 數值 < 0(下跌/虧損/負收益)→ 綠色 color: #3f8600
  • 數值 = 0(平盤)→ 灰色 color: #999

判斷邏輯:看到 + 號或正數 → 紅色;看到 - 號或負數 → 綠色。絕對不能搞反!

HTML 模板結構

每個 HTML 報告必須包含以下結構,<style> 中的配色 CSS 必須完整包含,不得省略

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>{報告標題}</title>
  <style>
    /* === 以下 CSS 必須完整嵌入,不可省略任何規則 === */

    /* 紅漲綠跌配色 - 中國A股慣例 */
    .up, .positive, .rise { color: #cf1322; font-weight: 500; }
    .down, .negative, .fall { color: #3f8600; font-weight: 500; }
    .flat, .zero { color: #999; }
    .warning { color: #d46b08; background: #fff7e6; border-left: 3px solid #fa8c16; padding: 8px 12px; margin: 8px 0; border-radius: 4px; }
    .excellent { color: #1890ff; font-weight: 600; }
    .quartile-excellent { color: #cf1322; }
    .quartile-good { color: #fa8c16; }
    .quartile-average { color: #999; }
    .quartile-warning { color: #3f8600; }

    /* 基礎樣式 + 手機端適配 */
    * { box-sizing: border-box; margin: 0; padding: 0; }
    body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; font-size: 14px; line-height: 1.6; color: #333; background: #f5f5f5; padding: 0; -webkit-text-size-adjust: 100%; }
    .container { max-width: 100%; margin: 0 auto; padding: 12px; }
    table { width: 100%; border-collapse: collapse; font-size: 13px; margin: 8px 0; display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; }
    th, td { padding: 8px 6px; text-align: left; border-bottom: 1px solid #eee; white-space: nowrap; }
    th { background: #f8f9fa; font-weight: 600; position: sticky; top: 0; }
    .card { background: #fff; border-radius: 8px; padding: 12px; margin-bottom: 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
    .card h2 { font-size: 16px; color: #1a1a1a; border-left: 3px solid #1890ff; padding-left: 8px; margin-bottom: 10px; }
    .card h3 { font-size: 14px; color: #333; margin: 8px 0 6px; }
    @media (min-width: 768px) { .container { max-width: 800px; padding: 20px; } table { font-size: 14px; } th, td { padding: 10px 12px; } }
    .report-header { background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); color: #fff; padding: 16px; border-radius: 8px; margin-bottom: 12px; }
    .report-header h1 { font-size: 18px; margin-bottom: 4px; }
    .report-header .date { font-size: 12px; color: rgba(255,255,255,0.7); }
    .summary-box { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0; }
    .summary-item { flex: 1; min-width: 100px; background: #f8f9fa; border-radius: 6px; padding: 10px; text-align: center; }
    .summary-item .label { font-size: 11px; color: #999; margin-bottom: 4px; }
    .summary-item .value { font-size: 16px; font-weight: 600; }
    ul, ol { padding-left: 20px; margin: 6px 0; }
    li { margin: 4px 0; }
    hr { border: none; border-top: 1px solid #eee; margin: 12px 0; }
    strong { color: #1a1a1a; }
    a { color: #1890ff; text-decoration: none; }
  </style>
</head>
<body>
  <div class="container">
    <!-- 報告內容 -->
  </div>
</body>
</html>

CSS 樣式規範

手機端適配(必須包含)

* { box-sizing: border-box; margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  background: #f5f5f5;
  padding: 0;
  -webkit-text-size-adjust: 100%;
}
.container {
  max-width: 100%;
  margin: 0 auto;
  padding: 12px;
}
/* 表格手機端適配 */
table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  margin: 8px 0;
  display: block;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
th, td {
  padding: 8px 6px;
  text-align: left;
  border-bottom: 1px solid #eee;
  white-space: nowrap;
}
th {
  background: #f8f9fa;
  font-weight: 600;
  position: sticky;
  top: 0;
}
/* 卡片式佈局 */
.card {
  background: #fff;
  border-radius: 8px;
  padding: 12px;
  margin-bottom: 12px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.card h2 {
  font-size: 16px;
  color: #1a1a1a;
  border-left: 3px solid #1890ff;
  padding-left: 8px;
  margin-bottom: 10px;
}
.card h3 {
  font-size: 14px;
  color: #333;
  margin: 8px 0 6px;
}
/* 響應式:大螢幕居中 */
@media (min-width: 768px) {
  .container { max-width: 800px; padding: 20px; }
  table { font-size: 14px; }
  th, td { padding: 10px 12px; }
}

紅漲綠跌配色(中國A股慣例,必須嚴格遵守)

/* 上漲/正收益 → 紅色 */
.up, .positive, .rise {
  color: #cf1322;
  font-weight: 500;
}
/* 下跌/負收益 → 綠色 */
.down, .negative, .fall {
  color: #3f8600;
  font-weight: 500;
}
/* 平盤/零收益 → 灰色 */
.flat, .zero {
  color: #999;
}
/* 風險預警 → 橙色 */
.warning {
  color: #d46b08;
  background: #fff7e6;
  border-left: 3px solid #fa8c16;
  padding: 8px 12px;
  margin: 8px 0;
  border-radius: 4px;
}
/* 優秀/推薦 → 藍色高亮 */
.excellent {
  color: #1890ff;
  font-weight: 600;
}
/* 排名四分位顏色 */
.quartile-excellent { color: #cf1322; } /* 前25% - 紅色(好) */
.quartile-good { color: #fa8c16; }      /* 前50% - 橙色 */
.quartile-average { color: #999; }       /* 後50% - 灰色 */
.quartile-warning { color: #3f8600; }   /* 後25% - 綠色(差) */

漲跌顏色應用規則

在 HTML 報告中,所有涉及漲跌、收益的資料必須使用 <span> 標籤包裹並應用對應 CSS 類:

資料型別 正值(上漲/盈利) 負值(下跌/虧損) 零值(平盤)
漲跌幅、收益率 <span class="up">+X.XX%</span> <span class="down">-X.XX%</span> <span class="flat">0.00%</span>
收益金額(元) <span class="up">+X,XXX.XX</span> <span class="down">-X,XXX.XX</span> <span class="flat">0.00</span>
同類排名百分位 <span class="up">前25%</span> <span class="down">後25%</span> -
四分位評級 <span class="quartile-excellent">優秀</span> <span class="quartile-warning">預警</span> <span class="quartile-average">一般</span>
最大回撤 - <span class="down">-X.XX%</span> -
夏普比率 <span class="up">>1</span> <span class="down"><0</span> <span class="flat">0-1</span>
超額收益 <span class="up">+X.XX%</span> <span class="down">-X.XX%</span> <span class="flat">0.00%</span>

重要: - 絕對不要在 HTML 中使用 emoji(⚠️🥇🥈🥉⭐🏆❌⏰等),改用 CSS 樣式或純文字替代 - 風險預警用 <div class="warning"> 包裹 - 評級用文字+顏色類:<span class="excellent">優秀</span><span class="up">良好</span><span class="flat">一般</span><span class="down">預警</span> - 推薦排序用文字:[最推薦][次推薦][備選] - 非交易日提示用 <div class="warning"> 包裹,文字開頭用 [提示]

報告頭部樣式

.report-header {
  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
  color: #fff;
  padding: 16px;
  border-radius: 8px;
  margin-bottom: 12px;
}
.report-header h1 {
  font-size: 18px;
  margin-bottom: 4px;
}
.report-header .date {
  font-size: 12px;
  color: rgba(255,255,255,0.7);
}
/* 彙總資料高亮 */
.summary-box {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 10px 0;
}
.summary-item {
  flex: 1;
  min-width: 100px;
  background: #f8f9fa;
  border-radius: 6px;
  padding: 10px;
  text-align: center;
}
.summary-item .label {
  font-size: 11px;
  color: #999;
  margin-bottom: 4px;
}
.summary-item .value {
  font-size: 16px;
  font-weight: 600;
}

其他樣式

/* 列表樣式 */
ul, ol { padding-left: 20px; margin: 6px 0; }
li { margin: 4px 0; }
/* 分割線 */
hr { border: none; border-top: 1px solid #eee; margin: 12px 0; }
/* 加粗 */
strong { color: #1a1a1a; }
/* 連結 */
a { color: #1890ff; text-decoration: none; }

快速開始

它能做什麼?

模式 場景 一句話說明
A 查一隻基金 輸入基金名稱或程式碼,自動完成全方位深度分析
B 對比多隻基金 2-3只基金橫向PK,含評分和推薦
C 算持倉收益 提供持倉清單,計算每日/周/月收益
D 回測歷史表現 提供持倉+時間段,回測年化收益、回撤、夏普等

怎麼觸發?

幫我分析 003429                          → 模式A(單基金)
幫我比較 003429 和 004322                 → 模式B(對比)
幫我分析以下持倉:                          → 模式C(收益)
基金名 | 003429 | 130,000
幫我回測過去一年收益:                        → 模式D(回測)
基金名 | 003429 | 130,000

模式自動識別規則: - 含"對比/比較/vs/哪個好" → 模式B - 含持有金額 + "回測/過去/近X年/近X月/成立以來/YTD" → 模式D - 含持有金額但不含時間關鍵詞 → 模式C - 其餘 → 模式A

模糊輸入處理:

輸入情況 處理方式
只說基金簡稱(如"易方達藍籌") WebSearch搜尋全稱和程式碼,確認後繼續
只說基金程式碼(如"003429") 直接使用,若程式碼不存在則提示
含多隻但未用分隔符 嘗試按頓號、換行、空格分割
金額格式不標準(如"13萬"、"800萬") 自動解析為數字
無法識別意圖 提示使用者按標準格式輸入

識別失敗提示模板:

未能準確識別您的輸入,請按以下格式重新輸入:
- 單基金分析:幫我分析 {基金名稱或程式碼}
- 基金對比:比較 {基金A} 和 {基金B}
- 持倉分析:每行一隻 基金名 | 程式碼 | 金額

能力邊界

✅ 支援的功能

功能 說明
基金淨值查詢 當日/歷史淨值,來源天天基金網
業績分析 階段漲幅、同類排名、四分位
風險排查 8維度風險檢測(規模、機構、經理、回撤等)
同類推薦 基於業績、費率、規模篩選同類優質基金
持倉收益計算 當日/周/月收益,持倉結構分析
持倉回測 歷史收益、年化收益率、最大回撤、夏普比率
市場行情 A股/債市/海外/貨幣市場行情概要
調倉建議 基於持倉結構和市場行情給出建議

❌ 不支援的功能

功能 說明 替代方案
即時交易/買賣 無法執行基金申購贖回 請使用券商/銀行APP
個人賬戶資料 無法獲取您的真實持倉、收益記錄 需手動輸入持倉清單
基金經理訪談/路演 無法獲取非公開資訊 關注基金公司官網公告
未來收益預測 無法預測基金未來漲跌 僅提供歷史資料分析
私募基金/專戶 僅支援公募基金 私募資訊不公開
基金開戶/費率優惠 無法辦理業務 請諮詢銷售渠道
24小時即時資料 僅在交易日收盤後更新淨值 盤中為估算值
基金公司內部資訊 無法獲取基金經理策略、內部持倉調整等 關注定期報告和公告
個性化投資建議 僅提供基於資料的一般性分析 請諮詢專業理財顧問
不同渠道費率比較 無法查詢各銷售渠道的具體費率 直接諮詢各銷售渠道
封閉期基金贖回 無法查詢封閉期內的贖回規則 檢視基金合同或諮詢客服

⚠️ 使用限制

限制 說明
資料來源 僅從天天基金網獲取,可能存在延遲
同時分析數量 建議不超過10只,過多可能超時
回測時間跨度 最長支援5年,更長時間資料可能不完整
非交易日 可執行分析,但資料為上一個交易日

資料獲取工具(Python指令碼)

本技能提供兩個Python封裝指令碼:

fund_api.py — 基金資料介面

封裝天天基金的資料介面,支援:

  1. 基金名稱/程式碼解析 - 輸入基金名稱自動解析為程式碼(支援簡稱模糊匹配)
  2. 最新淨值獲取 - 獲取最新確認淨值和日漲跌幅
  3. 歷史淨值獲取 - 獲取完整歷史淨值資料(用於回測)
  4. 基金列表搜尋 - 按名稱/程式碼/全拼/首字母縮寫搜尋基金
  5. 帶降級的淨值獲取 - 多級降級保證資料可用
  6. 基金詳情 - 獲取規模/經理/費率/成立日期等
  7. 持倉分析 - 獲取前十大重倉股
  8. 收益計算 - 計算持倉當日收益

    更多技能請訪問小蔥技能站7w4.net。

  9. 回測計算 - 年化收益/最大回撤/夏普比率/波動率
  10. 金額解析 - "13萬"→130000, "800萬"→8000000

stock_api.py — 股票資料介面

封裝 thsdk 庫的常用操作,支援:

  1. 股票程式碼搜尋 - 名稱/程式碼/拼音解析為 THSCODE
  2. 即時行情 - 價格/漲跌幅/成交量/金額
  3. K線資料 - 1m~月線多週期,含均線/量能異動計算
  4. 分時與盤口 - 日內分時/五檔盤口/買賣深度
  5. 大單流向 - 大單/集合競價異動
  6. 板塊行情 - 行業/概念板塊列表/行情/成分股
  7. 智慧選股 - 問財自然語言選股
  8. 多股票對比 - 批次行情+歸一化走勢

快速使用

# 匯入指令碼
import sys
sys.path.insert(0, '/path/to/fund-analyzer-plus/scripts')
from fund_api import FundAPI

api = FundAPI()

# 1. 解析基金程式碼(支援名稱/簡稱輸入)
code = api.resolve_fund_code("易方達藍籌")  # -> "005827"
code = api.resolve_fund_code("中證興業信用債")  # -> "003429"(模糊匹配)
code = api.resolve_fund_code("003429")      # -> "003429"

# 2. 獲取最新淨值
nav = api.get_estimated_nav("003429")
# 返回: {"fundcode": "003429", "name": "...", "dwjz": "1.1946", "gszzl": "0.01", "ljjz": "1.4436", ...}

# 3. 獲取歷史淨值(用於回測)
hist = api.get_historical_nav_as_list("003429", days=365)
# 返回: [{"date": "2025-07-03", "nav": 1.1964, "cumnav": 1.1964}, ...]

# 4. 搜尋基金(支援首字母縮寫)
results = api.search_fund("易方達")   # 按名稱
results = api.search_fund("YFD")     # 按拼音首字母縮寫

# 5. 帶降級的淨值獲取
result = api.get_nav_with_fallback("003429")
# 返回: {"nav": "1.1946", "date": "2026-08-14", "source": "lsjz_api", "type": "confirmed"}

# 6. 基金詳情
detail = api.get_fund_detail("003429")
# 返回: {"name": "...", "manage_fee": "0.15%", "establish_date": "2016-11-04", ...}

# 7. 金額解析
amount = api.parse_amount("13萬")  # -> 130000.0

# 8. 收益計算
ret = api.calculate_return([{"code": "003429", "amount": 130000}])
# 返回: {"total_return": 13.0, "daily_return_rate": 0.01, ...}

# 9. 回測計算
bt = api.calculate_backtest([{"code": "003429", "amount": 130000}], days=365)
# 返回: {"portfolio_return": 2.02, "fund_details": [{"sharpe_ratio": 0.45, "max_drawdown": -1.15, ...}]}

股票資料快速使用

from stock_api import StockAPI

with StockAPI() as api:
    # 搜尋股票
    result = api.search_symbol("寧德時代")  # -> {"THSCODE": "USZA300750", ...}

    # 即時行情
    quote = api.get_realtime_quote("寧德時代")

    # K線資料
    klines = api.get_klines("寧德時代", interval="5m", count=78)

    # 板塊行情
    block_data = api.get_block_market_data("半導體")
    constituents = api.get_block_constituents("半導體")

    # 問財選股
    stocks = api.wencai_select("連續3日主力淨流入,換手率大於5%,非ST")

資料介面說明

介面 URL 用途
最新淨值 https://api.fund.eastmoney.com/f10/lsjz 獲取最新確認淨值和日漲跌幅
歷史淨值 http://fund.eastmoney.com/pingzhongdata/{code}.js 獲取完整歷史淨值資料
基金列表 http://fund.eastmoney.com/js/fundcode_search.js 獲取所有基金資訊用於搜尋
基金詳情 https://fundf10.eastmoney.com/jbgk_{code}.html 獲取基金規模/經理/費率等
持倉詳情 https://fundf10.eastmoney.com/ccmx_{code}.html 獲取前十大重倉股
股票資料 thsdk 庫 同花順行情介面(遊客模式可用)

容錯機制

  1. 基金名稱輸入:自動呼叫基金列表API解析為程式碼
  2. API失敗降級:lsjz API → pingzhongdata最新一條 → 提示使用瀏覽器工具 → 提示使用WebSearch
  3. QDII基金處理:部分QDII基金淨值可能延遲,自動降級
  4. 網路異常處理:超時自動重試,失敗返回明確錯誤資訊

交易日校驗(所有模式共用)

第一步:確定今天的日期。 使用系統當前日期(YYYY-MM-DD),不要猜測或假設。

第二步:判斷是否為交易日。 A股交易日規則: - 週一至週五 → 交易日(但法定節假日除外) - 週六、週日 → 非交易日 - 法定節假日必須通過 WebSearch 確認,常見節假日包括:元旦(1天)、春節(7天)、清明(3天)、五一(5天)、端午(3天)、中秋(3天)、國慶(7天)。注意:節假日可能涉及調休,如某週六可能因調休變為工作日但並非交易日

判斷流程: 1. 先看星期幾:週六/週日 → 非交易日,直接使用上一交易日資料 2. 週一至週五 → 通過 WebSearch 搜尋"{今天日期} A股是否開市" 或 "{今年} {節日名} 放假時間" 確認是否為節假日 3. 節假日 → 非交易日,使用上一交易日資料 4. 普通工作日 → 交易日

第三步:獲取淨值資料(關鍵)。 基金淨值分兩種,必須正確區分:

型別 說明 精度
確認淨值 基金公司計算後的正式淨值,收盤後 18:00-22:00 公佈 精確,用於計算實際收益
估算淨值 盤中根據持倉股票即時價格估算的淨值,有誤差 估算值,僅供參考

重要:天天基金網的 WebFetch 問題

天天基金網(fund.eastmoney.com)的所有頁面通過 JavaScript 動態渲染資料。使用 WebFetch 工具抓取時,獲取的是伺服器端快取的舊 HTML,資料可能是幾天前的。這是一個已知的技術限制。

資料獲取策略(按優先順序)

  1. 使用Python指令碼獲取(推薦):
  2. 呼叫 scripts/fund_api.py 中的 FundAPI
  3. api.get_estimated_nav(程式碼) - 獲取最新確認淨值和日漲跌幅
  4. api.get_nav_with_fallback(程式碼) - 帶降級的淨值獲取
  5. api.get_historical_nav_as_list(程式碼) - 獲取歷史淨值
  6. api.get_fund_detail(程式碼) - 獲取基金詳情(規模/經理/費率)
  7. api.resolve_fund_code(名稱) - 自動解析基金名稱/簡稱為程式碼
  8. api.calculate_return(持倉) - 計算持倉當日收益
  9. api.calculate_backtest(持倉, days) - 回測計算(年化/回撤/夏普)
  10. 優點:無需瀏覽器,速度快,支援歷史資料和計算

  11. 瀏覽器工具(備用,用於確認淨值或獲取指令碼未覆蓋的資料):

  12. browser_navigate 訪問 https://fund.eastmoney.com/{程式碼}.html
  13. browser_evaluate 執行 document.querySelector('.w782') 獲取歷史淨值表格的最新一行
  14. 瀏覽器會執行 JavaScript,獲取到最新確認淨值
  15. 這是獲取天天基金網最新確認淨值的唯一可靠方式

  16. lsjz API(Python指令碼內部使用):

  17. 通過 api.fund.eastmoney.com/f10/lsjz 獲取最新確認淨值
  18. Python 指令碼已封裝此介面,無需手動呼叫
  19. 注意:該介面返回的是確認淨值(非盤中估算),資料更新於收盤後

  20. 所有方案均失敗時

  21. 使用 WebSearch 搜尋"{基金名稱} {基金程式碼} 最新淨值"獲取第三方網站的資料
  22. 在報告中註明"資料來源非官方,僅供參考"

報告中的日期標註: - 使用瀏覽器獲取的確認淨值 → "資料日期:{日期}(確認淨值)" - 使用估算介面 → "資料日期:{日期}(盤中估算淨值,實際收益以收盤後確認為準)" - 非交易日 → "[提示] 今日為非交易日({原因}),以下資料為上一個交易日({日期})的確認淨值。"

重要: - 絕對不要把週一到週五的普通工作日誤判為非交易日 - 絕對不要忽略法定節假日(端午、中秋等可能恰逢週五/週一) - 絕對不要把估算淨值當作確認淨值使用,必須在報告中明確標註 - 絕對不要直接使用 WebFetch 抓取天天基金網獲取的淨值資料,該資料可能是快取的舊資料 - 如果估值介面的 gztime 不是今天的日期,說明今日沒有估算資料(如非交易日),應使用確認淨值 - 如果估值介面對QDII基金返回空資料,必須使用瀏覽器工具獲取最新資料


模式A:單基金深度分析

A1 基金資訊採集

從天天基金網(fund.eastmoney.com)採集:

欄位 來源 說明
基金全稱/程式碼/型別/風險等級 瀏覽器訪問 fund.eastmoney.com/{程式碼}.html 頂部基本資訊
最新單位淨值 + 日漲跌幅 見下方"淨值獲取策略" 區分確認淨值和估算淨值
淨值日期 淨值資料中附帶 必須標註是確認還是估算
基金規模/成立日期 瀏覽器訪問或 WebFetch 均可 靜態資料,快取影響不大
基金經理 + 任職時間 fundf10.eastmoney.com/jjjl_{程式碼}.html 靜態資料
管理費率 購買資訊 含管理費+託管費+銷售服務費

淨值獲取策略(按優先順序): 1. Python指令碼(推薦):使用 FundAPI.get_estimated_nav(程式碼)FundAPI.get_nav_with_fallback(程式碼) 2. 瀏覽器工具(最可靠):訪問 https://fund.eastmoney.com/{程式碼}.html,通過 JS 獲取最新確認淨值和日期 3. lsjz API(備用):https://api.fund.eastmoney.com/f10/lsjz?fundCode={程式碼}(Python指令碼已封裝此介面,返回確認淨值和日漲跌幅) 4. WebSearch(兜底):搜尋"{基金名稱} 最新淨值"從第三方獲取

注意:WebFetch 抓取天天基金網頁面獲取的是快取舊資料,不可直接用於獲取淨值。靜態資訊(基金名稱、規模、經理等)使用 WebFetch 沒有問題。 注意:舊的估算淨值介面 fundgz.1234567.com.cn 已失效,不要使用。

A2 業績分析

維度 時間區間 對比
階段漲幅 近1周/1月/3月/6月/今年/1年/2年/3年 同類平均
季度/年度漲幅 近4季度 + 近3年 同類平均
同類排名 各區間百分位 + 四分位

評級標準: 各區間均前25% → 優秀 | 多數前50% → 良好 | 多數後50% → 一般 | 多數後25% → 預警

A3 風險排查(8維度)

檢查維度 異常閾值 風險型別
基金規模 < 2億元 清盤風險
規模變動 近一季縮水 > 30% 大額贖回
機構佔比 > 80% 或大幅減持 贖回踩踏
基金經理 任職 < 1年或近期變更 策略不穩定
最大回撤 > 同類1.5倍 風控預警
跟蹤誤差 > 0.3%(債指)/> 1%(股指) 指數管理問題
換手率 異常高/低 策略風險
持倉集中度 前十大 > 60% 集中風險

查詢路徑:基金規模 fundf10.eastmoney.com/gmbd_{程式碼}.html | 機構佔比 cyrjg_{程式碼}.html

A4 持倉分析(權益類基金)

對股票型/混合型/指數型基金,額外分析:前十大重倉股、行業分佈、持倉風格(大盤/中盤/小盤,成長/價值) 查詢路徑:fundf10.eastmoney.com/ccmx_{程式碼}.html

A5 同類對比推薦

搜尋同類基金,按優先順序排序推薦2-3只: 1. 近1年/3年業績排名同類前20% 2. 基金經理任職 > 2年 3. 規模 5-100億元 4. 費率低於同類平均 5. 最大回撤優於同類平均

A6 市場行情與建議

基金型別 搜尋關鍵詞
股票型/混合型 "A股行情 板塊輪動"、"主力資金流向"
債券型 "債市行情 國債收益率"、"央行公開市場操作"
指數型 "{跟蹤指數名稱} 走勢"
QDII "{投資區域} 市場行情"、"匯率走勢"
貨幣型 "資金面 銀行間利率"
FOF "基金市場整體表現"

模式A輸出格式(HTML)

報告檔名:基金分析報告_單基金_{YYYYMMDD}.html

<div class="report-header">
  <h1>基金分析報告:{基金名稱}</h1>
  <div class="date">資料日期:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日時顯示 -->
<div class="warning">[提示] 今日為非交易日,以下資料為上一個交易日({YYYY-MM-DD})的資料。</div>

<div class="card">
  <h2>一、基本資訊</h2>
  <table>
    <tr><th>專案</th><th>內容</th></tr>
    <tr><td>基金名稱</td><td>{名稱}</td></tr>
    <tr><td>基金程式碼</td><td>{程式碼}</td></tr>
    <tr><td>基金型別</td><td>{型別}</td></tr>
    <tr><td>風險等級</td><td>{等級}</td></tr>
    <tr><td>最新淨值</td><td>{淨值} ({日期})</td></tr>
    <tr><td>日漲跌幅</td><td><span class="up/down/flat">{漲跌幅}</span></td></tr>
    <tr><td>基金規模</td><td>{規模}</td></tr>
    <tr><td>基金經理</td><td>{經理} (任職X年X天)</td></tr>
    <tr><td>綜合費率</td><td>{費率}</td></tr>
  </table>
</div>

<div class="card">
  <h2>二、業績表現</h2>
  <table>
    <tr><th>時間區間</th><th>漲幅</th><th>同類平均</th><th>同類排名</th><th>四分位</th></tr>
    <tr><td>近1周</td><td><span class="up/down/flat">{值}</span></td><td><span class="up/down/flat">{值}</span></td><td>{排名}</td><td><span class="quartile-*">{評級}</span></td></tr>
    <!-- 近1月/3月/6月/今年/1年/3年 同上 -->
  </table>
  <p>業績評級:<span class="excellent/up/flat/down">{評級文字}</span></p>
</div>

<div class="card">
  <h2>三、風險預警</h2>
  <!-- 有風險時 -->
  <div class="warning">[風險型別] - [具體原因]</div>
  <!-- 無風險時 -->
  <p>全部正常,未發現異常風險。</p>
</div>

<div class="card">
  <h2>四、持倉概覽</h2>
  <!-- 權益類基金顯示 -->
  <h3>前十大重倉股</h3>
  <table>
    <tr><th>序號</th><th>股票名稱</th><th>程式碼</th><th>佔淨值比</th></tr>
    <!-- 資料行 -->
  </table>
  <h3>行業分佈</h3>
  <table>
    <tr><th>行業</th><th>佔比</th></tr>
    <!-- 資料行 -->
  </table>
</div>

<div class="card">
  <h2>五、同類對比推薦</h2>
  <table>
    <tr><th>基金名稱</th><th>程式碼</th><th>近1年</th><th>近3年</th><th>規模</th><th>費率</th><th>推薦理由</th></tr>
    <!-- 推薦基金行,漲幅用 up/down/flat 類 -->
  </table>
</div>

<div class="card">
  <h2>六、綜合建議</h2>
  <p>{50-150字建議,結合業績、風險、市場行情}</p>
</div>

HTML 輸出示例:

<div class="report-header">
  <h1>基金分析報告:中證興業中高等級信用債指數A</h1>
  <div class="date">資料日期:2026-06-18</div>
</div>
<div class="warning">[提示] 今日為非交易日(週六),以下資料為上一個交易日(2026-06-18)的資料。</div>

<div class="card">
  <h2>一、基本資訊</h2>
  <table>
    <tr><th>專案</th><th>內容</th></tr>
    <tr><td>基金名稱</td><td>中證興業中高等級信用債指數A</td></tr>
    <tr><td>基金程式碼</td><td>003429</td></tr>
    <tr><td>基金型別</td><td>指數型-債券(信用債指數)</td></tr>
    <tr><td>風險等級</td><td>R2(中低風險)</td></tr>
    <tr><td>最新淨值</td><td>1.1962 (2026-06-18)</td></tr>
    <tr><td>日漲跌幅</td><td><span class="up">+0.03%</span></td></tr>
    <tr><td>基金規模</td><td>105.18億元</td></tr>
    <tr><td>基金經理</td><td>伍方方、郭益均 (任職2年87天)</td></tr>
    <tr><td>綜合費率</td><td>管理費0.20%+託管費0.10%</td></tr>
  </table>
</div>

<div class="card">
  <h2>二、業績表現</h2>
  <table>
    <tr><th>時間區間</th><th>漲幅</th><th>同類平均</th><th>同類排名</th><th>四分位</th></tr>
    <tr><td>近1周</td><td><span class="up">+0.15%</span></td><td><span class="up">+0.15%</span></td><td>239/662</td><td><span class="quartile-good">良好</span></td></tr>
  </table>
  <p>業績評級:<span class="up">良好</span></p>
</div>

<div class="card">
  <h2>三、風險預警</h2>
  <div class="warning">[機構集中度過高] - 機構持有99.58%,存在大額贖回風險</div>
</div>

<div class="card">
  <h2>六、綜合建議</h2>
  <p>該基金跟蹤中高等級信用債指數,規模充足(105億),但機構佔比過高(99.58%)存在流動性風險。建議關注季度機構贖回動向,可考慮分散配置。</p>
</div>

模式B:基金對比分析

對每隻基金執行 A1(資訊採集)+ A2(業績分析)+ A3(風險排查),然後橫向對比。

模式B輸出格式(HTML)

報告檔名:基金分析報告_對比_{YYYYMMDD}.html

<div class="report-header">
  <h1>基金對比分析報告</h1>
  <div class="date">資料日期:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日時顯示 -->
<div class="warning">[提示] 今日為非交易日,以下資料為上一個交易日({YYYY-MM-DD})的資料。</div>

<div class="card">
  <h2>一、基本資訊對比</h2>
  <table>
    <tr><th>專案</th><th>基金A</th><th>基金B</th><th>基金C</th></tr>
    <tr><td>名稱</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>程式碼</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>型別</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>風險等級</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>規模</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>經理/任職時間</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>綜合費率</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>淨值</td><td>...</td><td>...</td><td>...</td></tr>
    <tr><td>漲跌幅</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>二、業績對比</h2>
  <table>
    <tr><th>時間區間</th><th>基金A</th><th>基金B</th><th>基金C</th><th>勝出</th></tr>
    <tr><td>近1周</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="excellent">[基金名]</span></td></tr>
    <!-- 近1月/3月/6月/今年/1年/3年 同上 -->
    <tr><td>綜合勝率</td><td>X/Y</td><td>X/Y</td><td>X/Y</td><td>-</td></tr>
  </table>
</div>

<div class="card">
  <h2>三、風險對比</h2>
  <table>
    <tr><th>維度</th><th>基金A</th><th>基金B</th><th>基金C</th><th>優選</th></tr>
    <tr><td>最大回撤</td><td><span class="down">...</span></td><td><span class="down">...</span></td><td><span class="down">...</span></td><td><span class="excellent">[基金名]</span></td></tr>
    <tr><td>機構佔比</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
    <tr><td>規模穩定性</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
    <tr><td>經理穩定性</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>四、費率對比</h2>
  <table>
    <tr><th>費用項</th><th>基金A</th><th>基金B</th><th>基金C</th><th>最低</th></tr>
    <tr><td>管理費</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
    <tr><td>託管費</td><td>...</td><td>...</td><td>...</td><td><span class="excellent">[基金名]</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>五、綜合評價與推薦</h2>
  <h3>評分表(滿分5分)</h3>
  <table>
    <tr><th>維度</th><th>基金A</th><th>基金B</th><th>基金C</th></tr>
    <tr><td>業績</td><td>X</td><td>X</td><td>X</td></tr>
    <tr><td>風險</td><td>X</td><td>X</td><td>X</td></tr>
    <tr><td>費率</td><td>X</td><td>X</td><td>X</td></tr>
    <tr><td>管理</td><td>X</td><td>X</td><td>X</td></tr>
    <tr><td>綜合</td><td><strong>X</strong></td><td><strong>X</strong></td><td><strong>X</strong></td></tr>
  </table>
  <h3>推薦結論</h3>
  <p><span class="excellent">[最推薦]</span>:{基金名稱} - {理由}</p>
  <p><span class="up">[次推薦]</span>:{基金名稱} - {理由}</p>
  <p><span class="flat">[備選]</span>:{基金名稱} - {理由}</p>
  <h3>適用場景建議</h3>
  <ul>
    <li>追求高收益 → {基金X}</li>
    <li>追求穩健 → {基金Y}</li>
    <li>低費率優先 → {基金Z}</li>
  </ul>
</div>

HTML 輸出示例:

<div class="report-header">
  <h1>基金對比分析報告</h1>
  <div class="date">資料日期:2026-06-18</div>
</div>
<div class="warning">[提示] 今日為非交易日(週六),以下資料為上一個交易日(2026-06-18)的資料。</div>

<div class="card">
  <h2>一、基本資訊對比</h2>
  <table>
    <tr><th>專案</th><th>基金A</th><th>基金B</th></tr>
    <tr><td>名稱</td><td>中證興業中高等級信用債指數A</td><td>創金合信尊隆純債債券A</td></tr>
  </table>
</div>

<div class="card">
  <h2>五、綜合評價與推薦</h2>
  <p><span class="excellent">[最推薦]</span>:創金合信尊隆純債A - 業績更優,回撤更小</p>
  <p><span class="up">[次推薦]</span>:中證興業信用債指數A - 規模大,流動性好</p>
</div>

模式C:持倉收益計算

C1 淨值查詢 + C2 收益計算

計算公式:

當日收益 = 持有金額 × 日漲跌幅(%轉小數,如0.05% = 0.0005)
總持有市值 = Σ(各基金持有金額)
當日總收益 = Σ(各基金當日收益)
日收益率 = 當日總收益 / 總持有市值 × 100%

收益精度:小數點後2位,正負號(+/-)。

C3 持倉結構分析

按基金型別分類統計(股票型/混合型/債券型/指數型/貨幣型/其他),評估:股債比例、行業集中度、重複持倉。

C4 風險排查 + 市場行情 + 調倉建議

同模式A的A3/A6,根據持倉型別組合搜尋對應市場行情。

模式C輸出格式(HTML)

報告檔名:基金分析報告_持倉_{YYYYMMDD}.html

<div class="report-header">
  <h1>基金持倉分析報告</h1>
  <div class="date">資料日期:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日時顯示 -->
<div class="warning">[提示] 今日為非交易日,以下資料為上一個交易日({YYYY-MM-DD})的資料。</div>

<div class="card">
  <h2>一、交易日說明</h2>
  <p>本週交易日:X/X、X/X、X/X(共X天)</p>
</div>

<div class="card">
  <h2>二、淨值與收益明細</h2>
  <p>(按收益從高到低排序)</p>
  <table>
    <tr><th>序號</th><th>基金名稱</th><th>程式碼</th><th>型別</th><th>單位淨值</th><th>日漲跌幅</th><th>當日收益(元)</th><th>風險狀態</th></tr>
    <tr><td>1</td><td>...</td><td>...</td><td>...</td><td>...</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td>正常/預警</td></tr>
  </table>
</div>

<div class="card">
  <h2>三、收益彙總</h2>
  <div class="summary-box">
    <div class="summary-item">
      <div class="label">總持有市值</div>
      <div class="value">XXX,XXX.XX 元</div>
    </div>
    <div class="summary-item">
      <div class="label">當日總收益</div>
      <div class="value"><span class="up/down/flat">+X,XXX.XX 元</span></div>
    </div>
    <div class="summary-item">
      <div class="label">日收益率</div>
      <div class="value"><span class="up/down/flat">+X.XXXX%</span></div>
    </div>
  </div>
</div>

<div class="card">
  <h2>四、持倉結構</h2>
  <p>{各類基金佔比 + 配置合理性評估}</p>
</div>

<div class="card">
  <h2>五、風險預警清單</h2>
  <!-- 有風險時 -->
  <div class="warning">[{基金名稱}]:[{風險型別}] - [{具體原因}]</div>
  <!-- 無風險時 -->
  <p>全部正常,未發現異常風險。</p>
</div>

<div class="card">
  <h2>六、市場行情與調倉建議</h2>
  <h3>市場要點</h3>
  <p>...</p>
  <h3>調倉建議</h3>
  <ol>
    <li>...</li>
    <li>...</li>
    <li>...</li>
  </ol>
</div>

HTML 輸出示例:

<div class="report-header">
  <h1>基金持倉分析報告</h1>
  <div class="date">資料日期:2026-06-18</div>
</div>
<div class="warning">[提示] 今日為非交易日(週六),以下資料為上一個交易日(2026-06-18)的資料。</div>

<div class="card">
  <h2>二、淨值與收益明細</h2>
  <table>
    <tr><th>序號</th><th>基金名稱</th><th>程式碼</th><th>型別</th><th>淨值</th><th>漲跌幅</th><th>當日收益(元)</th></tr>
    <!-- 資料行,漲跌幅和收益用 up/down/flat 類 -->
  </table>
</div>

<div class="card">
  <h2>三、收益彙總</h2>
  <div class="summary-box">
    <div class="summary-item">
      <div class="label">總持有市值</div>
      <div class="value">381,030.15 元</div>
    </div>
    <div class="summary-item">
      <div class="label">當日總收益</div>
      <div class="value"><span class="up">+117.29 元</span></div>
    </div>
    <div class="summary-item">
      <div class="label">日收益率</div>
      <div class="value"><span class="up">+0.0308%</span></div>
    </div>
  </div>
</div>

<div class="card">
  <h2>四、持倉結構</h2>
  <p>債券型佔比100%(信用債指數34% + 純債53% + 同業存單13%)</p>
</div>

模式D:持倉回測

D1 識別回測區間

使用者表述 起始日期
過去一年 / 近1年 當日往前推1年
過去半年 / 近6月 當日往前推6個月
今年以來 / YTD 今年1月2日 至 當日
成立以來 最晚成立的基金成立日
自定義(如"2025年至今") 按使用者指定

通過WebSearch確認起始日和結束日各自對應的最近交易日。

D2 歷史淨值採集

推薦方式:使用Python指令碼獲取歷史淨值資料

import sys
sys.path.insert(0, '/path/to/fund-analyzer-plus/scripts')
from fund_api import FundAPI

api = FundAPI()

# 獲取歷史淨值(最近365天)
hist = api.get_historical_nav_as_list("003429", days=365)
# 返回: [{"date": "2025-07-03", "nav": 1.1964, "cumnav": 1.1964}, ...]

# 或獲取完整歷史資料(含原始資料)
data = api.get_historical_nav("003429")
# data["unit_nav"] - 單位淨值走勢
# data["cumulative_nav"] - 累計淨值走勢

備用方式:瀏覽器訪問 fundf10.eastmoney.com/jjjz_{基金程式碼}.html

需採集:起始日淨值、結束日淨值、期間每個交易日淨值(計算回撤/波動率)、分紅記錄。 使用累計淨值計算含分紅的真實收益。

D3 回測收益計算

單基金:期間收益率 = (NAV_end - NAV_start) / NAV_start × 100%
年化收益率 = (1 + 期間收益率) ^ (365 / 持有天數) - 1

組合(加權):組合收益率 = Σ(各基金收益額) / 總持有金額 × 100%

基準對比:滬深300(權益)、中證全債(債券)、銀行理財平均(保守)。

D4 風險指標計算

指標 計算方法
最大回撤 (最高點 - 最低點) / 最高點
年化波動率 日收益率標準差 × √252
夏普比率 (年化收益率 - 無風險利率) / 年化波動率(無風險利率取1年期國債約1.5%)
正收益天數佔比 正收益交易日數 / 總交易日數
最長回撤修復天數 從最大回撤到淨值恢復的天數

模式D輸出格式(HTML)

報告檔名:基金分析報告_回測_{YYYYMMDD}.html

<div class="report-header">
  <h1>持倉回測分析報告</h1>
  <div class="date">資料截至:{YYYY-MM-DD}</div>
</div>
<!-- 非交易日時顯示 -->
<div class="warning">[提示] 今日為非交易日,以下資料截至上一個交易日({YYYY-MM-DD})。</div>

<div class="card">
  <h2>一、回測區間</h2>
  <table>
    <tr><th>專案</th><th>內容</th></tr>
    <tr><td>起始日期</td><td>{YYYY-MM-DD}</td></tr>
    <tr><td>結束日期</td><td>{YYYY-MM-DD}</td></tr>
    <tr><td>持有天數</td><td>X天</td></tr>
    <tr><td>交易日數</td><td>X天</td></tr>
  </table>
</div>

<div class="card">
  <h2>二、組合整體表現</h2>
  <div class="summary-box">
    <div class="summary-item">
      <div class="label">總持有金額</div>
      <div class="value">XXX,XXX.XX 元</div>
    </div>
    <div class="summary-item">
      <div class="label">期間總收益</div>
      <div class="value"><span class="up/down/flat">+XXX,XXX.XX 元</span></div>
    </div>
    <div class="summary-item">
      <div class="label">期間收益率</div>
      <div class="value"><span class="up/down/flat">+X.XX%</span></div>
    </div>
    <div class="summary-item">
      <div class="label">年化收益率</div>
      <div class="value"><span class="up/down/flat">+X.XX%</span></div>
    </div>
    <div class="summary-item">
      <div class="label">最大回撤</div>
      <div class="value"><span class="down">-X.XX%</span></div>
    </div>
    <div class="summary-item">
      <div class="label">夏普比率</div>
      <div class="value"><span class="up/down/flat">X.XX</span></div>
    </div>
  </div>
  <table>
    <tr><th>指標</th><th>數值</th></tr>
    <tr><td>基準收益率(滬深300/中證全債)</td><td><span class="up/down/flat">+X.XX%</span></td></tr>
    <tr><td>超額收益</td><td><span class="up/down/flat">+X.XX%</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>三、各基金明細(按收益從高到低)</h2>
  <table>
    <tr><th>序號</th><th>基金名稱</th><th>程式碼</th><th>型別</th><th>起始淨值</th><th>結束淨值</th><th>期間收益</th><th>年化收益</th><th>收益額</th><th>最大回撤</th></tr>
    <tr><td>1</td><td>...</td><td>...</td><td>...</td><td>...</td><td>...</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="down">...</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>四、收益貢獻分析</h2>
  <table>
    <tr><th>基金名稱</th><th>持倉佔比</th><th>收益貢獻</th><th>貢獻佔比</th></tr>
    <tr><td>...</td><td>...</td><td><span class="up/down/flat">...</span></td><td>...</td></tr>
  </table>
</div>

<div class="card">
  <h2>五、風險指標對比</h2>
  <table>
    <tr><th>指標</th><th>組合</th><th>同類平均</th><th>評價</th></tr>
    <tr><td>年化收益率</td><td><span class="up/down/flat">...</span></td><td><span class="up/down/flat">...</span></td><td><span class="excellent/up/down">優於/劣於</span></td></tr>
    <tr><td>最大回撤</td><td><span class="down">...</span></td><td><span class="down">...</span></td><td><span class="excellent/up/down">優於/劣於</span></td></tr>
    <tr><td>夏普比率</td><td>...</td><td>...</td><td><span class="excellent/up/down">優於/劣於</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>六、關鍵發現與建議</h2>
  <ol>
    <li>表現最佳基金 + 原因</li>
    <li>表現最差基金 + 原因</li>
    <li>風險提示</li>
    <li>最佳化建議(150字以內)</li>
  </ol>
</div>

HTML 輸出示例:

<div class="report-header">
  <h1>持倉回測分析報告</h1>
  <div class="date">資料截至:2026-06-18</div>
</div>
<div class="warning">[提示] 今日為非交易日(週六),以下資料截至上一個交易日(2026-06-18)。</div>

<div class="card">
  <h2>一、回測區間</h2>
  <table>
    <tr><th>專案</th><th>內容</th></tr>
    <tr><td>起始日期</td><td>2025-06-18</td></tr>
    <tr><td>結束日期</td><td>2026-06-18</td></tr>
    <tr><td>持有天數</td><td>365天</td></tr>
    <tr><td>交易日數</td><td>244天</td></tr>
  </table>
</div>

<div class="card">
  <h2>二、組合整體表現</h2>
  <div class="summary-box">
    <div class="summary-item">
      <div class="label">總持有金額</div>
      <div class="value">381,030.15 元</div>
    </div>
    <div class="summary-item">
      <div class="label">期間總收益</div>
      <div class="value"><span class="up">+10,250.00 元</span></div>
    </div>
    <div class="summary-item">
      <div class="label">年化收益率</div>
      <div class="value"><span class="up">+2.69%</span></div>
    </div>
    <div class="summary-item">
      <div class="label">最大回撤</div>
      <div class="value"><span class="down">-0.85%</span></div>
    </div>
    <div class="summary-item">
      <div class="label">夏普比率</div>
      <div class="value"><span class="up">1.82</span></div>
    </div>
  </div>
  <table>
    <tr><th>指標</th><th>數值</th></tr>
    <tr><td>基準收益率(中證全債)</td><td><span class="up">+3.20%</span></td></tr>
    <tr><td>超額收益</td><td><span class="down">-0.51%</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>三、各基金明細</h2>
  <table>
    <tr><th>序號</th><th>基金名稱</th><th>程式碼</th><th>型別</th><th>起始淨值</th><th>結束淨值</th><th>期間收益</th><th>年化收益</th><th>收益額</th><th>最大回撤</th></tr>
    <tr><td>1</td><td>創金合信尊隆純債A</td><td>004322</td><td>純債</td><td>1.0156</td><td>1.0234</td><td><span class="up">+0.77%</span></td><td><span class="up">+0.77%</span></td><td><span class="up">+1,547</span></td><td><span class="down">-0.32%</span></td></tr>
    <tr><td>2</td><td>中證興業信用債指數A</td><td>003429</td><td>信用債指數</td><td>1.1810</td><td>1.1962</td><td><span class="up">+1.29%</span></td><td><span class="up">+1.29%</span></td><td><span class="up">+1,678</span></td><td><span class="down">-0.68%</span></td></tr>
    <tr><td>3</td><td>天弘同業存單AAA</td><td>017423</td><td>同業存單</td><td>1.0012</td><td>1.0089</td><td><span class="up">+0.77%</span></td><td><span class="up">+0.77%</span></td><td><span class="up">+385</span></td><td><span class="down">-0.05%</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>五、風險指標對比</h2>
  <table>
    <tr><th>指標</th><th>組合</th><th>同類平均</th><th>評價</th></tr>
    <tr><td>年化收益率</td><td><span class="up">+2.69%</span></td><td><span class="up">+2.45%</span></td><td><span class="excellent">優於</span></td></tr>
    <tr><td>最大回撤</td><td><span class="down">-0.85%</span></td><td><span class="down">-1.20%</span></td><td><span class="excellent">優於</span></td></tr>
    <tr><td>夏普比率</td><td>1.82</td><td>1.50</td><td><span class="excellent">優於</span></td></tr>
  </table>
</div>

<div class="card">
  <h2>六、關鍵發現與建議</h2>
  <ol>
    <li>表現最佳:中證興業信用債指數A,收益<span class="up">+1.29%</span>,貢獻佔比55.7%</li>
    <li>組合回撤控制良好(<span class="down">-0.85%</span>),波動率低於同類</li>
    <li>最佳化建議:可適當增加長久期利率債配置以提升收益彈性</li>
  </ol>
</div>

附錄A:基金型別識別與分類

關鍵詞 大類 二級分類 典型風險等級
滬深300/中證500/創業板/科創 指數型-股票 寬基指數 R4-R5
消費/醫藥/新能源/半導體/軍工 股票型或指數型 行業主題 R4-R5
藍籌/成長/價值/精選 混合型或股票型 主動權益 R4
信用債/產業債/城投債 債券型 信用債 R2
國開債/國債指數 指數型-債券 利率債指數 R2
同業存單 指數型-債券 同業存單 R2
純債/短債/中短債 債券型 純債 R2
可轉債 債券型 可轉債 R3
QDII/納斯達克/標普 QDII 海外 R4-R5
FOF/養老目標 FOF 基金中基金 R3-R4
貨幣/餘額寶 貨幣型 貨幣 R1

附錄B:市場行情分析框架

權益類(股票型/混合型/股票指數): 大盤走勢、板塊輪動、北向資金、漲跌家數 搜尋:"A股今日行情"、"北向資金流向"、"板塊輪動 主力資金"

債券市場(債券型/債券指數): 10年期國債收益率、央行公開市場操作、DR007/Shibor、信用利差 搜尋:"今日債市行情"、"國債收益率走勢"、"央行公開市場操作"

海外市場(QDII): 美股三大指數、投資區域主要指數、人民幣匯率、美聯儲政策 搜尋:"美股行情"、"{投資區域}市場行情"、"人民幣匯率走勢"


附錄C:異常處理與容錯機制

網路異常

異常 處理 使用者提示
請求超時 等3秒重試1次 "網路請求中,請稍候..."
重試仍失敗 跳過,標記"資料獲取失敗" "[警告] [資料項] 獲取失敗"
連續3項失敗 終止任務 "[錯誤] 網路連線異常,請檢查網路後重試"

備用資料來源: 搜狐基金 q.fund.sohu.com/{程式碼}/ → 新浪財經 finance.sina.com.cn/fund/{程式碼}.html → WebSearch "{名稱} 最新淨值"

資料異常

異常 判斷 處理
淨值日期過期 < 上一個交易日 標記"資料未更新"
漲跌幅異常 > ±10% 標記"異常波動"
淨值為0/負 NAV ≤ 0 跳過該基金
規模資料缺失 無法獲取 標記"無法評估"

輸入格式容錯

輸入 識別 處理
003429 / 003429基金 / 幫我看看003429 基金程式碼 正則提取6位數字
中證興業信用債 / 易方達藍籌 基金名稱/簡稱 WebSearch搜尋全稱和程式碼
130,096.47元 / 13萬元 / 800萬 金額 解析為數字

限流與超時

  • 連續WebFetch請求間隔 ≥ 2秒
  • 單隻基金最多3次請求
  • 超過5只基金分批處理(每批3-5只)
  • 403/429響應 → 等10秒重試 → 切換備用源 → 提示"資料來源暫時不可用"

錯誤提示彙總

場景 提示 操作
網路斷開 "[錯誤] 網路連線失敗" 使用者檢查網路
天天基金不可用 "[警告] 正在嘗試其他資料來源..." 自動切換
基金程式碼不存在 "[錯誤] 未找到基金 {程式碼}" 使用者核實
淨值未更新 "[提示] 最新淨值日期為 {日期}" 等待T+1

附錄D:注意事項

  1. 資料時效性:所有淨值必須為最新交易日資料
  2. 計算準確性:收益計算精確到小數點後2位
  3. 風險客觀性:基於客觀資料判斷,不主觀臆斷
  4. 建議謹慎性:提示使用者結合自身情況判斷
  5. 語言一致性:輸出語言與使用者輸入一致
  6. 非交易日處理:繼續執行,報告頂部 ⏰ 提示

附錄E:輸入格式速查

格式 說明 示例
基金名稱或程式碼 模式A 幫我分析 003429
多隻基金 + 對比關鍵詞 模式B 對比 003429 和 004322
基金名 | 程式碼 | 金額 模式C 基金名 \| 003429 \| 130,000
基金名 | 程式碼 | 金額 + 時間 模式D 基金名 \| 003429 \| 130,000 + 過去一年
股票名稱或程式碼 股票模式 幫我分析 寧德時代
多隻股票 + 對比 股票對比 對比 貴州茅臺 和 五糧液
分鐘K線 K線模式 檢視寧德時代5分鐘K線
板塊行情 板塊模式 檢視半導體板塊行情

股票分析模組

基於同花順資料介面的高階股票分析功能,與基金分析無縫銜接

推薦用法:stock_api.py 封裝

優先使用 scripts/stock_api.py 中的 StockAPI,它封裝了 thsdk 的常用操作,提供與 fund_api.py 一致的介面風格(自動程式碼解析、錯誤處理、批次查詢):

from stock_api import StockAPI

with StockAPI() as api:
    # 所有方法都支援直接傳入中文名稱,自動解析為 THSCODE
    quote = api.get_realtime_quote("寧德時代")       # 即時行情
    klines = api.get_klines("寧德時代", "5m", count=78)  # K線
    depth = api.get_depth("寧德時代")                  # 五檔盤口
    block = api.get_block_market_data("半導體")         # 板塊行情
    stocks = api.wencai_select("連續3日主力淨流入")    # 問財選股
    comparison = api.compare_stocks(["貴州茅臺", "五糧液"])  # 多股對比

以下文件展示 thsdk 底層介面的詳細用法,供需要直接呼叫 thsdk 或 stock_api.py 未覆蓋的場景使用。

快速開始

它能做什麼?

模式 場景 一句話說明
E 查一隻股票 輸入股票名稱或程式碼,檢視即時行情、K線走勢、資金流向
F 對比多隻股票 2-3只股票橫向PK,含漲跌對比、相關性分析
G 分鐘K線分析 檢視1m/5m/15m/30m/60m/120m多週期K線,疊加均線、標註異動
H 板塊行情 檢視申萬行業/概念板塊漲跌排名、成分股、領漲股
I 盤口與大單 五檔盤口深度、大單流向、集合競價異動掃描
J 智慧選股 問財自然語言選股:財務指標、技術形態、資金流向等

怎麼觸發?

幫我分析 寧德時代                           → 模式E(單股票)
幫我比較 貴州茅臺 和 五糧液                  → 模式F(對比)
檢視寧德時代5分鐘K線                         → 模式G(K線)
檢視半導體板塊行情                           → 模式H(板塊)
檢視寧德時代盤口和大單                       → 模式I(盤口)
幫我選一些ROE大於15%的股票                   → 模式J(選股)

模式自動識別規則: - 含"對比/比較/vs/哪個好" → 模式F - 含"分鐘/K線/走勢/分時" → 模式G - 含"板塊/行業/概念/成分股" → 模式H - 含"盤口/大單/資金/競價" → 模式I - 含"選股/篩選/找/選" → 模式J - 其餘 → 模式E


程式碼解析

所有中文名/縮寫/短程式碼先用 search_symbols 獲得完整 THSCODE:

from thsdk import THS

with THS() as ths:
    resp = ths.search_symbols("寧德時代")
    # data → [
    #   {'THSCODE': 'USZA300750', 'Name': '寧德時代',
    #    'MarketStr': 'USZA', 'Code': '300750', 'MarketDisplay': '深A'},
    # ]

選碼規則:

情況 處理
0條 告知未找到
1條 直接使用
多條,只有1只A股 自動選A股
多條,多隻A股 展示列表,等使用者選擇

市場字首:

字首 含義 字首 含義
USHA 上海A股 USHI 上海指數
USZA 深圳A股 USZI 深圳指數
USTM 北交所 UHKG 港股
URFI 行業/概念板塊 UFXB 外匯

常用指數 THSCODE:

指數 THSCODE 指數 THSCODE
上證指數 USHI000001 滬深300 USHI000300
深證成指 USZI399001 中證500 USHI000905
創業板指 USZI399006 上證50 USHI000016
科創50 USHI000688

模式E:單股票分析

E1 即時行情

with THS() as ths:
    resp = ths.market_data_cn("USZA300750", "基礎資料")
    df = resp.df
    # 欄位:價格, 成交方向, 成交量, 交易筆數, 總金額,
    #       漲速, 當前量, 程式碼, 名稱, 昨收價, 開盤價, 最高價, 最低價

query_key 選項:

query_key 含義
"基礎資料" 價格、漲跌幅、成交量、金額、開高低、漲速
"擴充套件1" 漲幅、漲跌、換手率、量比、主力淨流入、委比
"彙總" 全量欄位,多股對比首選

E2 K線資料

from datetime import datetime
from zoneinfo import ZoneInfo
tz = ZoneInfo('Asia/Shanghai')

with THS() as ths:
    # 按條數
    resp = ths.klines("USZA300750", interval="5m", count=78)

    # 按時間範圍
    resp = ths.klines("USZA300750", interval="day",
                      start_time=datetime(2025, 1, 1, tzinfo=tz),
                      end_time=datetime(2025, 3, 1, tzinfo=tz))

    df = resp.df
    # 欄位:時間, 收盤價, 成交量, 總金額, 開盤價, 最高價, 最低價

interval 引數: "1m" / "5m" / "15m" / "30m" / "60m" / "120m" / "day" / "week" / "month"

E3 分時與盤口

with THS() as ths:
    # 日內分時
    resp = ths.intraday_data("USZA300750")
    df = resp.df

    # 五檔盤口
    resp = ths.depth("USZA300750")
    df = resp.df

模式F:多股票對比

import pandas as pd
from thsdk import THS

stock_names = ["貴州茅臺", "五糧液", "瀘州老窖"]

with THS() as ths:
    # 批次解析程式碼
    stock_codes = []
    for name in stock_names:
        resp = ths.search_symbols(name)
        a_shares = [s for s in resp.data
                    if any(m in s.get('MarketDisplay', '') for m in ['滬A', '深A'])]
        if a_shares:
            stock_codes.append({'name': name, 'code': a_shares[0]['THSCODE']})

    # 批次行情
    codes = [s['code'] for s in stock_codes]
    resp = ths.market_data_cn(codes, "彙總")
    quote_df = pd.DataFrame(resp.data)

    # 批次K線
    klines_data = {}
    for s in stock_codes:
        resp = ths.klines(s['code'], interval="day", count=30, adjust="forward")
        klines_data[s['name']] = resp.df

輸出規範: 1. 表格:股票 / 最新價 / 漲幅% / 成交額 / 換手率 / 量比 / 主力淨流入 / 總市值 2. 歸一化走勢折線圖(多線,顏色區分) 3. 相關性熱力圖(量化場景)


模式G:分鐘K線分析

with THS() as ths:
    resp = ths.klines("USZA300750", interval="5m", count=78)

df = resp.df
# 計算指標
df['ma5'] = df['收盤價'].rolling(5).mean()
df['ma10'] = df['收盤價'].rolling(10).mean()
df['vol_avg'] = df['成交量'].rolling(20).mean()
df['vol_spike'] = df['成交量'] > df['vol_avg'] * 2  # 成交量異動

輸出: K線圖 + 成交量柱狀圖 + 均線疊加 + 異動標註


模式H:板塊行情

行業/概念板塊列表

with THS() as ths:
    resp = ths.ths_industry()  # 同花順行業,約90個
    resp = ths.ths_concept()   # 概念板塊,約390個
    df = resp.df

板塊行情

with THS() as ths:
    # Step 1:獲取板塊列表
    resp = ths.ths_industry()
    target = next(r for r in resp.data if '半導體' in r['名稱'])
    link_code = target['程式碼']  # 格式 URFIXXXXXX

    # Step 2:查板塊行情
    resp = ths.market_data_block(link_code, "基礎資料")
    df = resp.df
    # 欄位:價格, 漲幅, 成交量, 板塊總市值, 上漲家數, 下跌家數, 領漲股

板塊成分股

with THS() as ths:
    resp = ths.block_constituents("URFI883404")
    df = resp.df

指數行情

with THS() as ths:
    resp = ths.market_data_index(["USHI000001", "USHI000300"])
    df = resp.df

⚠️ 遊客模式限制:遊客賬戶下 market_data_index 可能返回空資料(許可權限制)。如需指數行情,建議使用 WebSearch 搜尋"{指數名稱} 今日行情"作為降級方案。stock_api.pyget_index_data() 方法已內建此提示。


模式I:盤口與大單

大單流向

with THS() as ths:
    resp = ths.big_order_flow("USZA300750")
    df = resp.df
    # 欄位:時間, 成交方向, 成交量, 總金額, 委託買入價, 委託賣出價

集合競價異動(9:15~9:25)

with THS() as ths:
    resp_sh = ths.call_auction_anomaly("USHA")  # 滬市
    resp_sz = ths.call_auction_anomaly("USZA")  # 深市
    df = resp_sh.df
    # 異動型別:漲停試盤/競價搶籌/大幅高開/急速上漲/大買單試盤 等13種

買賣深度詳情

with THS() as ths:
    resp = ths.order_book_bid("USZA300750")  # 買方深度
    resp = ths.order_book_ask("USZA300750")  # 賣方深度
    df = resp.df

模式J:問財智慧選股

with THS() as ths:
    resp = ths.wencai_nlp("連續3日主力淨流入,換手率大於5%,非ST")
    df = resp.df

選股場景速查:

場景 查詢語句示例
漲停/連板 "今日漲停,非ST" / "連續2日漲停,非一字板"
財務選股 "連續3年ROE大於15%,非ST" / "市盈率小於15,股息率大於3%"
技術形態 "均線多頭排列,MACD金叉" / "250日新高,非ST"
資金流向 "主力淨流入由大到小排名前20" / "近10日主力資金流向大於5000萬"
板塊概念 "人工智慧概念股,今日漲跌幅" / "今日概念板塊漲幅排名前20"
複合條件 "均線多頭+MACD金叉+換手率大於1%且小於10%"

多市場支援

市場 方法 示例
A股 market_data_cn(code) market_data_cn("USZA300750")
港股 market_data_hk(code) market_data_hk("UHKG00700")
美股 market_data_us(code) market_data_us("UNQQAAPL")
外匯 market_data_forex(code) market_data_forex("UFXBGBPUSD")
期貨 market_data_future(code) market_data_future("UCFSAU2506")

安裝與連線

pip install --upgrade thsdk
from thsdk import THS

with THS() as ths:  # 遊客模式,無需賬戶配置
    ...

錯誤處理

with THS() as ths:
    resp = ths.klines("USZA300750", interval="5m", count=60)
    if not resp:
        print(f"呼叫失敗: {resp.error}")
    elif resp.df.empty:
        print("資料為空,可能是非交易時間")
    else:
        df = resp.df

常見報錯:

錯誤 原因 解決
"未登入" 未 connect 確保用 with THS() as ths
"證券程式碼必須為10個字元" 格式錯誤 先過 search_symbols
"一次性查詢多支股票必須市場程式碼相同" 滬深混合 按市場分組查詢
"無效的週期型別: 5min" interval 寫法錯 改為 "5m"

注意事項: - 遊客賬戶在部分專業資料/即時資料上可能有許可權限制 - 批次拉取時建議加 time.sleep(0.5) 避免限流 - THS 為同步阻塞,在 FastAPI/asyncio 中需放入執行緒池

🤖 AI 評測

這個Skill質量不錯,功能覆蓋全面,基金和股票分析都能做。文件規範做得好,報告輸出格式統一,配色清晰,閱讀體驗好。容錯考慮周全,資料獲取失敗有降級方案。不足是文件比較長,功能說明較複雜,複雜功能對新手不太友好。總體推薦,適合需要基金/股票分析的使用者使用。

📊 多維度評分

適應性4.7
規範性4.9
有效性4.7
可靠性4.7
可信度5

📁 包含檔案 (3 個)

📄 SKILL.md 64 KB
📄 scripts/fund_api.py 34.4 KB
📄 scripts/stock_api.py 17.3 KB