获取信息函数
策略离不开数据。PTrade 的数据 API 分几层:当前周期 K 线(data 对象)、历史 K 线(get_history / get_price)、实时快照(get_snapshot)、财务基本面(get_fundamentals)、证券属性与成分(get_index_stocks / get_stock_status)。本章把最常用的整理成速查表。
一、当前周期行情:data 对象
在 handle_data 中,data[code] 返回当前周期的 BarData,直接取属性即可,无需调用接口:
def handle_data(context, data):
bar = data['600570.SS']
log.info('收 %s 量 %s' % (bar.close, bar.volume))
属性:open / high / low / close / volume / money / price,日线另有 preclose / high_limit / low_limit / is_open。分钟级别 preclose 等填充为 0。
二、历史行情:get_history
取最近 N 根 K 线,最常用:
get_history(count, frequency='1d', field=None, security_list=None,
fq=None, include=False, fill='nan', is_dict=False)
| 参数 | 说明 |
|---|---|
count | K 线根数 |
frequency | '1d'(默认)、'1m'/'5m'/'15m'/'30m'/'60m'/'120m'、'1w'、'mo' 等 |
field | 单字段 str 或多字段 list,默认 OHLCV+money+price |
security_list | 单代码 str 或代码 list,不传则用 set_universe 设的股票池 |
fq | None 不复权、'pre' 前复权、'post' 后复权、'dypre' 动态前复权 |
include | 是否包含当前周期,默认 False |
is_dict | True 返回 dict 格式,取数更快 |
# 取股票池全部股票近 5 日收盘价
df = get_history(5, '1d', 'close', security_list=g.security)
# 单只股票取近 20 日 OHLCV
df = get_history(20, '1d', ['open','high','low','close','volume'],
security_list='600570.SS', fq='dypre')
close_arr = df['close'].values # 转 numpy 数组供计算
停牌日不跳过,用停牌前数据填充、成交量为 0,可据此过滤停牌。该接口只能取 2005 年之后的数据。不要在
run_daily/run_interval里和handle_data同时刻调用,否则可能返回空。
三、历史行情:get_price
按日期段或按根数取历史行情,比 get_history 更灵活:
get_price(security, start_date=None, end_date=None, frequency='1d',
fields=None, fq=None, count=None, is_dict=False)
start_date和count二选一,不能同时传。- 返回 DataFrame,索引为
datetime,列为字段名。
# 取 2015 年 1 月日线开盘价
price_open = get_price('600570.SS', start_date='20150101',
end_date='20150131', frequency='1d')['open']
四、实时快照:get_snapshot
取盘中实时行情快照(仅交易),字段非常全:
snapshot = get_snapshot('600570.SS')
last_px = snapshot['600570.SS']['last_px'] # 最新价
up_px = snapshot['600570.SS']['up_px'] # 涨停价
down_px = snapshot['600570.SS']['down_px'] # 跌停价
vol_ratio = snapshot['600570.SS']['vol_ratio'] # 量比
trade_status = snapshot['600570.SS']['trade_status'] # 'TRADE' 等
常用字段:last_px / open_px / high_px / low_px / preclose_px / business_amount / business_balance / px_change_rate / vol_ratio / turnover_ratio / pe_rate / pb_rate / bid_grp / offer_grp(五档买卖盘)。
五、档位行情:get_gear_price
取指定代码的五档/十档买卖盘价格(仅交易):
gear = get_gear_price('600570.SS')
bid1 = gear['bid_grp'][1] # 买一档 [价格, 委托量, 委托笔数]
offer1 = gear['offer_grp'][1] # 卖一档
六、交易日期
| 函数 | 含义 |
|---|---|
get_trading_day(day) | 距当前 day 天前/后的交易日,day=0 取当日;返回 datetime.date |
get_trade_days(start_date=None, end_date=None, count=None) | 指定范围的交易日数组 |
get_all_trades_days(date=None) | 某日之前的全部交易日,最早 2005-01-04 |
get_trading_day_by_date(query_date, day=0) | 按自然日映射到交易日,适合固定日调仓 |
prev = get_trading_day(-1) # 上一交易日
days = get_trade_days(count=10) # 含当日在内的近 10 个交易日
七、证券属性与成分
| 函数 | 含义 |
|---|---|
get_stock_name(stocks) | 证券名称字典 |
get_stock_info(stocks, field=None) | 基础信息(名称、上市日、退市日) |
get_stock_status(stocks, query_type, query_date=None) | 是否 ST / 停牌 / 退市 |
filter_stock_by_status(stocks, filter_type, query_date=None) | 一次性剔除 ST/停牌/退市(仅 before_trading_start) |
get_index_stocks(index_code, date=None) | 指数成分股列表 |
get_industry_stocks(industry_code) | 行业成分股(代码尾缀 .XBHS) |
get_stock_blocks(stock_code) | 证券所属板块(行业/概念/地域,注意未来函数) |
get_Ashares(date=None) | 指定日期全部 A 股代码 |
check_limit(security, query_date=None) | 涨跌停状态:1 涨停、-1 跌停、0 正常 |
# 盘前过滤 ST、停牌、退市,得到干净股票池
def before_trading_start(context, data):
pool = get_index_stocks('000300.SS')
g.pool = filter_stock_by_status(pool, ['ST', 'HALT', 'DELISTING'])
set_universe(g.pool)
八、财务数据:get_fundamentals
取三大报表、估值、各项能力指标,支持按日期或按年份两种模式:
get_fundamentals(security, table, fields=None, date=None,
start_year=None, end_year=None, report_types=None, ...)
table 取值:valuation(估值)、balance_statement(资产负债表)、income_statement(利润表)、cashflow_statement(现金流量表)、growth_ability / profit_ability / eps / operating_ability / debt_paying_ability。
# 取资产总计
df = get_fundamentals('600570.SS', 'balance_statement',
fields='total_assets', date='20160628')
回测中建议不传
merge_type(默认首次发布数据)以避免未来函数;growth_ability等五张表是非 pit 数据,未发布的财报期返回 None,按日期请求要确认已披露。
九、持仓查询
| 函数 | 含义 |
|---|---|
get_position(security) | 单只标的持仓对象 |
get_positions(security=None) | 多只/全部持仓字典(不传取全部) |
get_all_positions() | 账户全部持仓(仅交易,含非量化标的) |
pos = get_position('600570.SS')
if pos and pos.enable_amount > 0:
order('600570.SS', -pos.enable_amount) # 卖出全部可用
十、指标计算函数
PTrade 内置常见技术指标,输入为 numpy 数组、输出为序列:
| 函数 | 返回 |
|---|---|
get_MACD(close, short=12, long=26, m=9) | (dif, dea, macd) 三个序列 |
get_KDJ(high, low, close, n=9, m1=3, m2=3) | (k, d, j) 三个序列 |
get_RSI(close, n=6) | rsi 序列 |
get_CCI(high, low, close, n=14) | cci 序列 |
def handle_data(context, data):
h = get_history(100, '1d', ['close','high','low'], security_list=g.security)
dif, dea, macd = get_MACD(h['close'].values, 12, 26, 9)
if dif[-1] > 0 and dea[-1] > 0 and macd[-2] < 0 and macd[-1] >= 0:
log.info('MACD 强势金叉')
十一、日志与其他
log.info('买入 %s' % g.security) # info / debug / warning / error / critical
is_trade() # True 交易 / False 回测
get_frequency() # 'daily' / 'minute'
get_business_type() # 'stock' / 'rzrq' / 'future'
小结
记住几组:data 对象取当前周期、get_history / get_price 取历史、get_snapshot 取实时、get_fundamentals 取财务、get_index_stocks / filter_stock_by_status 管股票池、get_position 查持仓。下一步学两融专属 API:融资融券函数。