jpskill.com
📦 その他 コミュニティ

ths-advanced-analysis

株価の分足K線、板情報、大口注文の動向、集合競売の異常値、日中分足、歴史分足、主要指数や業界・概念セクターの動向、複数銘柄の比較分析など、高度な株式分析を行うためのSkillです。

📜 元の英語説明(参考)

基于 thsdk 进行高级股票分析:分钟K线(1m/5m/15m/30m/60m/120m)、板块/指数行情(主要指数/申万行业/概念板块成分股)、多股票批量对比(表格+归一化走势图+相关性热力图)、盘口深度、大单流向、集合竞价异动、日内分时、历史分时。当用户提到"分钟K线"、"日内走势"、"盘口"、"大单"、"竞价异动"、"板块行情"、"行业排名"、"概念板块"、"成分股"、"对比多只股票"、"批量分析"、"涨幅对比"、"相关性",或者需要同时查看2只以上股票、关注短线交易、量化研究时,必须使用此skill。

🇯🇵 日本人クリエイター向け解説

一言でいうと

株価の分足K線、板情報、大口注文の動向、集合競売の異常値、日中分足、歴史分足、主要指数や業界・概念セクターの動向、複数銘柄の比較分析など、高度な株式分析を行うためのSkillです。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o ths-advanced-analysis.zip https://jpskill.com/download/5483.zip && unzip -o ths-advanced-analysis.zip && rm ths-advanced-analysis.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5483.zip -OutFile "$d\ths-advanced-analysis.zip"; Expand-Archive "$d\ths-advanced-analysis.zip" -DestinationPath $d -Force; ri "$d\ths-advanced-analysis.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して ths-advanced-analysis.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → ths-advanced-analysis フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[スキル名] ths-advanced-analysis

THS 高度分析スキル

対話ガイドライン

意図の明確化(意図が不明確な場合は必ず質問)

ユーザーの入力はしばしば不正確です。呼び出し前に意図を判断し、推測して直接実行しないでください

ユーザーの発言 考えられる意図 必須の質問
「XX株を見てほしい」 リアルタイム相場?Kラインの推移?大口注文?
「XXを分析してほしい」 テクニカル面?資金面?誰と比較?
「XXセクターはどうですか」 セクター全体の騰落?構成銘柄?上昇を牽引する銘柄?
「良い株を選んでほしい」 短期?価値?どの業界?条件?
「XXの5分足Kライン」 意図が明確 ❌ 直接実行
「今日のストップ高銘柄」 意図が明確 ❌ 直接実行

明確化の会話例:

ユーザー:「寧徳時代を分析してほしい」
Claude:「承知いたしました。主にどの方向をご覧になりたいですか?
  1. 今日のリアルタイム相場 + 資金フロー
  2. 分足Kライン(取引中の推移)
  3. 最近の日足Kラインのトレンド
  4. 比亜迪、億緯鋰能などとの比較
  5. 問財で関連コンセプト株をスクリーニング」

呼び出し後の追加ヒント(拡張価値がある場合のみ提示)

毎回機械的に「XYZもできます」と列挙しないでください。以下の状況でのみ自然に提示してください。

シナリオ 適切な追加ヒント
業界ランキングを表示した場合 「特定の業界の構成銘柄の相場を調べますか?」
分足Kラインを表示した場合 「同時に大口注文のフローや板の厚さもご覧になりますか?」
複数銘柄比較表を表示した場合 「正規化された推移グラフや相関関係を表示しますか?」
問財が候補銘柄を選出した場合 「これらの銘柄についてKラインのテクニカル検証を行いますか?」
寄り付きの異常変動を表示した場合 「特定の異常変動銘柄について、寄り付き前の分足で詳細をご覧になりますか?」

完全な呼び出し例(直接実行可能)

examples/ ディレクトリに、4つのエンドツーエンドのシナリオが詳しく記載されています。

ファイル シナリオ
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:銘柄選択/相場/財務/テクニカル/複雑な組み合わせ + Kラインとの併用

シナリオ早見表

ユーザーの要求 使用方法
今日のストップ高/連続ストップ高/寄り付きで強い銘柄 wencai_nlp("今日涨停,非ST")
財務指標による銘柄選択(ROE/PE/PB) wencai_nlp("连续3年ROE大于15%,非ST")
テクニカルパターンによる銘柄選択(MACDゴールデンクロス) wencai_nlp("均线多头排列,MACD金叉")
複雑な複合条件による銘柄選択 wencai_nlp("...多条件...") 例5を参照
寧徳時代5分足Kライン klines(code, interval="5m", count=78)
茅台今日の分足チャート intraday_data(code)
過去の特定日の分足 min_snapshot(code, date="20250101")
板の買い売り5段階 depth(code) または tick_level1(code)
大口注文フロー big_order_flow(code)
今日の寄り付き異常変動 call_auction_anomaly(market)
申万業界リスト ths_industry()
コンセプトセクターリスト ths_concept()
セクター構成銘柄 block_constituents(link_code)
指数相場 market_data_index(ths_code)
複数銘柄比較 一括 market_data_cn + klines
権利・配当情報/権利落ち corporate_action(code)
今日のIPO ipo_today()

ステップゼロ:インストール

pip install --upgrade thsdk

パッケージソース:PyPI


接続

すべての呼び出しは統一してゲストモードを使用し、アカウント設定は不要です。

from thsdk import THS

with THS() as ths:
    ...

ステップ1:証券コードの解析

すべての中国語名/略称/短縮コードは、まず search_symbols を使用して完全な ths_code を取得します。

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

コード選択ルール:

状況 処理
0件の結果 ユーザーに「見つかりませんでした」と通知
1件の結果 直接使用
複数件の結果があり、A株が1つだけ 自動的にA株を選択
複数件の結果があり、A株が複数 リストを表示し、ユーザーの選択を待つ

指数は専用の市場プレフィックスを使用します(search_symbols は不要です):

指数 THSCODE
上海総合指数 USHI000001
深セン成分指数 USZI399001
創業板指数 USZI399006
科創50 USHI000688
滬深300 USHI000300
中証500 USHI000905
上証50 USHI000016

⚠️ 指数のプレフィックスは USHI/USZIUSHA/USZA ではありません)であり、market_data_cn ではなく market_data_index を呼び出す必要があります。


市場コードの説明

プレフィックス 意味
USHA 上海A株
USZA 深センA株
USHI 上海指数
USZI 深セン指数
USTM 北京証券取引所
UHKG 香港株

Kラインデータ

interval の完全なパラメータ

"1m" / "5m" / "15m" / "30m" / "60m" / "120m" / "day" / "week" / "month" / "quarter" / "year"

⚠️ 正しい表記は "5m" であり、"5min" ではありません。

使用方法(countstart/end はどちらか一方を選択し、混用不可)

from datetime import datetime
from zoneinfo import ZoneInfo

tz = ZoneInfo('Asia/Shanghai')

with THS() as ths:
    # 方法1:件数指定(最も一般的)
    resp = ths.klines("USZA300750", interval="5m", count=78)

    # 方法2:期間指定
    resp = ths.klines(
        "USZA300750",
        interval="day",
        start_time=datetime(2025, 1, 1, tzinfo=tz),
        end_time=datetime(2025, 3, 1, tzinfo=tz)
    )

    # 復権:前復権 forward / 後復権 backward / 無復権 ""(デフォルト)
    resp = ths.klines("USHA600519", interval="day", count=250, adjust="forward")

    df = resp.df  # 列: 時間, 始値, 高値, 安値, 終値, 出来高 など
    # 分足Kラインの「時間」は自動的に datetime に変換されます。日足Kラインの「時間」は datetime(YYYYMMDD) です。

分足Kライン分析例

with THS() as ths:
    resp = ths.klines("USZA300750", interval="5m", count=78)
    df = resp.df
    df['ma5'] = df['收盘价'].rolling(5).mean()
    df['ma20'] = df['收盘价'].rolling(20).mean()
    # 出来高異常変動(平均出来高の2倍超)
    df['vol_avg'] = df['成交量'].rolling(20).mean()
    df['vol_spike'] = df['成交量'] > df['vol_avg'] * 2
    # サポート/レジスタンスライン
    support = df['最低价'].tail(20).min()
    resistance = df['最高价'].tail(20).max()

板情報とリアルタイムデータ

日中分足(当日)

with THS() as ths:
    resp = ths.intraday_data("USZA300750")
    df = resp.df  # 列: 時間(datetime), 価格, 出来高, 平均価格 など

過去分足(過去1年間の任意の日付)

with THS() as ths:
    resp = ths.min_snapshot("USZA300750", date="20250301")
    df = resp.df

買い売り5段階板情報

with THS() as ths:
    resp = ths.depth("USZA300750")              # 単一銘柄
    resp = ths.depth(["USZA300750", "USHA600519"])  # 複数銘柄
    df = resp.df  # 買い1~5の価格/数量、売り1~5の価格/数量 を含む

3秒ティックデータ

with THS() as ths:
    resp = ths.tick_level1("USZA300750")
    df = resp.df

スーパー板情報(10段階注文を含む)

with THS() as ths:
    resp = ths.tick_super_level1("USZA300750")                      # リアルタイム
    resp = ths.tick_super_level1("USZA300750", date="20250301")     # 履歴(過去1年)
    df = resp.df

大口注文と寄り付き

大口注文フロー

with THS() as ths:
    resp = ths.big_order_flow("USZA300750")
    df = resp.df
    # 含まれるフィールド:特大口買い注文量/金額/件数、特大口売り注文量/金額/件数、
    #                     大口買い注文量/金額/件数、資金流入/流出 など

集合競売異常変動(寄り付き前9:15~9:25監視)

with THS() as ths:
    resp = ths.call_auction_anomaly("USHA")   # 上海市場
    resp = ths.call_auction_anomaly("USZA")   # 深セン市場
    df = resp.df
    # 異常変動タイプ1 は自動的に日本語にマッピングされます:
    # ストップ高試行 / ストップ安試行 / ストップ高取り消し / 寄り付き買い集め / 寄り付き投げ売り
    # 大幅高寄り / 大幅安寄り / 急速上昇 / 急速下落
    # 買い1残大量 / 売り1残大量 / 大口買い注文試行 / 大口売り注文試行

早朝集合競売スナップショット

with THS() as ths:
    resp = ths.call_auction("USZA300750")
    df = resp.df

セクターと指数

業界セクターリスト

with THS() as ths:
    resp = ths.ths_industry()   # 同花順業界(URFI プレフィックスの link_code を含む)
    df = resp.df  # セクター名、コード(link_code)、騰落率、出来高、上昇/下落銘柄数 などを含む

コンセプトセクターリスト

with THS() as ths:
    resp = ths.ths_concept()
    df = resp.df  # コンセプト名、link_code、騰落率、上昇を牽引する銘柄 などを含む

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

THS Advanced Analysis Skill

对话引导规范

澄清意图(意图模糊时必问)

用户输入往往不精确,调用前先判断意图,不要猜测直接跑

用户说 可能的意图 必问
"帮我看看XX股票" 实时行情?K线走势?大单?
"分析一下XX" 技术面?资金面?和谁对比?
"XX板块怎么样" 板块整体涨跌?成分股?领涨股?
"选一些好股票" 短线?价值?哪个行业?条件?
"XX的5分钟K线" 意图明确 ❌ 直接执行
"今日涨停股" 意图明确 ❌ 直接执行

澄清话术示例:

用户:"帮我分析一下宁德时代"
Claude:"好的,请问你主要想看哪个方向?
  1. 今日实时行情 + 资金流向
  2. 分钟K线(盘中走势)
  3. 近期日K线趋势
  4. 和比亚迪、亿纬锂能等对比
  5. 用问财筛选相关概念股"

调用后的后续提示(有延伸价值时才提)

不要每次都机械列出"还可以做XYZ"。只在以下情况自然地带出:

场景 合适的后续提示
展示了行业排名 "需要查某个行业的成分股行情吗?"
展示了分钟K线 "需要同时看大单流向或盘口深度吗?"
展示了多股对比表格 "需要展示归一化走势图或相关性吗?"
问财选出了候选股 "需要对这些股票做K线技术验证吗?"
展示了竞价异动 "需要对某只异动股拉盘前分时看细节吗?"

完整调用案例(直接可运行)

详见 examples/ 目录,4个端到端场景:

文件 场景
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:选股/行情/财务/技术/复杂组合 + 与klines联用

场景速查

用户需求 使用方法
今日涨停/连板/竞价强势股 wencai_nlp("今日涨停,非ST")
财务指标选股(ROE/PE/PB) wencai_nlp("连续3年ROE大于15%,非ST")
技术形态选股(MACD金叉) wencai_nlp("均线多头排列,MACD金叉")
复杂组合条件选股 wencai_nlp("...多条件...") 见案例5
宁德时代5分钟K线 klines(code, interval="5m", count=78)
茅台今日分时图 intraday_data(code)
历史某日分时 min_snapshot(code, date="20250101")
盘口买卖五档 depth(code)tick_level1(code)
大单流向 big_order_flow(code)
今日竞价异动 call_auction_anomaly(market)
申万行业列表 ths_industry()
概念板块列表 ths_concept()
板块成分股 block_constituents(link_code)
指数行情 market_data_index(ths_code)
多股票对比 批量 market_data_cn + klines
权息资料/除权 corporate_action(code)
今日IPO ipo_today()

第零步:安装

pip install --upgrade thsdk

包来源:PyPI


连接

所有调用统一使用游客模式,无需账户配置:

from thsdk import THS

with THS() as ths:
    ...

第一步:股票代码解析

所有中文名/缩写/短代码 先用 search_symbols 获得完整 ths_code:

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

代码选择规则:

情况 处理
0条结果 告知用户未找到
1条结果 直接使用
多条结果,只有1只A股 自动选A股
多条结果,多只A股 展示列表,等用户选择

指数用专用市场前缀(不需要 search_symbols):

指数 THSCODE
上证指数 USHI000001
深证成指 USZI399001
创业板指 USZI399006
科创50 USHI000688
沪深300 USHI000300
中证500 USHI000905
上证50 USHI000016

⚠️ 指数前缀是 USHI/USZI(非 USHA/USZA),需调用 market_data_index 而非 market_data_cn


市场代码说明

前缀 含义
USHA 上海A股
USZA 深圳A股
USHI 上海指数
USZI 深圳指数
USTM 北交所
UHKG 港股

K线数据

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:
    # 方式1:按条数(最常用)
    resp = ths.klines("USZA300750", interval="5m", count=78)

    # 方式2:按时间范围
    resp = ths.klines(
        "USZA300750",
        interval="day",
        start_time=datetime(2025, 1, 1, tzinfo=tz),
        end_time=datetime(2025, 3, 1, tzinfo=tz)
    )

    # 复权:前复权 forward / 后复权 backward / 不复权 ""(默认)
    resp = ths.klines("USHA600519", interval="day", count=250, adjust="forward")

    df = resp.df  # 列: 时间, 开盘价, 最高价, 最低价, 收盘价, 成交量 等
    # 分钟K线的"时间"已自动转为 datetime;日K的"时间"为 datetime(YYYYMMDD)

分钟K线分析示例

with THS() as ths:
    resp = ths.klines("USZA300750", interval="5m", count=78)
    df = resp.df
    df['ma5'] = df['收盘价'].rolling(5).mean()
    df['ma20'] = df['收盘价'].rolling(20).mean()
    # 成交量异动(超均量2倍)
    df['vol_avg'] = df['成交量'].rolling(20).mean()
    df['vol_spike'] = df['成交量'] > df['vol_avg'] * 2
    # 支撑/压力位
    support = df['最低价'].tail(20).min()
    resistance = df['最高价'].tail(20).max()

盘口与实时数据

日内分时(当日)

with THS() as ths:
    resp = ths.intraday_data("USZA300750")
    df = resp.df  # 列: 时间(datetime), 价格, 成交量, 均价 等

历史分时(近一年内任意日期)

with THS() as ths:
    resp = ths.min_snapshot("USZA300750", date="20250301")
    df = resp.df

买卖五档盘口

with THS() as ths:
    resp = ths.depth("USZA300750")              # 单只
    resp = ths.depth(["USZA300750", "USHA600519"])  # 多只
    df = resp.df  # 含 买1~5价/量, 卖1~5价/量

3秒 Tick 数据

with THS() as ths:
    resp = ths.tick_level1("USZA300750")
    df = resp.df

超级盘口(含十档委托)

with THS() as ths:
    resp = ths.tick_super_level1("USZA300750")                      # 实时
    resp = ths.tick_super_level1("USZA300750", date="20250301")     # 历史(近一年)
    df = resp.df

大单与竞价

大单流向

with THS() as ths:
    resp = ths.big_order_flow("USZA300750")
    df = resp.df
    # 含字段:主动买入特大单量/金额/笔数、主动卖出特大单量/金额/笔数、
    #         主动买入大单量/金额/笔数、资金流入/流出 等

集合竞价异动(盘前9:15~9:25监控)

with THS() as ths:
    resp = ths.call_auction_anomaly("USHA")   # 沪市
    resp = ths.call_auction_anomaly("USZA")   # 深市
    df = resp.df
    # 异动类型1 已自动映射中文:
    # 涨停试盘 / 跌停试盘 / 涨停撤单 / 竞价抢筹 / 竞价砸盘
    # 大幅高开 / 大幅低开 / 急速上涨 / 急速下跌
    # 买一剩余大 / 卖一剩余大 / 大买单试盘 / 大卖单试盘

早盘集合竞价快照

with THS() as ths:
    resp = ths.call_auction("USZA300750")
    df = resp.df

板块与指数

行业板块列表

with THS() as ths:
    resp = ths.ths_industry()   # 同花顺行业(含 URFI 前缀的 link_code)
    df = resp.df  # 含板块名称、代码(link_code)、涨幅、成交量、上涨/下跌家数 等

概念板块列表

with THS() as ths:
    resp = ths.ths_concept()
    df = resp.df  # 含概念名称、link_code、涨幅、领涨股 等

板块成分股

with THS() as ths:
    # 先获取行业/概念列表,找到 link_code(格式 URFIXXXXXX)
    industry_resp = ths.ths_industry()
    target_row = [r for r in industry_resp.data if '新能源' in str(r.get('名称', ''))][0]
    link_code = target_row.get('代码') or target_row.get('link_code')

    resp = ths.block_constituents(link_code)
    df = resp.df  # 含成分股代码、名称等

板块实时行情

with THS() as ths:
    # query_key: "基础数据"(涨幅/成交/市值)或 "扩展"(涨速/主力净流入)
    resp = ths.market_data_block("URFI881273", "基础数据")
    df = resp.df
    # 含: 价格, 涨幅, 成交量, 板块总市值, 板块流通市值, 上涨家数, 下跌家数, 领涨股

指数实时行情

with THS() as ths:
    # 单只
    resp = ths.market_data_index("USHI000001", "基础数据")
    # 多只(必须同市场:同为 USHI 或同为 USZI)
    resp = ths.market_data_index(["USHI000001", "USHI000300", "USHI000905"])
    df = resp.df  # 含: 价格, 涨幅, 涨跌, 成交量, 总金额, 最高价, 最低价

    # 扩展(含量比、振幅等)
    resp = ths.market_data_index("USHI000001", "扩展")

market_data_cn 可用 query_key

query_key 含义
"基础数据" 价格、涨跌幅、成交量、金额、开高低、涨速、当前量
"基础数据2" 精简版
"基础数据3" 极简(价格、昨收、成交量)
"扩展1" 涨幅、涨跌、换手率、量比、主力净流入、委比
"扩展2" 涨幅、换手率、总市值、流通市值、委比、流通市值
"汇总" 全量字段(基础+扩展合并,多股对比首选)

⚠️ market_data_cn 要求同市场:沪A(USHA)和深A(USZA)不能在同一次调用里混合


多股票批量对比

完整流程

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: 按市场分组(market_data_cn 要求同市场)
    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: 归一化
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()

输出规范(两步走)

第一步:表格(show_widget 渲染)

| 股票 | 最新价 | 涨幅% | 成交额 | 换手率 | 量比 | 主力净流入 | 总市值 |

第二步:图表(show_widget 渲染)

  1. 归一化走势折线图(多线,颜色区分,起点=100)
  2. 量化场景额外输出:相关性热力图

问财自然语言查询(wencai_nlp)

问财是同花顺旗下 AI 选股平台(iwencai.com),支持用自然语言做全市场扫描。 wencai_nlp 直接对接同一接口,多条件用逗号/分号/空格分隔。

with THS() as ths:
    resp = ths.wencai_nlp("连续3日主力净流入,换手率大于5%,非ST")
    df = resp.df  # 每行一只股票,列为查询涉及的字段

⚠️ buffer_size 已设为 8MB,返回数据量大时无需手动调整

六大查询类型速查

① 行情 & 盘面

"今日涨停,非ST"
"连续2日涨停,非一字板,非ST"
"今日涨停原因类别,涨停封单额,封单量"
"竞价涨幅大于3%,竞价量大于昨日成交量5%,非ST"
"主力净流入由大到小排名前20,非ST"
"近10日区间主力资金流向大于5000万,市值大于100亿,日成交额大于30亿"

② 板块 & 行业

"今日申万行业涨跌幅排名"
"今日概念板块涨幅排名前20"
"人工智能概念股,今日涨跌幅,成交额,主力净流入"
"半导体行业股票,涨幅,换手率,市值"
"今日涨幅最大的5个概念板块,涨幅,成分股数量"

③ 财务指标

"连续3年ROE大于15%,非ST,上市大于3年"
"净利润增长率大于30%,营业收入增长率大于20%,非ST"
"市盈率小于15,股息率大于3%,市净率小于2,非ST"
"市净率小于1,非ST,流通市值大于20亿"          # 破净股
"连续5年分红,股息率大于4%,资产负债率小于60%"

④ 技术形态

"均线多头排列,MACD金叉,换手率大于3%,非ST"
"5日均线上穿20日均线,成交量放大,涨幅大于1%"
"均线粘合,平台突破,成交量大于5日均量1.5倍"
"仙人指路,非ST,非停牌"
"250日新高,非ST,沪深A,上市超过250天"

⑤ 复杂组合(短线/量化)

# 短线强势选股
"均线多头排列,MACD金叉,DIFF上穿中轴,换手率大于1%且小于10%,30日内有2个交易日涨幅大于4%,非ST"

# 竞价选股(隔日打板)
"昨日非一字板涨停,今日竞价涨幅大于等于0%且小于等于9.9%,今日隔夜买单额小于10亿,非ST,非科创板"

# 连板选股
"最近5日有过涨停,最近5日没有跌停,今日成交量大于5日平均成交量,今日竞价涨幅在2%到3%之间,非北交所非科创板非ST"

⑥ 信息查询(非选股)

"涨停原因归类前20"                       # 今日涨停题材分布
"今日龙虎榜"                             # 龙虎榜数据
"今日大宗交易"                           # 大宗交易
"今日融资融券余额最大的前20只股票"
"近一周北向资金净买入前20"

wencai_nlp 返回数据处理

with THS() as ths:
    resp = ths.wencai_nlp("连续3日主力净流入,换手率大于5%,非ST,市值大于30亿")
    if not resp:
        print(f"查询失败: {resp.error}")
    else:
        df = resp.df
        # 字段名来自查询语句,常见列:股票代码、股票简称、涨幅、成交额、主力净流入 等

        # 补全 ths_code(供后续调用 klines/market_data_cn)
        def to_ths_code(code_str):
            code_str = str(code_str).zfill(6)
            if code_str.startswith('6'):   return f"USHA{code_str}"
            if code_str.startswith(('0','3')): return f"USZA{code_str}"
            if code_str.startswith('8'):   return f"USTM{code_str}"
            return None

        df['ths_code'] = df.get('股票代码', df.get('代码', pd.Series())).apply(to_ths_code)

wencai_nlp vs wencai_base

方法 用途
wencai_nlp(condition) 主要用法。完整自然语言,返回股票列表+字段数据
wencai_base(condition) 简单条件查询,如 "所属行业" 查单只股票的归属

完整示例见 examples/05_wencai_nlp.py


其他实用 API

权息资料(除权除息历史)

with THS() as ths:
    resp = ths.corporate_action("USHA600519")
    df = resp.df

今日IPO / 待申购

with THS() as ths:
    resp = ths.ipo_today()   # 今日上市新股
    resp = ths.ipo_wait()    # 待申购打新

问财自然语言查询

with THS() as ths:
    resp = ths.wencai_nlp("今日申万行业涨跌幅排名")
    resp = ths.wencai_nlp("今日概念板块涨跌幅排名前20")
    resp = ths.wencai_nlp("换手率大于10%且涨幅大于5%的股票")
    df_list = resp.data

错误处理

with THS() as ths:
    resp = ths.klines("USZA300750", interval="5m", count=60)
    if not resp:                  # resp.success == False
        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' 同时使用" 参数冲突 二选一

与 ths-financial-data 的分工

场景 skill
单只A股行情/资金流向/日K ths-financial-data
分钟K线 / 盘中监控 本 skill
盘口深度 / 大单 / 竞价异动 本 skill
板块/指数行情及成分股 本 skill
多股票批量对比 本 skill
问财自然语言查询 两者均可