Skip to content

Latest commit

 

History

History
404 lines (312 loc) · 10.5 KB

File metadata and controls

404 lines (312 loc) · 10.5 KB

聚宽(JoinQuant) API 速查手册

官方文档: https://www.joinquant.com/help/api/help?name=api 数据字典: https://www.joinquant.com/data/dict/fundamentals


一、策略框架函数

函数 说明 示例
initialize(context) 初始化函数,策略运行开始时调用一次 def initialize(context): ...
handle_data(context, data) 每日/每分钟调用(根据频率) def handle_data(context, data): ...
before_trading_start(context) 每天开盘前调用 def before_trading_start(context): ...
after_trading_end(context) 每天收盘后调用 def after_trading_end(context): ...

二、定时任务

# 每天运行
run_daily(func, time='09:30')

# 每周运行
run_weekly(func, weekday=1, time='09:30')  # weekday: 1=周一

# 每月运行
run_monthly(func, monthday=1, time='09:30')

三、数据获取函数

3.1 行情数据

函数 说明 返回
get_price(security, start_date, end_date, frequency, fields) 获取历史行情 DataFrame
get_bars(security, count, unit, fields, include_now) 获取固定数量K线 ndarray
current_data[security].last_price 获取当前最新价 float
get_current_data() 获取当前时刻所有数据 dict

frequency参数: 1d(日线), 1m(分钟), 5m, 15m, 30m, 60m fields参数: open, close, high, low, volume, money

3.2 指数成分股

# 获取指数成分股
stocks = get_index_stocks('000300.XSHG', date=None)  # 沪深300

# 获取指数权重
weights = get_index_weights('000300.XSHG', date=None)

常用指数代码:

指数 代码
沪深300 000300.XSHG
中证500 000905.XSHG
中证1000 000852.XSHG
上证50 000016.XSHG
创业板指 399006.XSHE
科创50 000688.XSHG

3.3 财务数据

# 查询财务数据
q = query(
    valuation.code,
    valuation.pe_ratio,
    valuation.market_cap
).filter(
    valuation.code.in_(stock_list)
)
df = get_fundamentals(q, date=None)

3.4 股票信息

函数 说明
get_security_info(code) 获取股票信息(名称、上市日期等)
get_all_securities(types=['stock'], date=None) 获取所有股票列表
get_trade_days(start_date, end_date) 获取交易日列表

四、财务数据表

4.1 valuation (估值表)

字段 说明
code 股票代码
pe_ratio 市盈率 (TTM)
pb_ratio 市净率
ps_ratio 市销率
pcf_ratio 市现率
capitalization 总股本(万股)
market_cap 总市值(亿元)
circulating_cap 流通股本(万股)
circulating_market_cap 流通市值(亿元)
turnover_ratio 换手率(%)
pe_ratio_lyr 市盈率(LYR, 上年年报)

4.2 indicator (财务指标表)

字段 说明
roe 净资产收益率(%)
roa 总资产收益率(%)
gross_profit_margin 销售毛利率(%)
net_profit_margin 销售净利率(%)
operating_profit_margin 营业利润率(%)
eps 每股收益(EPS)
inc_return 净资产收益率(扣非/摊薄)
adjusted_profit 扣非净利润

4.3 balance (资产负债表)

字段 说明
total_assets 资产总计
total_liability 负债合计
total_owner_equities 所有者权益合计
current_assets 流动资产合计
current_liability 流动负债合计
fixed_assets 固定资产
cash_equivalents 货币资金

4.4 cash_flow (现金流量表)

字段 说明
net_operate_cash_flow 经营活动现金流量净额
net_invest_cash_flow 投资活动现金流量净额
net_finance_cash_flow 筹资活动现金流量净额
cash_payment_of_tax 支付的各项税费

4.5 income (利润表)

字段 说明
revenue 营业收入
operating_profit 营业利润
net_profit 净利润
net_profit_ath_parent 归属母公司净利润

4.6 finance.STK_AH_PRICE_COMP (AH股价比较表)

使用方式:

from jqdata import finance

# 查询AH股溢价数据
df = finance.run_query(
    query(finance.STK_AH_PRICE_COMP)
    .filter(finance.STK_AH_PRICE_COMP.day == context.previous_date)
    .order_by(finance.STK_AH_PRICE_COMP.h_a_comp)
)
字段 类型 说明
day datetime 日期
a_code str A股代码 (如 '000002.XSHE')
h_code str H股代码 (如 '02202.XSEHK')
a_close float A股收盘价(元)
h_close float H股收盘价(港元)
a_volume float A股成交量(手)
h_volume float H股成交量(手)
h_a_comp float H股/A股比价 (h_a_comp > 1 表示H股溢价)
a_h_comp float A股/H股比价
exchange_rate float 汇率(1港币兑换多少人民币)
premium_rate float 溢价率(%)

溢价率解读:

  • h_a_comp > 1: H股价格高于A股(H股溢价),买入A股
  • h_a_comp < 1: A股价格高于H股(A股溢价),不操作
  • h_a_comp = 1: 价格相等

示例:

# 查询指定日期所有AH股溢价数据,按H股溢价降序排列
df = finance.run_query(
    query(
        finance.STK_AH_PRICE_COMP.a_code,
        finance.STK_AH_PRICE_COMP.h_code,
        finance.STK_AH_PRICE_COMP.h_a_comp,
        finance.STK_AH_PRICE_COMP.a_close,
        finance.STK_AH_PRICE_COMP.h_close
    )
    .filter(finance.STK_AH_PRICE_COMP.day == context.previous_date)
    .order_by(finance.STK_AH_PRICE_COMP.h_a_comp.desc())
)

# 筛选H股溢价的股票(h_a_comp > 1)
premium_stocks = df[df['h_a_comp'] > 1]

五、交易函数

5.1 下单函数

函数 说明 示例
order(id_or_ins, amount) 按股数下单 order('000001.XSHE', 100)
order_value(id_or_ins, value) 按金额下单 order_value('000001.XSHE', 10000)
order_target(id_or_ins, amount) 调整到目标股数 order_target('000001.XSHE', 200)
order_target_value(id_or_ins, value) 调整到目标金额 order_target_value('000001.XSHE', 0)

注意:

  • amount > 0 买入, amount < 0 卖出
  • order_target_value(stock, 0) 表示清仓

5.2 撤单

# 撤销指定订单
cancel_order(order_id)

# 撤销所有未完成订单
for order in get_open_orders().values():
    cancel_order(order)

六、持仓与账户

6.1 context.portfolio (账户信息)

属性 说明
portfolio_value 总资产
available_cash 可用资金
positions_value 持仓市值
total_returns 总收益率
daily_returns 日收益率
daily_pnl 日盈亏
positions 持仓字典

6.2 context.portfolio.positions (持仓信息)

for stock in context.portfolio.positions:
    pos = context.portfolio.positions[stock]
    print(f"股票: {stock}")
    print(f"持仓数量: {pos.total_amount}")
    print(f"可卖数量: {pos.closeable_amount}")
    print(f"成本价: {pos.avg_cost}")
    print(f"现价: {pos.price}")
    print(f"市值: {pos.value}")

七、过滤与筛选

7.1 ST/停牌过滤

current_data = get_current_data()

for stock in stock_list:
    # ST股过滤
    if current_data[stock].is_st:
        continue
    if 'ST' in current_data[stock].name or '*' in current_data[stock].name:
        continue

    # 停牌过滤
    if current_data[stock].paused:
        continue

7.2 涨跌停过滤

# 判断是否涨停(无法买入)
if current_data[stock].last_price >= current_data[stock].high_limit:
    continue

# 判断是否跌停(无法卖出)
if current_data[stock].last_price <= current_data[stock].low_limit:
    continue

八、设置函数

函数 说明 示例
set_benchmark(code) 设置基准 set_benchmark('000300.XSHG')
set_option(name, value) 设置选项 set_option('use_real_price', True)
set_slippage(slippage) 设置滑点 set_slippage(PriceRelatedSlippage(0.002))
set_order_cost(cost, type) 设置手续费 见下方示例
# 手续费设置示例
set_order_cost(
    OrderCost(
        open_tax=0,           # 买入时印花税
        close_tax=0.001,      # 卖出时印花税 (千分之一)
        open_commission=0.0003,  # 买入时佣金 (万分之三)
        close_commission=0.0003, # 卖出时佣金
        close_today_commission=0, # 平今仓佣金
        min_commission=5      # 最低佣金 5元
    ),
    type='stock'
)

九、日志输出

# 普通日志
log.info("信息日志")
log.warn("警告日志")
log.error("错误日志")

# 带格式的日志
log.info(f"当前持仓: {list(context.portfolio.positions.keys())}")

十、全局变量

使用 g 对象存储全局变量:

def initialize(context):
    g.stock_num = 5
    g.last_trade_date = None
    g.my_list = []

def trade(context):
    # 在其他函数中访问
    stock_num = g.stock_num

十一、常用代码片段

11.1 等权买入

def buy_equal_weight(context, stock_list):
    cash_per_stock = context.portfolio.available_cash / len(stock_list)
    for stock in stock_list:
        order_target_value(stock, cash_per_stock)

11.2 清仓所有持仓

def clear_all_positions(context):
    for stock in list(context.portfolio.positions.keys()):
        order_target_value(stock, 0)

11.3 获取N日均线

def get_ma(stock, n, date):
    df = get_price(stock, end_date=date, count=n, frequency='1d', fields='close')
    return df['close'].mean()

11.4 判断调仓日

def is_rebalance_day(context, last_date, interval_days):
    current_date = context.current_dt.date()
    if last_date is None:
        return True
    trade_days = get_trade_days(start_date=last_date, end_date=current_date)
    return len(trade_days) >= interval_days

十二、注意事项

  1. 回测环境 vs 研究环境: 带 ♤ 标记的API只能在回测/模拟中使用
  2. 数据延迟: 财务数据有发布延迟,使用时注意时间点
  3. 复权问题: 默认后复权,可用 set_option('use_real_price', True) 使用真实价格
  4. 交易单位: A股买卖单位为100股(1手)
  5. T+1: A股当日买入的股票当天不能卖出

整理时间: 2024年