-
Notifications
You must be signed in to change notification settings - Fork 52
Python API 参考
from easy_tdx import Market
Market.SH # 上海 = 1
Market.SZ # 深圳 = 0
Market.BJ # 北京 = 2注意:
Market.BJ的get_security_list()不稳定,服务器端问题,不要依赖它。
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)
...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 等。
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 可选:CODE、PRICE、CHANGE_PCT、VOLUME、TOTAL_AMOUNT、TURNOVER_RATE、MAIN_NET_AMOUNT
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(后复权)
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}},
)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天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(全部)
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()扩展市场(港股/美股/期货),端口 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 |
美国股票 |
统一入口,自动路由 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)功能较少的旧版客户端,提供 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)继承 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 表示清仓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) # 交易记录列表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(过半同意,推荐)。
详见 回测引擎。
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。
SecurityQuote 的 limit_up / limit_down 默认为 None,需用 get_price_limits() 或 compute_price_limits() 计算。