聚宽量化(JoinQuant)
聚宽 是中国领先的在线量化交易平台,提供免费数据查询、策略回测和模拟交易。支持A股、期货、基金、指数等品种,采用事件驱动的Python策略框架。
⚠️ 需要在 https://www.joinquant.com 注册账号。策略运行在聚宽云端,也可以通过JQData在本地获取数据。
安装 (Local Data SDK)
bash
pip install jqdatasdk
本地数据认证
python
import jqdatasdk as jq
使用聚宽账号登录(每日免费数据额度)
jq.auth(your
username, yourpassword)
查看剩余数据额度
print(jq.get
querycount())
策略程序结构(在线回测)
聚宽策略采用事件驱动架构,在平台网页界面编写和运行:
python
def initialize(context):
初始化函数 — 策略启动时调用一次
# 设置基准指数(沪深300)
set_benchmark(000300.XSHG)
# 设置手续费和滑点
setordercost(OrderCost(opentax=0, closetax=0.001,
opencommission=0.0003, closecommission=0.0003,
min_commission=5), type=stock)
set_slippage(FixedSlippage(0.02))
# 设置股票池
g.security = 000001.XSHE
def handle_data(context, data):
盘中事件 — 每个交易频率触发一次
security = g.security
# 获取最近20天收盘价
closedata = attributehistory(security, 20, 1d, [close])
ma5 = close_data[close][-5:].mean()
ma20 = close_data[close].mean()
# 金叉 — 买入
if ma5 > ma20:
ordertargetvalue(security, context.portfolio.total_value * 0.9)
# 死叉 — 卖出
elif ma5 < ma20:
order_target(security, 0)
股票代码格式
| 市场 | 后缀 | 示例 |
|---|
| 上海A股 | .XSHG | 600000.XSHG(浦发银行) |
| 深圳A股 |
.XSHE | 000001.XSHE(平安银行) |
| 指数 | .XSHG/.XSHE | 000300.XSHG(沪深300) |
| 期货 | .XDCE/.XZCE/.XSGE/.CCFX | IF2401.CCFX(股指期货) |
| 基金 | .XSHG/.XSHE | 510300.XSHG(沪深300ETF) |
数据查询函数(JQData)
行情数据
python
import jqdatasdk as jq
获取日K线数据
df = jq.get_price(
000001.XSHE, # 股票代码
start_date=2024-01-01, # 开始日期
end_date=2024-06-30, # 结束日期
frequency=daily, # 频率: daily(日), minute(分钟), 1m, 5m, 15m, 30m, 60m, 120m
fields=[open, close, high, low, volume, money],
skip_paused=True, # 跳过停牌日
fq=pre, # 复权: None(不复权), pre(前复权), post(后复权)
panel=False # False返回DataFrame
)
获取多只股票数据
df = jq.get_price([000001.XSHE, 600000.XSHG],
start
date=2024-01-01, enddate=2024-06-30,
frequency=daily, fields=[close], panel=False)
获取分钟级数据
df = jq.get
price(000001.XSHE, startdate=2024-06-01 09:30:00,
end_date=2024-06-01 15:00:00, frequency=1m)
获取最近N条数据
python
获取最近20个交易日的收盘价
df = jq.get_bars(000001.XSHE, count=20, unit=1d, fields=[close, volume])
财务数据
python
查询财务指标
df = jq.get_fundamentals(
jq.query(
jq.valuation.code,
jq.valuation.market_cap, # 总市值(亿元)
jq.valuation.pe_ratio, # 市盈率
jq.valuation.pb_ratio, # 市净率
jq.valuation.turnover_ratio, # 换手率
jq.indicator.roe, # 净资产收益率(ROE)
jq.indicator.eps, # 每股收益
jq.indicator.revenue, # 营业收入
jq.indicator.net_profit, # 净利润
).filter(
jq.valuation.pe_ratio > 0, # 排除亏损股
jq.valuation.pe_ratio < 30, # PE小于30
jq.valuation.market_cap > 100 # 市值大于100亿元
).order_by(
jq.valuation.market_cap.desc() # 按市值降序排列
).limit(50), # 取前50
date=2024-06-30
)
print(df)
指数成分股
python
获取沪深300成分股
stocks = jq.get
indexstocks(000300.XSHG)
print(f沪深300共 {len(stocks)} 只成分股)
获取行业成分股
stocks = jq.get
industrystocks(I64) # 银行业
行业分类
python
获取股票所属行业
industry = jq.get_industry(000001.XSHE)
print(industry)
获取申万一级行业列表
industries = jq.get
industries(name=swl1)
print(industries)
交易日历
python
获取交易日列表
days = jq.get
tradedays(start
date=2024-01-01, enddate=2024-06-30)
获取全部交易日
all
days = jq.getall
tradedays()
股票基本信息
python
获取全部A股上市公司
stocks = jq.get
allsecurities(types=[stock], date=2024-06-30)
print(fA股总数: {len(stocks)})
获取单只股票信息
info = jq.get
securityinfo(000001.XSHE)
print(f名称: {info.display
name}, 上市日期: {info.startdate})
获取ST股票
st
stocks = jq.getextras(is
st, [000001.XSHE], startdate=2024-01-01, end_date=2024-06-30)
龙虎榜数据
python
获取龙虎榜数据
df = jq.get
billboardlist(stock
list=None, startdate=2024-06-01, end_date=2024-06-30)
print(df.head())
融资融券数据
python
获取融资融券汇总数据
df = jq.get
mtss(000001.XSHE, startdate=2024-01-01, end_date=2024-06-30)
print(df.head())
交易函数(在线策略)
按数量下单
python
买入100股
order(000001.XSHE, 100)
卖出200股
order(000001.XSHE, -200)
限价买入
order(000001.XSHE, 100, LimitOrderStyle(11.50))
市价买入
order(000001.XSHE, 100, MarketOrderStyle())
调仓到目标
python
调仓到目标数量
order_target(000001.XSHE, 1000) # 调整至持有1000股
order_target(000001.XSHE, 0) # 清仓
调仓到目标金额
order
targetvalue(000001.XSHE, 100000) # 调整至10万元市值
调仓到目标比例(占总资产)
order
targetpercent(000001.XSHE, 0.3) # 调整至总资产的30%
撤单
python
获取未成交订单
open
orders = getopen_orders()
#