name: ths-advanced-analysis description: 基於 thsdk 進行高階股票分析:分鐘K線(1m/5m/15m/30m/60m/120m)、板塊/指數行情(主要指數/申萬行業/概念板塊成分股)、多股票批次對比(表格+歸一化走勢圖+相關性熱力圖)、盤口深度、大單流向、集合競價異動、日內分時、歷史分時。當用戶提到"分鐘K線"、"日內走勢"、"盤口"、"大單"、"競價異動"、"板塊行情"、"行業排名"、"概念板塊"、"成分股"、"對比多隻股票"、"批次分析"、"漲幅對比"、"相關性"、"港股"、"美股"、"外匯"、"期貨"、"資訊"、"快訊",或者需要同時檢視2只以上股票、關注短線交易、量化研究時,必須使用此skill。
| 使用者說 | 可能的意圖 | 必問 |
|---|---|---|
| "幫我看看XX股票" | 即時行情?K線?大單? | ✅ |
| "分析一下XX" | 技術面?資金面?和誰對比? | ✅ |
| "XX板塊怎麼樣" | 整體漲跌?成分股?領漲股? | ✅ |
| "選一些好股票" | 短線?價值?哪個行業?條件? | ✅ |
| "XX的5分鐘K線" | 意圖明確 | ❌ 直接執行 |
| "今日漲停股" | 意圖明確 | ❌ 直接執行 |
話術示例:
使用者:"幫我分析一下寧德時代"
Claude:"好的,請問你主要想看哪個方向?
1. 今日即時行情 + 資金流向
2. 分鐘K線(盤中走勢)
3. 近期日K線趨勢
4. 和比亞迪、億緯鋰能等對比
5. 用問財篩選相關概念股"
| 場景 | 提示 |
|---|---|
| 展示行業排名 | "需要查某個行業的成分股行情嗎?" |
| 展示分鐘K線 | "需要同時看大單流向或盤口深度嗎?" |
| 展示多股對比表格 | "需要展示歸一化走勢圖或相關性嗎?" |
| 問財選出候選股 | "需要對這些股票做K線技術驗證嗎?" |
| 展示競價異動 | "需要對某隻異動股拉盤前分時看細節嗎?" |
| 檔案 | 場景 |
|---|---|
examples/01_minute_kline.py |
分鐘K線 + 均線 + 成交量異動標註 |
examples/02_sector_industry.py |
行業排名 + 概念板塊成分股 + 指數行情 |
examples/03_multi_stock_compare.py |
多股批次對比:表格 + 歸一化走勢 + 相關性 |
examples/04_bigorder_auction.py |
大單流向 + 競價異動掃描 + 分時/盤口 + 資訊 |
examples/05_wencai_nlp.py |
問財NLP:選股/行情/財務/技術/複雜組合 |
| 使用者需求 | 方法 |
|---|---|
| 今日漲停/連板/競價強勢股 | wencai_nlp("今日漲停,非ST") |
| 財務選股(ROE/PE/PB) | wencai_nlp("連續3年ROE大於15%,非ST") |
| 技術形態選股 | wencai_nlp("均線多頭排列,MACD金叉") |
| 分鐘K線 | klines(code, interval="5m", count=78) |
| 今日分時 | intraday_data(code) |
| 歷史某日分時 | min_snapshot(code, date="20250101") |
| 五檔盤口 | depth(code) |
| 買方/賣方深度詳情 | order_book_bid(code) / order_book_ask(code) |
| 大單流向 | big_order_flow(code) |
| 競價異動掃描 | call_auction_anomaly("USHA") |
| 申萬行業列表 | ths_industry() |
| 概念板塊列表 | ths_concept() |
| 板塊行情(漲幅/市值) | market_data_block(link_code) |
| 板塊成分股 | block_constituents(link_code) |
| 指數行情 | market_data_index(ths_code) |
| 多股票對比 | 批次 market_data_cn + klines |
| 港股行情 | market_data_hk(code) |
| 美股行情 | market_data_us(code) |
| 外匯匯率 | market_data_forex(code) |
| 期貨行情 | market_data_future(code) |
| 即時資訊/快訊 | news() |
| 權息資料 | corporate_action(code) |
| 今日IPO / 待申購 | ipo_today() / ipo_wait() |
pip install --upgrade thsdk
包來源:PyPI 系統要求:Python 3.9+,支援 Linux(x86_64/arm64)、macOS(Intel/Apple Silicon)、Windows
from thsdk import THS
with THS() as ths: # 遊客模式,無需賬戶配置
...
所有中文名/縮寫/短程式碼先用 search_symbols 獲得完整 THSCODE:
with THS() as ths:
resp = ths.search_symbols("同花順")
# data → [
# {'THSCODE': 'USZA300033', 'Name': '同花順',
# 'MarketStr': 'USZA', 'Code': '300033', 'MarketDisplay': '深A'},
# {'THSCODE': 'URFI883404', 'Name': '同花順情緒指數', 'MarketDisplay': '同指'},
# ]
選碼規則:
| 情況 | 處理 |
|---|---|
| 0條 | 告知未找到 |
| 1條 | 直接使用 |
| 多條,只有1只A股(MarketDisplay含"滬A"或"深A") | 自動選A股 |
| 多條,多隻A股 | 展示列表,等使用者選擇 |
市場字首說明:
| 字首 | 含義 |
|---|---|
USHA |
上海A股 |
USZA |
深圳A股 |
USHI |
上海指數 |
USZI |
深圳指數 |
USTM |
北交所 |
UHKG |
港股 |
URFI |
行業/概念板塊 |
UFXB |
外匯(基本匯率) |
常用指數 THSCODE(直接使用,無需 search_symbols):
| 指數 | THSCODE |
|---|---|
| 上證指數 | USHI000001 |
| 深證成指 | USZI399001 |
| 創業板指 | USZI399006 |
| 科創50 | USHI000688 |
| 滬深300 | USHI000300 |
| 中證500 | USHI000905 |
| 上證50 | USHI000016 |
⚠️ 指數字首是
USHI/USZI,需呼叫market_data_index,不能用market_data_cn
interval 引數: "1m" / "5m" / "15m" / "30m" / "60m" / "120m" / "day" / "week" / "month" / "quarter" / "year"
⚠️ 必須寫
"5m",不能寫"5min"
count 與 start/end 二選一,不可混用:
from datetime import datetime
from zoneinfo import ZoneInfo
tz = ZoneInfo('Asia/Shanghai')
with THS() as ths:
# 按條數
resp = ths.klines("USZA300033", interval="5m", count=78)
# 按時間範圍
resp = ths.klines("USZA300033", interval="day",
start_time=datetime(2025, 1, 1, tzinfo=tz),
end_time=datetime(2025, 3, 1, tzinfo=tz))
# 前復權(量化回測用)
resp = ths.klines("USHA600519", interval="day", count=250, adjust="forward")
df = resp.df
# 返回欄位:時間, 收盤價, 成交量, 總金額, 開盤價, 最高價, 最低價
# 分鐘K線"時間"自動轉為 datetime;日K"時間"為 datetime(YYYYMMDD)
with THS() as ths:
resp = ths.intraday_data("USZA300033")
df = resp.df
# 欄位:時間(datetime+tz), 價格, 成交量, 總金額, 領先指標
with THS() as ths:
resp = ths.min_snapshot("USZA300033", date="20240315")
df = resp.df
# 欄位:時間(timestamp), 價格, 成交量, 外盤成交量, 內盤成交量, 總金額
with THS() as ths:
resp = ths.depth("USZA300033") # 單隻
resp = ths.depth(["USZA300033", "USHA600519"]) # 多隻
df = resp.df
# 欄位:買1~5價/量, 賣1~5價/量, 程式碼, 昨收價
小蔥技能7w4.net持續更新中。
with THS() as ths:
resp = ths.order_book_bid("USZA300033") # 買方深度
resp = ths.order_book_ask("USZA300033") # 賣方深度
df = resp.df
with THS() as ths:
resp = ths.tick_level1("USZA300033")
df = resp.df
# 欄位:時間(timestamp), 價格, 成交方向, 交易筆數, 當前量
with THS() as ths:
resp = ths.tick_super_level1("USZA300033") # 即時
resp = ths.tick_super_level1("USZA300033", date="20240315") # 歷史
df = resp.df
# ⚠️ 部分欄位值為 4294967295 表示無效資料,需過濾
with THS() as ths:
resp = ths.big_order_flow("USZA300033")
df = resp.df
# 欄位:時間, 成交方向, 成交量, 總金額, 委託買入價, 委託賣出價
with THS() as ths:
resp_sh = ths.call_auction_anomaly("USHA") # 滬市
resp_sz = ths.call_auction_anomaly("USZA") # 深市
df = resp_sh.df
# 欄位:時間, 價格, 總金額, 程式碼, 名稱, 異動型別1(已對映中文)
# 異動型別:漲停試盤/競價搶籌/大幅高開/急速上漲/大買單試盤 等13種
with THS() as ths:
resp = ths.call_auction("USZA300033")
df = resp.df
# 欄位:時間, 成交方向, 成交量, 總金額, 委託買入價, 委託賣出價
with THS() as ths:
resp = ths.ths_industry() # 同花順行業,約90個
resp = ths.ths_concept() # 概念板塊,約390個
df = resp.df
# ⚠️ 僅返回:程式碼(URFIXXXXXX), 名稱
# 漲幅/行情需另調 market_data_block(link_code)
# extra['total_count'] = 板塊總數
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
# 欄位:價格, 漲幅, 成交量, 板塊總市值, 板塊流通市值,
# 上漲家數, 下跌家數, 領漲股
# query_key 也支援 "擴充套件"(含板塊漲速、主力淨流入等)
with THS() as ths:
resp = ths.block_constituents("URFI883404")
df = resp.df
# 欄位:程式碼(完整THSCODE), 名稱
# extra['total_count'] = 成分股總數
with THS() as ths:
# 全部指數列表(約580個)
resp = ths.index_list()
df = resp.df # 欄位:程式碼, 名稱
# 指數行情(單隻或同市場批次)
resp = ths.market_data_index("USHI000001")
resp = ths.market_data_index(["USHI000001", "USHI000300", "USHI000905"])
df = resp.df
# 欄位:價格, 漲幅, 漲跌, 成交量, 總金額, 最高價, 最低價
# query_key 也支援 "擴充套件"(含量比、振幅等)
with THS() as ths:
resp = ths.market_data_cn("USZA300033", "基礎資料")
# 也支援列表(同市場)
resp = ths.market_data_cn(["USZA300033", "USZA000001"], "彙總")
df = resp.df
# 基礎資料欄位:價格, 成交方向, 成交量, 交易筆數, 總金額,
# 漲速, 當前量, 程式碼, 名稱, 昨收價, 開盤價, 最高價, 最低價
query_key 選項:
| query_key | 含義 |
|---|---|
"基礎資料" |
價格、漲跌幅、成交量、金額、開高低、漲速 |
"基礎資料2" |
精簡版基礎資料 |
"基礎資料3" |
極簡(價格、昨收、成交量) |
"擴充套件1" |
漲幅、漲跌、換手率、量比、主力淨流入、委比 |
"擴充套件2" |
漲幅、換手率、總市值、流通市值、委比 |
"彙總" |
全量欄位,多股對比首選 |
⚠️ 同市場限制:USHA 和 USZA 不能在同一次呼叫中混合
with THS() as ths:
# 港股列表
resp = ths.stock_hk_lists()
# 港股行情
resp = ths.market_data_hk("UHKG00700", "基礎資料")
df = resp.df
# query_key 支援:"基礎資料" / "每股淨資產" / "淨利潤" / "財務指標"
with THS() as ths:
resp = ths.stock_us_lists() # 美股列表
resp = ths.nasdaq_lists() # 納斯達克列表
resp = ths.market_data_us("UNQQAAPL", "基礎資料")
df = resp.df
# query_key 支援:"基礎資料" / "每股淨資產" / "每股收益" / "淨利潤" / "財務指標"
with THS() as ths:
resp = ths.forex_list() # 外匯列表(約25個,UFXB字首)
resp = ths.market_data_forex("UFXBGBPUSD", "基礎資料")
df = resp.df
# 欄位:價格, 委託買入價, 委託賣出價, 程式碼, 名稱, 昨收價, 開盤價, 最高價, 最低價
# query_key 也支援 "擴充套件"
with THS() as ths:
resp = ths.futures_lists() # 主力合約列表
resp = ths.market_data_future("UCFSAU2506", "基礎資料")
df = resp.df
# query_key 支援:"基礎資料" / "日增倉" / "擴充套件"
with THS() as ths:
resp = ths.bond_lists() # 可轉債列表
resp = ths.fund_etf_lists() # ETF基金列表
resp = ths.fund_etf_t0_lists() # ETF T+0基金列表
resp = ths.market_data_bond("USHD123456", "基礎資料")
resp = ths.market_data_fund("USHA510300", "基礎資料")
import pandas as pd
from collections import defaultdict
from thsdk import THS
stock_names = ["貴州茅臺", "五糧液", "瀘州老窖"]
with THS() as ths:
# Step 1: 批次解析程式碼
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']})
# Step 2: 按市場分組
by_market = defaultdict(list)
for s in stock_codes:
by_market[s['code'][:4]].append(s)
# Step 3: 批次行情
rows = []
for market, stocks in by_market.items():
codes = [s['code'] for s in stocks]
resp = ths.market_data_cn(codes, "彙總")
for i, row in enumerate(resp.data):
row['股票名稱'] = stocks[i]['name']
rows.append(row)
quote_df = pd.DataFrame(rows)
# Step 4: 批次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
# Step 5: 歸一化走勢(起點=100)
for name, df in klines_data.items():
df['歸一化'] = df['收盤價'] / df['收盤價'].iloc[0] * 100
# Step 6: 相關性矩陣
returns = pd.DataFrame({name: df['收盤價'].pct_change() for name, df in klines_data.items()})
corr_matrix = returns.corr()
輸出規範: 1. 表格:股票 / 最新價 / 漲幅% / 成交額 / 換手率 / 量比 / 主力淨流入 / 總市值 2. 歸一化走勢折線圖(多線,顏色區分) 3. 相關性熱力圖(量化場景)
對接 iwencai.com 同一介面,多條件用逗號/分號分隔。
with THS() as ths:
resp = ths.wencai_nlp("連續3日主力淨流入,換手率大於5%,非ST")
df = resp.df
# ⚠️ 股票程式碼格式為 "605366.SH",需轉換
返回程式碼轉換:
def to_ths_code(code_str: str) -> str:
# wencai 返回:'300033.SZ' / '600519.SH' / '835975.BJ'
try:
code, market = str(code_str).split('.')
mapping = {'SH': 'USHA', 'SZ': 'USZA', 'BJ': 'USTM'}
prefix = mapping.get(market.upper(), '')
return f"{prefix}{code}" if prefix else None
except Exception:
return None
df['ths_code'] = df['股票程式碼'].apply(to_ths_code)
六大查詢型別:
① 行情 & 盤面
"今日漲停,非ST"
"連續2日漲停,非一字板,非ST"
"今日漲停原因類別,漲停封單額,封單量"
"競價漲幅大於3%,競價量大於昨日成交量5%,非ST"
"主力淨流入由大到小排名前20,非ST"
"近10日區間主力資金流向大於5000萬,市值大於100億"
② 板塊 & 行業
"今日申萬行業漲跌幅排名"
"今日概念板塊漲幅排名前20"
"人工智慧概念股,今日漲跌幅,成交額,主力淨流入"
"今日漲幅最大的5個概念板塊,漲幅,成分股數量"
③ 財務指標
"連續3年ROE大於15%,非ST,上市大於3年"
"市盈率小於15,股息率大於3%,市淨率小於2,非ST"
"市淨率小於1,非ST,流通市值大於20億"
"連續5年分紅,股息率大於4%,資產負債率小於60%"
④ 技術形態
"均線多頭排列,MACD金叉,換手率大於3%,非ST"
"均線粘合,平臺突破,成交量大於5日均量1.5倍"
"仙人指路,非ST,非停牌"
"250日新高,非ST,滬深A,上市超過250天"
⑤ 複雜組合
# 短線強勢
"均線多頭排列,MACD金叉,DIFF上穿中軸,換手率大於1%且小於10%,30日內有2個交易日漲幅大於4%,非ST"
# 競價打板
"昨日非一字板漲停,今日競價漲幅大於等於0%且小於等於9.9%,今日隔夜買單額小於10億,非ST,非科創板"
⑥ 資訊查詢
"漲停原因歸類前20"
"今日龍虎榜"
"今日大宗交易"
"近一週北向資金淨買入前20"
| 方法 | 用途 |
|---|---|
wencai_nlp(condition) |
主要用法。完整自然語言,返回股票列表+欄位 |
wencai_base(condition) |
簡單欄位查詢,如 "所屬行業" |
import re
with THS() as ths:
resp = ths.news() # 預設:上證指數相關快訊
# 指定個股資訊:
# resp = ths.news(text_id=0x3814, code="300033", market="USZA")
for item in resp.data:
props = dict(re.findall(r'(\w+)=([^\n]+)', item.get('Properties', '')))
print(f"[{props.get('source','')}] {item['Title']}")
print(f" {props.get('summ','')}\n")
# 欄位:Op, Time(timestamp), Title, ID, Code, Stock, Properties
# Properties 含:ctime, summ(摘要), source(來源)
with THS() as ths:
resp = ths.corporate_action("USZA300033")
df = resp.df
# 欄位:時間(int YYYYMMDD), 權息資料(文字)
# 示例:20100312 → "2010-03-12(每十股 轉增10.00股 紅利3.00元)$"
with THS() as ths:
resp = ths.ipo_today() # 今日申購/上市
resp = ths.ipo_wait() # 待申購
df = resp.df
# 欄位:stock_name, stock_code, order_date, issue_price,
# issue_pe_static, success_rate, order_limit_up,
# industry_name, exchange 等
with THS() as ths:
resp = ths.stock_cn_lists() # 全部A股(約5198只)
resp = ths.stock_hk_lists() # 港股
resp = ths.stock_us_lists() # 美股
resp = ths.stock_bj_lists() # 北交所
resp = ths.nasdaq_lists() # 納斯達克
resp = ths.stock_b_lists() # B股
resp = ths.bond_lists() # 可轉債
resp = ths.fund_etf_lists() # ETF基金
resp = ths.fund_etf_t0_lists() # ETF T+0基金
resp = ths.futures_lists() # 期貨主力合約
resp = ths.forex_list() # 外匯(約25個)
df = resp.df # 欄位:程式碼(完整THSCODE), 名稱
with THS() as ths:
resp = ths.complete_ths_code("USZA300033")
# 用於驗證/補全程式碼資訊
with THS() as ths:
resp = ths.klines("USZA300033", 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" |
"'count' 引數不能與 'start_time' 同時使用" |
引數衝突 | 二選一 |
注意事項:
- 遊客賬戶在部分專業資料/即時資料上可能有許可權限制
- 批次拉取時建議加 time.sleep(0.5) 避免限流
- THS 為同步阻塞,在 FastAPI/asyncio 中需放入執行緒池
| 場景 | skill |
|---|---|
| 單隻A股行情/資金流向/日K | ths-financial-data |
| 分鐘K線 / 盤中監控 | 本 skill |
| 盤口深度 / 大單 / 競價異動 | 本 skill |
| 板塊/指數行情及成分股 | 本 skill |
| 多股票批次對比 | 本 skill |
| 港股/美股/外匯/期貨行情 | 本 skill |
| 即時資訊快訊 | 本 skill |
| 問財自然語言查詢 | 兩者均可 |
這個 Skill 質量很好,專業度高、覆蓋全面,能滿足股票行情分析、板塊監控、選股篩選、大單追蹤等多種需求。文件清晰詳細,配有多個完整示例,容易上手。主要不足是內容量較大初次閱讀需要一定時間消化,且更適合有一定金融分析基礎的使用者,新手可能需要額外學習成本。總體推薦。