Skip to content

Python API 参考

Justin Gu edited this page Jun 10, 2026 · 3 revisions

Python API 参考

Market 枚举

from easy_tdx import Market

Market.SH   # 上海 = 1
Market.SZ   # 深圳 = 0
Market.BJ   # 北京 = 2

注意:Market.BJget_security_list() 不稳定,服务器端问题,不要依赖它。


MacClient / AsyncMacClient(推荐)

A 股行情的主力客户端,端口 7709,功能最全。

初始化

from easy_tdx import MacClient

# 自动选最快服务器
with MacClient.from_best_host() as c:
    ...

# 指定服务器
with MacClient() as c:
    c.connect("119.147.212.81", 7709)
    ...

get_stock_quotes — 批量实时报价

df = c.get_stock_quotes(
    [(Market.SH, "600519"), (Market.SZ, "000858")],
)

一次最多 80 只。返回列:market, code, name, pre_close, open, high, low, close, vol, amount, turnover, vol_ratio 等。

get_stock_quotes_list — 市场分类排序报价

from easy_tdx import Category, SortType, SortOrder

df = c.get_stock_quotes_list(
    Category.A,
    count=20,
    sort_type=SortType.CHANGE_PCT,
    sort_order=SortOrder.DESC,
)

Category 可选:A(全A)、SH(沪A)、SZ(深A)、KCB(科创板)、CYB(创业板)、B(B 股)

SortType 可选:CODEPRICECHANGE_PCTVOLUMETOTAL_AMOUNTTURNOVER_RATEMAIN_NET_AMOUNT

get_stock_kline — K 线

from easy_tdx import Period, Adjust

df = c.get_stock_kline(
    Market.SH, "600519",
    period=Period.DAILY,
    count=10,
    adjust=Adjust.QFQ,
)

返回列:datetime, open, close, high, low, vol, amount

Period 枚举:

名称 说明
7 MIN_1 1 分钟
0 MIN_5 5 分钟
1 MIN_15 15 分钟
2 MIN_30 30 分钟
3 MIN_60 60 分钟
4 DAILY 日线
5 WEEKLY 周线
6 MONTHLY 月线
10 QUARTERLY 季线
11 YEARLY 年线

Adjust 枚举:NONE(不复权)、QFQ(前复权)、HFQ(后复权)

get_stock_kline_with_indicators — K 线 + 技术指标

df = c.get_stock_kline_with_indicators(
    Market.SH, "600519",
    indicators=["MACD", "KDJ", "RSI", "BOLL"],
    count=30,
    period=Period.DAILY,
    adjust=Adjust.QFQ,
)

自动拉取 200+ 条历史数据预热 EMA,只返回最后 count 条。

自定义参数:

df = c.get_stock_kline_with_indicators(
    Market.SH, "600519",
    indicators=["MACD"],
    params={"MACD": {"SHORT": 10, "LONG": 22}},
)

get_tick_chart / get_tick_charts — 分时图

df = c.get_tick_chart(Market.SH, "600519")
df = c.get_tick_chart(Market.SH, "600519", date=20250115)
df = c.get_tick_charts(Market.SH, "600519", days=3)     # 最多5天

get_transactions — 逐笔成交

df = c.get_transactions(Market.SH, "600519", count=100)
df = c.get_transactions(Market.SH, "600519", count=100, date=20250115)

板块系列方法

from easy_tdx import BoardType

df = c.get_board_list(BoardType.GN)
df = c.get_board_list(BoardType.HY)
df = c.get_board_members("881001")
df = c.get_belong_board(Market.SZ, "000001")
summary = c.get_board_summary("881001")
df = c.get_board_ranking(BoardType.HY, top_n=10)

BoardType:HY(行业一级)、HY2(行业二级)、GN(概念)、FG(风格)、DQ(地区)、ALL(全部)

get_capital_flow — 资金流向

df = c.get_capital_flow(Market.SH, "600519")

监控方法

df = c.get_auction(Market.SH, "600519")
df = c.get_unusual(Market.SH, count=100)
df = c.get_symbol_info(Market.SZ, "000001")
df = c.get_server_info()

MacExClient / AsyncMacExClient

扩展市场(港股/美股/期货),端口 7727。

from easy_tdx import MacExClient, ExMarket, Period

with MacExClient.from_best_host() as c:
    count = c.goods_count(ExMarket.HK_MAIN_BOARD)
    df = c.goods_list(ExMarket.HK_MAIN_BOARD, start=0, count=50)
    df = c.goods_kline(ExMarket.US_STOCK, "AAPL", Period.DAILY, count=10)
    df = c.goods_quotes([(ExMarket.HK_MAIN_BOARD, "00700")])

ExMarket 枚举:

名称 说明
28 ZZ_FUTURES 郑州商品
29 DL_FUTURES 大连商品
30 SH_FUTURES 上海期货
31 HK_MAIN_BOARD 香港主板
47 CFFEX_FUTURES 中金所期货
48 HK_GEM 香港创业板
74 US_STOCK 美国股票

UnifiedTdxClient / AsyncUnifiedTdxClient

统一入口,自动路由 A 股到 MacClient,扩展市场到 MacExClient

from easy_tdx import UnifiedTdxClient, Market, ExMarket, Period

with UnifiedTdxClient() as client:
    df = client.get_stock_kline(Market.SH, "600519", Period.DAILY, count=5)
    df = client.goods_kline(ExMarket.HK_MAIN_BOARD, "00700", Period.DAILY, count=5)

TdxClient / AsyncTdxClient(标准协议)

功能较少的旧版客户端,提供 get_security_list_all()get_xdxr_info() 等独有方法。

from easy_tdx import TdxClient, Market, KlineCategory

with TdxClient.from_best_host() as c:
    count = c.get_security_count(Market.SH)
    stocks = c.get_security_list(Market.SH, start=0)
    quotes = c.get_security_quotes([(Market.SH, "600000")])
    bars = c.get_security_bars(Market.SZ, "002176", KlineCategory.DAY, 0, 100)
    xdxr = c.get_xdxr_info(Market.SH, "600519")

独有方法

方法 说明
get_security_count(market) 市场证券总数
get_security_list(market, start) 证券列表(分页)
get_security_list_all() 沪深 A 股完整列表(含行业)
get_security_bars(...) 个股 K 线
get_index_bars(...) 指数 K 线
get_minute_time_data(...) 今日分时
get_history_minute_time_data(...) 历史分时
get_transaction_data(...) 当日逐笔
get_history_transaction_data(...) 历史逐笔
get_fund_flow(...) 当日资金流向
get_history_fund_flow(...) 历史资金流向
get_xdxr_info(...) 除权除息历史
get_finance_info(...) 最新财务数据
get_company_info_category(...) 公司信息目录
get_company_info_content(...) 公司信息文本
get_block_info(...) 板块信息
get_report_file(...) 下载服务器文件
get_market_stat() 全市场涨跌统计
get_price_limits(...) 涨跌停价计算

缠论分析

基于缠论理论的技术分析模块,接收 easy_tdx 的 K 线 DataFrame,输出笔、中枢、线段、买卖点、背驰等分析结果。详见 缠论分析

from easy_tdx.chanlun import ChanlunAnalyser, ChanlunConfig
from easy_tdx import TdxClient, Market
from easy_tdx.mac.enums import KlineCategory

# 使用 easy_tdx 获取 K 线数据
with TdxClient.from_best_host() as client:
    df = client.get_security_bars(Market.SH, "600519", KlineCategory.DAY, 0, 800)

# 缠论分析
analyser = ChanlunAnalyser("SH600519", "DAILY")
result = analyser.process_klines(df)

# 获取结果
print(f"笔数: {len(result.bis)}")
print(f"中枢数: {len(result.zss)}")
print(f"线段数: {len(result.xds)}")
print(f"买卖点: {[m.msg for m in result.mmds]}")
print(f"背驰: {[b.msg for b in result.bcs]}")

# JSON 兼容字典输出
print(result.to_dict())

多级别联立分析

from easy_tdx.chanlun import ChanlunAnalyser
from easy_tdx.chanlun.multi_level import MultiLevelAnalyser

mla = MultiLevelAnalyser()
mla.add_level("daily", ChanlunAnalyser("SZ000001", "DAILY"))
mla.add_level("30min", ChanlunAnalyser("SZ000001", "30MIN"))

mla.process("daily", df_daily)
mla.process("30min", df_30min)

# 查看日线最后一笔在 30 分钟级别中的走势
daily_result = mla.get_result("daily")
if daily_result and daily_result.bis:
    info = mla.query_low_level_qs("daily", "30min", daily_result.bis[-1])
    print(info)

回测引擎 API

Strategy 基类

继承 Strategy 基类编写自定义策略:

from easy_tdx.backtest import Strategy
from easy_tdx import MyTT


class MyStrategy(Strategy):
    def init(self):
        self.ma = self.I(MyTT.MA, self.data.close, 10)

    def next(self):
        if self.data.close[0] > self.ma[self._bar_index]:
            self.buy(size=0)     # size=0 表示全仓
        elif self.position["size"] > 0:
            self.sell(size=0)    # size=0 表示清仓

BacktestEngine

from easy_tdx.backtest import BacktestEngine

engine = BacktestEngine(df, cash=1000000, commission=0.0003)
result = engine.run(MyStrategy)
print(result.performance)  # 19 项绩效指标
print(result.trades)       # 交易记录列表

CombinationRunner — 多因子组合

from easy_tdx.backtest import CombinationRunner

runner = CombinationRunner(
    strategy_classes=[MACDStrategy, RSIStrategy, BollingerStrategy],
    df=df, cash=100000,
)
results = runner.screen(combo_sizes=(2, 3), mode="MAJORITY")
for r in results[:5]:
    print(f"{r.name}: 收益={r.result.performance['total_return']:.2%}")

信号合并模式:AND(全部同意)、OR(任一同意)、MAJORITY(过半同意,推荐)。

详见 回测引擎

策略选股扫描 API

from easy_tdx.screen import SignalScanner, SignalRanker

# 扫描全市场信号
scanner = SignalScanner(strategy_class=MyStrategy)
result = scanner.scan(universe="all")
print(f"扫描 {result.total_scanned} 只,发现 {result.total_signals} 个信号")

# 回测排名
ranker = SignalRanker()
ranked = ranker.rank(result, sort_by="sharpe", top_n=20)
for item in ranked:
    print(f"{item.code}: 夏普={item.sharpe:.2f}, 收益={item.total_return:.2%}")

详见 策略选股扫描

返回值约定

所有 get_* 方法返回 pandas.DataFrame

涨跌停价

SecurityQuotelimit_up / limit_down 默认为 None,需用 get_price_limits()compute_price_limits() 计算。

Clone this wiki locally