XtData(XtQuant行情数据模块)
name: xtdata
by coderwpf · published 2026-03-22
$ claw add gh:coderwpf/coderwpf-xtdata---
name: xtdata
description: XtQuant行情数据模块 - 为QMT/miniQMT提供实时行情、K线、Tick、Level2和财务数据。
version: 1.2.0
homepage: http://dict.thinktrader.net/nativeApi/xtdata.html
metadata: {"clawdbot":{"emoji":"📡","requires":{"bins":["python3"]}}}
---
# XtData(XtQuant行情数据模块)
`xtdata` is the market data module of [XtQuant](http://dict.thinktrader.net/nativeApi/start_now.html), providing real-time and historical market data through the local miniQMT client.
> ⚠️ **Requires miniQMT running locally**. xtdata communicates with miniQMT via TCP to retrieve data.
安装
pip install xtquant连接
from xtquant import xtdata
# Connect to the local miniQMT market data service
xtdata.connect()Optionally specify a data directory:
# Manually specify the miniQMT data directory path
xtdata.data_dir = r'D:\QMT\userdata_mini'API分类
The xtdata API is divided into three main categories:
> **Key Pattern**: When retrieving historical data, you must first `download` to local cache, then `get` from cache. For real-time data, use `subscribe`.
通用类型约定
请求限制
---
下载历史数据
You must download data before retrieving it locally:
# Download daily K-line data
xtdata.download_history_data('000001.SZ', '1d', start_time='20240101', end_time='20240630')
# Download 1-minute K-line data
xtdata.download_history_data('000001.SZ', '1m', start_time='20240101', end_time='20240630')
# Download Tick data
xtdata.download_history_data('000001.SZ', 'tick', start_time='20240601', end_time='20240630')下载退市/到期合约数据
# Use download_history_data2 to download data for delisted or expired contracts
xtdata.download_history_data2(['IC2312.IF'], '1d', start_time='20230101', end_time='20231231')获取K线数据
# Retrieve market data (returns a dict of DataFrames keyed by stock code)
data = xtdata.get_market_data_ex(
[], # field_list, empty list means all fields
['000001.SZ'], # stock_list, list of stock codes
period='1d', # period: tick, 1m, 5m, 15m, 30m, 1h, 1d, 1w, 1mon
start_time='20240101',
end_time='20240630',
count=-1, # -1 means retrieve all data
dividend_type='front', # adjustment type: none, front, back, front_ratio, back_ratio
fill_data=True # whether to fill suspended trading data
)
df = data['000001.SZ']
# Returned fields: open, high, low, close, volume, amount, settelementPrice, openInterest, preClose, suspendFlag获取最新交易日K线
# count=1 retrieves the latest single K-line bar
data = xtdata.get_market_data_ex([], ['000001.SZ'], period='1d', count=1)获取本地缓存数据
# If data is already cached, read directly from local storage (no need to download again)
data = xtdata.get_local_data(
field_list=[],
stock_list=['000001.SZ'],
period='1d',
start_time='20240101',
end_time='20240630'
)实时行情订阅
订阅单只股票
def on_data(datas):
"""Quote callback function, receives pushed real-time data"""
for stock_code, data in datas.items():
print(stock_code, data)
# subscribe_quote(stock_code, period, start_time, end_time, count, callback)
xtdata.subscribe_quote('000001.SZ', period='tick', callback=on_data)
xtdata.run() # Block the current thread, continuously receiving callback data订阅全市场行情(全推)
# Subscribe to full-market quote push
xtdata.subscribe_whole_quote(['SH', 'SZ'], callback=on_data)
# Market codes: 'SH' (Shanghai), 'SZ' (Shenzhen), 'BJ' (Beijing)
xtdata.run()取消订阅
# Unsubscribe using the sequence number returned by subscribe_quote
seq = xtdata.subscribe_quote('000001.SZ', period='tick', callback=on_data)
xtdata.unsubscribe_quote(seq)获取全市场快照
# Retrieve the latest Tick snapshot for the entire market
data = xtdata.get_full_tick(['SH', 'SZ'])
# 收益率 a dict: {stock_code: tick_data, ...}---
财务数据
# First download financial data to local cache
xtdata.download_financial_data(['000001.SZ'])
# Then retrieve financial data from local cache
data = xtdata.get_financial_data(['000001.SZ'])可用财务报表
| Statement | Description |
|---|---|
| `Balance` | Balance Sheet |
| `Income` | Income Statement |
| `CashFlow` | Cash Flow Statement |
| `PershareIndex` | Per-Share Indicators |
| `CapitalStructure` | Capital Structure |
| `TOP10HOLDER` | Top 10 Shareholders |
| `TOP10FLOWHOLDER` | Top 10 Tradable Shareholders |
| `SHAREHOLDER` | Shareholder Count |
资产负债表关键字段
'cash_equivalents' # Cash and cash equivalents
'tradable_fin_assets' # Trading financial assets
'account_receivable' # Accounts receivable
'inventories' # Inventories
'total_current_assets' # Total current assets
'fix_assets' # Fixed assets
'intang_assets' # Intangible assets
'tot_assets' # 总资产
'shortterm_loan' # Short-term borrowings
'total_current_liability' # Total current liabilities
'tot_liab' # Total liabilities
'cap_stk' # Paid-in capital (or share capital)
'undistributed_profit' # Retained earnings
'total_equity' # Total owners' equity
'tot_liab_shrhldr_eqy' # Total liabilities and shareholders' equity利润表关键字段
'revenue' # Total operating revenue
'revenue_inc' # Operating revenue
'total_expense' # Operating costs
'sale_expense' # Selling expenses
'less_gerl_admin_exp' # Administrative expenses
'financial_expense' # Financial expenses
'oper_profit' # Operating profit
'tot_profit' # Total profit
'net_profit_incl_min_int_inc' # 净利润
'net_profit_excl_min_int_inc' # 净利润 attributable to parent company
's_fa_eps_basic' # Basic earnings per share
's_fa_eps_diluted' # Diluted earnings per share现金流量表关键字段
'goods_sale_and_service_render_cash' # Cash received from sales of goods and services
'net_cash_flows_oper_act' # Net cash flows from operating activities
'net_cash_flows_inv_act' # Net cash flows from investing activities
'net_cash_flows_fnc_act' # Net cash flows from financing activities
'net_incr_cash_cash_equ' # Net increase in cash and cash equivalents每股指标关键字段
's_fa_eps_basic' # Basic earnings per share
's_fa_bps' # Book value per share
's_fa_ocfps' # Operating cash flow per share
'du_return_on_equity' # 净资产收益率(ROE)
'sales_gross_profit' # Gross profit margin
'inc_revenue_rate' # Year-over-year revenue growth rate
'du_profit_rate' # Year-over-year net profit growth rate
'gear_ratio' # Debt-to-asset ratio
'inventory_turnover' # Inventory turnover ratio股本结构字段
'total_capital' # Total share capital
'circulating_capital' # Listed tradable A-shares
'restrict_circulating_capital' # Restricted tradable shares前十大股东字段
'declareDate' # Announcement date
'endDate' # Reporting period end date
'name' # Shareholder name
'quantity' # Number of shares held
'ratio' # Shareholding ratio
'nature' # Share type
'rank' # Shareholding rank---
除权除息数据
# Retrieve ex-dividend adjustment factor data
data = xtdata.get_divid_factors('000001.SZ')
# Returned fields: interest (dividend per share), stockBonus (bonus shares per share), stockGift (capitalization shares per share),
# allotNum (rights issue shares per share), allotPrice (rights issue price), gugai (share reform flag), dr (ex-dividend factor)合约信息
# Retrieve detailed instrument information
info = xtdata.get_instrument_detail('000001.SZ')
# 收益率 a dict containing: InstrumentName (instrument name), ExchangeID (market code), ProductID (product code),
# UpStopPrice (upper price limit), DownStopPrice (lower price limit), PreClose (previous close),
# FloatVolume (tradable shares), TotalVolume (total shares), PriceTick (minimum price increment),
# VolumeMultiple (contract multiplier), CreateDate (creation date), OpenDate (listing date),
# ExpireDate (expiration date), MainContract (main contract flag), IsTrading (whether tradable), etc.
# Retrieve security type
itype = xtdata.get_instrument_type('000001.SZ') # 收益率 'stock', 'index', 'fund', 'bond', etc.
# Retrieve trading day list
days = xtdata.get_trading_dates('SH', start_time='20240101', end_time='20240630')
# Retrieve trading calendar
calendar = xtdata.get_trading_calendar('SH')
# Download and retrieve holiday data
xtdata.download_holiday_data()
holidays = xtdata.get_holidays()板块管理
# Retrieve sector list
sectors = xtdata.get_sector_list()
# Retrieve stock list within a sector
stocks = xtdata.get_stock_list_in_sector('沪深A股')
# Download sector classification data
xtdata.download_sector_data()
# Custom sector management
xtdata.create_sector_folder('', 'MyFolder') # Create a folder at root level
xtdata.create_sector('MyFolder', 'MyBlock') # Create a sector under the folder
xtdata.add_sector('MyBlock', ['000001.SZ', '600000.SH']) # Add stocks to the sector
xtdata.remove_stock_from_sector('MyBlock', ['000001.SZ']) # Remove stocks from the sector
xtdata.reset_sector('MyBlock', ['600000.SH']) # Reset sector contents
xtdata.remove_sector('MyBlock') # Delete the sector指数成分股
# First download index weight data
xtdata.download_index_weight()
# Retrieve index constituent weights
weights = xtdata.get_index_weight('000300.SH')
# 收益率: {stock_code: weight, ...}可转债信息
# Download and retrieve convertible bond data
xtdata.download_cb_data()
data = xtdata.get_cb_data()新股申购信息
# Retrieve IPO subscription information
data = xtdata.get_ipo_info()ETF申赎清单
# Download and retrieve ETF creation/redemption information
xtdata.download_etf_info()
data = xtdata.get_etf_info()可用数据周期
`tick`, `1m`, `5m`, `15m`, `30m`, `1h`, `1d`, `1w`, `1mon`
---
数据字段参考
Tick数据字段
'time' # Timestamp
'lastPrice' # Latest price
'open' # Opening price
'high' # Highest price
'low' # Lowest price
'lastClose' # Previous close price
'amount' # Total turnover
'volume' # Total volume
'pvolume' # Raw total volume
'stockStatus' # Security status
'openInt' # Open interest
'lastSettlementPrice' # Previous settlement price
'askPrice' # Ask prices (list, 5 levels)
'bidPrice' # Bid prices (list, 5 levels)
'askVol' # Ask volumes (list, 5 levels)
'bidVol' # Bid volumes (list, 5 levels)
'transactionNum' # Number of transactionsK线数据字段(1m / 5m / 1d等)
'time' # Timestamp
'open' # Opening price
'high' # Highest price
'low' # Lowest price
'close' # Closing price
'volume' # Volume
'amount' # Turnover
'settelementPrice' # Settlement price
'openInterest' # Open interest
'preClose' # Previous close price
'suspendFlag' # Suspension flag: 0 - normal, 1 - suspended, -1 - resumed from today证券状态码
0,10 - Unknown 11 - Pre-open S 12 - Call auction C
13 - Continuous trading T 14 - Break B 15 - Closed E
16 - Volatility interrupt V 17 - Temporary halt P 18 - Closing call auction U
19 - Intraday call auction M 20 - Halted until close N 21 - Field retrieval error
22 - After-hours fixed price trading 23 - After-hours fixed price trading ended---
Level2数据
If your broker supports Level2 data:
l2quote — Level2实时行情快照
'time' # Timestamp
'lastPrice' # Latest price
'open' / 'high' / 'low' # Opening / Highest / Lowest price
'amount' / 'volume' # Turnover / Volume
'transactionNum' # Number of transactions
'pe' # 市盈率
'askPrice' / 'bidPrice' # Multi-level ask / bid prices
'askVol' / 'bidVol' # Multi-level ask / bid volumesl2order — Level2逐笔委托
'time' # Timestamp
'price' # Order price
'volume' # Order quantity
'entrustNo' # Order number
'entrustType' # Order type (0 - unknown, 1 - normal, 2 - fill-or-kill remainder cancel, 4 - best five levels, 5 - fill-or-cancel, 6 - best own side, 7 - best counterparty)
'entrustDirection' # Order direction (1 - buy, 2 - sell, 3 - cancel buy (SSE), 4 - cancel sell (SSE))l2transaction — Level2逐笔成交
'time' # Timestamp
'price' # Trade price
'volume' # Trade quantity
'amount' # Trade amount
'tradeIndex' # Trade record number
'buyNo' # Buyer order number
'sellNo' # Seller order number
'tradeType' # Trade type
'tradeFlag' # Trade flag (0 - unknown, 1 - active buy, 2 - active sell, 3 - cancellation (SZSE))l2quoteaux — 买卖汇总
'avgBidPrice' # Average bid price
'totalBidQuantity' # Total bid quantity
'avgOffPrice' # Average ask price
'totalOffQuantity' # Total ask quantity
'withdrawBidQuantity' # Total bid cancellation quantity
'withdrawOffQuantity' # Total ask cancellation quantityl2orderqueue — 最优买卖委托队列
'bidLevelPrice' / 'offerLevelPrice' # Bid / Ask price
'bidLevelVolume' / 'offerLevelVolume' # Bid / Ask volume
'bidLevelNumber' / 'offLevelNumber' # Bid / Ask order countl2transactioncount — 逐笔成交统计
Includes ddx/ddy/ddz indicators, net order/cancellation volumes, and buy/sell statistics categorized by order size (extra-large / large / medium / small orders).
l2thousand — 千档盘口
Up to 1000 levels of bid/ask prices and volumes.
limitupperformance — 涨停连板数据
'startUp' / 'endUp' # Limit-up start / end time
'breakUp' # Number of limit-up breaks
'sealCount' # Consecutive limit-up days
'sealVolRatio' # Seal-to-volume ratio
'direct' # Direction: 0 - none, 1 - limit up, 2 - limit downsnapshotindex — 快照指标
'volRatio' # Volume ratio
'speed1' / 'speed5' # 1-minute / 5-minute price change speed
'gainRate3/5/10' # 3/5/10-day price change percentage
'turnoverRate3/5/10' # 3/5/10-day turnover rateannouncement — 公告与新闻
'headline' # Headline
'summary' # Summary
'content' # Content
'type' # Type: 0 - other, 1 - financial reporthfiopv — 高频IOPV(100ms推送频率)
ETF IOPV data, including dynamic IOPV, limit-up/down IOPV, and premium/discount estimates.
fullspeedorderbook — 全速盘口(20档)
'bidPrice' / 'askPrice' # Multi-level bid / ask price list (levels 1-20)
'bidVolume' / 'askVolume' # Multi-level bid / ask volume list (levels 1-20)---
合约信息 Fields
'InstrumentName' # Instrument name
'ExchangeID' # Market code
'PreClose' # Previous close price
'UpStopPrice' # Daily upper price limit
'DownStopPrice' # Daily lower price limit
'FloatVolume' # Tradable shares
'TotalVolume' # Total shares
'PriceTick' # Minimum price increment
'VolumeMultiple' # Contract multiplier
'MainContract' # Main contract flag (1 - primary, 2 - secondary, 3 - tertiary)
'OpenDate' # IPO date / Listing date
'ExpireDate' # Delisting date or expiration date
'IsTrading' # Whether the instrument is tradable
'OptExercisePrice' # Option exercise price / Convertible bond conversion price
'OptionType' # Option type (-1 not an option, 0 call, 1 put)
'MaxLimitOrderVolume' # Maximum limit order volume
'MinLimitOrderVolume' # Minimum limit order volumeETF现金替代标志
0 - Cash substitution prohibited (stock required)
1 - Cash substitution allowed (use stock first, cash for shortfall)
2 - Cash substitution mandatory
3 - Non-SSE cash substitution with settlement
4 - Non-SSE mandatory cash substitution时间戳转换工具
import time
def conv_time(ct):
'''Convert millisecond timestamp to string format: conv_time(1476374400000) --> "20161014000000.000"'''
local_time = time.localtime(ct / 1000)
data_head = time.strftime('%Y%m%d%H%M%S', local_time)
data_secs = (ct - int(ct)) * 1000
return '%s.%03d' % (data_head, data_secs)使用技巧
---
进阶示例
批量下载多只股票历史数据
from xtquant import xtdata
import time
# Connect to miniQMT market data service
xtdata.connect()
# Define the stock list to download (common A-share stocks)
stock_list = [
'600519.SH', # Kweichow Moutai
'000001.SZ', # Ping An Bank
'300750.SZ', # CATL
'601318.SH', # Ping An Insurance
'000858.SZ', # Wuliangye
'600036.SH', # China Merchants Bank
'002594.SZ', # BYD
]
# Batch download daily K-line data (forward adjusted)
for stock in stock_list:
print(f"Downloading daily K-line data for {stock}...")
xtdata.download_history_data(stock, '1d', start_time='20230101', end_time='20241231')
time.sleep(0.5) # Add delay to avoid triggering rate limits
# Batch retrieve data and merge for analysis
all_data = {}
for stock in stock_list:
data = xtdata.get_market_data_ex(
[], # Empty list means all fields
[stock], # 股票代码 list
period='1d', # Daily K-line
start_time='20230101',
end_time='20241231',
dividend_type='front', # Forward adjusted
fill_data=True # Fill suspended trading data
)
df = data[stock]
all_data[stock] = df
print(f"{stock} retrieved {len(df)} records")
# Compare closing price trends across multiple stocks
import pandas as pd
close_df = pd.DataFrame({stock: all_data[stock]['close'] for stock in stock_list})
print("Latest closing prices:")
print(close_df.tail(5))实时行情监控 + 条件预警
from xtquant import xtdata
import datetime
# Connect to market data service
xtdata.connect()
# Define watchlist and alert conditions
watch_list = ['600519.SH', '000001.SZ', '300750.SZ']
alert_config = {
'600519.SH': {'upper': 1900.0, 'lower': 1700.0}, # Moutai: alert at 1900 or 1700
'000001.SZ': {'upper': 15.0, 'lower': 10.0}, # Ping An Bank: alert at 15 or 10
'300750.SZ': {'upper': 250.0, 'lower': 180.0}, # CATL: alert at 250 or 180
}
def on_realtime_data(datas):
"""Real-time quote callback — checks alert conditions on each push"""
now = datetime.datetime.now().strftime('%H:%M:%S')
for stock_code, tick_data in datas.items():
# Get latest price
last_price = tick_data['lastPrice']
pre_close = tick_data['lastClose']
# Calculate price change percentage
change_pct = (last_price - pre_close) / pre_close * 100 if pre_close > 0 else 0
print(f"[{now}] {stock_code}: Latest={last_price:.2f}, Change={change_pct:.2f}%")
# Check alert conditions
if stock_code in alert_config:
config = alert_config[stock_code]
if last_price >= config['upper']:
print(f" ⚠️ Alert: {stock_code} price {last_price:.2f} breached upper limit {config['upper']}")
elif last_price <= config['lower']:
print(f" ⚠️ Alert: {stock_code} price {last_price:.2f} breached lower limit {config['lower']}")
# Subscribe to Tick data for multiple stocks
for stock in watch_list:
xtdata.subscribe_quote(stock, period='tick', callback=on_realtime_data)
print("Real-time monitoring started, press Ctrl+C to exit...")
xtdata.run() # Block main thread, continuously receiving dataLevel2逐笔成交分析(大单跟踪)
from xtquant import xtdata
import pandas as pd
# Connect to market data service
xtdata.connect()
stock = '600519.SH'
# Download Level2 trade-by-trade data (requires L2 data permissions)
xtdata.download_history_data(stock, 'l2transaction', start_time='20240601', end_time='20240601')
# Retrieve trade-by-trade data
data = xtdata.get_market_data_ex([], [stock], period='l2transaction',
start_time='20240601', end_time='20240601')
df = data[stock]
if len(df) > 0:
# Convert trade amount to 10-thousands (wan yuan)
df['amount_wan'] = df['amount'] / 10000
# Categorize by trade amount (Extra-large >1M, Large >200K, Medium >50K, Small <50K)
df['order_size'] = pd.cut(
df['amount_wan'],
bins=[0, 5, 20, 100, float('inf')],
labels=['小单(<5万)', '中单(5-20万)', '大单(20-100万)', '特大单(>100万)']
)
# Statistics by trade direction and order size
# tradeFlag: 1=active buy, 2=active sell
buy_stats = df[df['tradeFlag'] == 1].groupby('order_size')['amount_wan'].sum()
sell_stats = df[df['tradeFlag'] == 2].groupby('order_size')['amount_wan'].sum()
print(f"\n{stock} Trade-by-Trade Statistics (unit: 10K yuan)")
print("=" * 50)
print("[Active Buy]")
print(buy_stats)
print("\n[Active Sell]")
print(sell_stats)
print(f"\nNet buy amount: {buy_stats.sum() - sell_stats.sum():.2f} (10K yuan)")财务数据筛选 — 低估值高成长选股
from xtquant import xtdata
import pandas as pd
# Connect to market data service
xtdata.connect()
# Retrieve A-share stock list
stock_list = xtdata.get_stock_list_in_sector('沪深A股')
print(f"Total A-shares: {len(stock_list)}")
# Download financial data
xtdata.download_financial_data(stock_list)
# Retrieve financial data
fin_data = xtdata.get_financial_data(stock_list)
# Build screening DataFrame
results = []
for stock, data_list in fin_data.items():
if not data_list:
continue
# Take the latest financial report
latest = data_list[-1] if isinstance(data_list, list) else data_list
# Extract key indicators
try:
roe = latest.get('du_return_on_equity', None) # 净资产收益率(ROE)
revenue_growth = latest.get('inc_revenue_rate', None) # Year-over-year revenue growth
profit_growth = latest.get('du_profit_rate', None) # Year-over-year net profit growth
eps = latest.get('s_fa_eps_basic', None) # Basic earnings per share
bps = latest.get('s_fa_bps', None) # Book value per share
gear = latest.get('gear_ratio', None) # Debt-to-asset ratio
if all(v is not None for v in [roe, revenue_growth, eps, bps]):
results.append({
'股票代码': stock,
'ROE(%)': roe,
'营收增长率(%)': revenue_growth,
'净利润增长率(%)': profit_growth,
'每股收益': eps,
'每股净资产': bps,
'资产负债率(%)': gear
})
except:
continue
df = pd.DataFrame(results)
# Screening criteria: ROE>15%, revenue growth>10%, net profit growth>10%, debt-to-asset ratio<70%
filtered = df[
(df['ROE(%)'] > 15) &
(df['营收增长率(%)'] > 10) &
(df['净利润增长率(%)'] > 10) &
(df['资产负债率(%)'] < 70)
].sort_values('ROE(%)', ascending=False)
print(f"\nScreened {len(filtered)} high-growth low-valuation stocks:")
print(filtered.head(20).to_string(index=False))板块管理 — Custom Stock Pools
from xtquant import xtdata
# Connect to market data service
xtdata.connect()
# Download sector classification data
xtdata.download_sector_data()
# View system sector list
sectors = xtdata.get_sector_list()
print("System sector list (first 20):")
for s in sectors[:20]:
print(f" {s}")
# Retrieve CSI 300 constituents
xtdata.download_index_weight()
hs300_weights = xtdata.get_index_weight('000300.SH')
print(f"\nCSI 300 has {len(hs300_weights)} constituents")
# Sort by weight, show top 10
sorted_weights = sorted(hs300_weights.items(), key=lambda x: x[1], reverse=True)
print("Top 10 by weight:")
for stock, weight in sorted_weights[:10]:
print(f" {stock}: {weight:.4f}")
# Create custom sector — save screened stocks as a watchlist
xtdata.create_sector_folder('', '我的策略') # Create folder
xtdata.create_sector('我的策略', '高ROE成长股') # Create sector
my_stocks = ['600519.SH', '000858.SZ', '601318.SH', '300750.SZ']
xtdata.add_sector('高ROE成长股', my_stocks) # Add stocks
# Verify sector contents
stocks_in_sector = xtdata.get_stock_list_in_sector('高ROE成长股')
print(f"\nCustom sector '高ROE成长股' contains {len(stocks_in_sector)} stocks:")
for s in stocks_in_sector:
print(f" {s}")多周期K线数据对比分析
from xtquant import xtdata
import pandas as pd
# Connect to market data service
xtdata.connect()
stock = '600519.SH'
# Download data for multiple periods
periods = ['1m', '5m', '15m', '30m', '1h', '1d']
for period in periods:
xtdata.download_history_data(stock, period, start_time='20240601', end_time='20240630')
# Retrieve data for each period and compute statistics
print(f"\n{stock} Multi-Period Data Statistics (June 2024)")
print("=" * 60)
for period in periods:
data = xtdata.get_market_data_ex([], [stock], period=period,
start_time='20240601', end_time='20240630',
dividend_type='front')
df = data[stock]
if len(df) > 0:
print(f"\n[{period} period] {len(df)} K-line bars")
print(f" Highest: {df['high'].max():.2f}")
print(f" Lowest: {df['low'].min():.2f}")
print(f" Average volume: {df['volume'].mean():.0f}")
print(f" Total turnover: {df['amount'].sum() / 1e8:.2f} (100M yuan)")可转债数据分析
from xtquant import xtdata
import pandas as pd
# Connect to market data service
xtdata.connect()
# Download convertible bond data
xtdata.download_cb_data()
cb_data = xtdata.get_cb_data()
print(f"Retrieved {len(cb_data)} convertible bonds")
# Download convertible bond market data (using a subset as example)
cb_codes = list(cb_data.keys())[:20] # Take the first 20
for code in cb_codes:
xtdata.download_history_data(code, '1d', start_time='20240101', end_time='20241231')
# Retrieve market data and analyze
results = []
for code in cb_codes:
data = xtdata.get_market_data_ex([], [code], period='1d', count=1)
if code in data and len(data[code]) > 0:
last = data[code].iloc[-1]
info = xtdata.get_instrument_detail(code)
results.append({
'转债代码': code,
'转债名称': info.get('InstrumentName', ''),
'最新价': last['close'],
'成交额(万)': last['amount'] / 10000,
})
df = pd.DataFrame(results)
print("\nConvertible bond market overview:")
print(df.to_string(index=False))ETF申赎清单与套利分析
from xtquant import xtdata
# Connect to market data service
xtdata.connect()
# Download ETF creation/redemption information
xtdata.download_etf_info()
etf_info = xtdata.get_etf_info()
print(f"Retrieved {len(etf_info)} ETF creation/redemption records")
# Compare ETF real-time quotes with IOPV (requires real-time data)
etf_list = ['510300.SH', '510050.SH', '510500.SH', '159919.SZ'] # Common broad-based ETFs
for etf in etf_list:
xtdata.download_history_data(etf, '1d', start_time='20240101', end_time='20241231')
data = xtdata.get_market_data_ex([], [etf], period='1d', count=5, dividend_type='none')
if etf in data and len(data[etf]) > 0:
df = data[etf]
info = xtdata.get_instrument_detail(etf)
print(f"\n{info.get('InstrumentName', etf)} ({etf}):")
print(f" Latest close: {df['close'].iloc[-1]:.4f}")
print(f" 5-day avg turnover: {df['amount'].mean() / 1e8:.2f} (100M yuan)")
print(f" 5-day change: {(df['close'].iloc[-1] / df['close'].iloc[0] - 1) * 100:.2f}%")---
社区与支持
由 **大佬量化 (BossQuant)** 维护 — 量化交易教学与策略研发团队。
微信客服: **bossquant1** · [Bilibili](https://space.bilibili.com/48693330) · 搜索 **大佬量化** — 微信公众号 / Bilibili / 抖音
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...