官方文档: 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' )
函数
说明
返回
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
# 获取指数成分股
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
# 查询财务数据
q = query (
valuation .code ,
valuation .pe_ratio ,
valuation .market_cap
).filter (
valuation .code .in_ (stock_list )
)
df = get_fundamentals (q , date = None )
函数
说明
get_security_info(code)
获取股票信息(名称、上市日期等)
get_all_securities(types=['stock'], date=None)
获取所有股票列表
get_trade_days(start_date, end_date)
获取交易日列表
字段
说明
code
股票代码
pe_ratio
市盈率 (TTM)
pb_ratio
市净率
ps_ratio
市销率
pcf_ratio
市现率
capitalization
总股本(万股)
market_cap
总市值(亿元)
circulating_cap
流通股本(万股)
circulating_market_cap
流通市值(亿元)
turnover_ratio
换手率(%)
pe_ratio_lyr
市盈率(LYR, 上年年报)
字段
说明
roe
净资产收益率(%)
roa
总资产收益率(%)
gross_profit_margin
销售毛利率(%)
net_profit_margin
销售净利率(%)
operating_profit_margin
营业利润率(%)
eps
每股收益(EPS)
inc_return
净资产收益率(扣非/摊薄)
adjusted_profit
扣非净利润
字段
说明
total_assets
资产总计
total_liability
负债合计
total_owner_equities
所有者权益合计
current_assets
流动资产合计
current_liability
流动负债合计
fixed_assets
固定资产
cash_equivalents
货币资金
字段
说明
net_operate_cash_flow
经营活动现金流量净额
net_invest_cash_flow
投资活动现金流量净额
net_finance_cash_flow
筹资活动现金流量净额
cash_payment_of_tax
支付的各项税费
字段
说明
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 ]
函数
说明
示例
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) 表示清仓
# 撤销指定订单
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 } " )
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
# 判断是否涨停(无法买入)
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
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 )
def clear_all_positions (context ):
for stock in list (context .portfolio .positions .keys ()):
order_target_value (stock , 0 )
def get_ma (stock , n , date ):
df = get_price (stock , end_date = date , count = n , frequency = '1d' , fields = 'close' )
return df ['close' ].mean ()
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
回测环境 vs 研究环境 : 带 ♤ 标记的API只能在回测/模拟中使用
数据延迟 : 财务数据有发布延迟,使用时注意时间点
复权问题 : 默认后复权,可用 set_option('use_real_price', True) 使用真实价格
交易单位 : A股买卖单位为100股(1手)
T+1 : A股当日买入的股票当天不能卖出
整理时间: 2024年