3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在JoinQuant(聚宽)平台上,想要在盘中获取股票的分钟级分时详细数据(如 open, high, low, close, volume, money)来进行动态选股,最推荐的方法是使用 get_bars 或 get_price 函数。这两个函数都支持获取分钟级别的数据。
以下是具体的实现方法和代码示例:
get_bars 函数(推荐)get_bars 函数获取速度快,且支持 include_now=True 参数,这意味着你可以获取到当前正在交易、尚未结束的这一分钟的快照数据,非常适合盘中实时选股。
核心参数说明:
security: 标的代码或代码列表(如 ['000001.XSHE', '000002.XSHE'])。count: 获取的分钟Bar数量。unit: 时间单位,设为 '1m' 表示1分钟线。fields: 需要获取的字段,如 ['date', 'open', 'high', 'low', 'close', 'volume', 'money']。include_now: 设为 True,包含当前时刻所在的分钟Bar。get_price 函数get_price 是最常用的历史数据获取函数,将 frequency 设置为 '1m' 即可获取分钟数据。
下面是一个完整的策略框架示例,演示如何在盘中每分钟获取指定股票池的分时数据,并根据自定义的逻辑进行选股:
# 导入聚宽函数库
import jqdata
def initialize(context):
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设定我们要监控的股票池(例如:平安银行、万科A)
g.watch_list = ['000001.XSHE', '000002.XSHE', '000004.XSHE']
# 盘中每分钟运行一次选股逻辑
run_daily(intraday_stock_selection, time='every_bar')
def intraday_stock_selection(context):
# 获取当前时间
current_time = context.current_dt
# 使用 get_bars 获取股票池中所有股票最近 1 分钟的数据
# include_now=True 表示包含当前这一分钟的实时快照数据
bars_dict = get_bars(g.watch_list, count=1, unit='1m',
fields=['date', 'open', 'high', 'low', 'close', 'volume', 'money'],
include_now=True, df=True)
# 遍历股票池,进行选股逻辑判断
for stock in g.watch_list:
# 获取该股票的 DataFrame 数据
df = bars_dict[stock]
if df.empty:
continue
# 提取最新一分钟的数据
latest_bar = df.iloc[-1]
minute_open = latest_bar['open']
minute_high = latest_bar['high']
minute_low = latest_bar['low']
minute_close = latest_bar['close']
minute_volume = latest_bar['volume']
minute_money = latest_bar['money']
# ==========================================
# 在这里编写你的盘中选股逻辑
# 例如:如果这一分钟内,最低价小于开盘价,且成交额大于100万,则打印并考虑买入
# ==========================================
if minute_low < minute_open and minute_money > 1000000:
log.info(f"[{current_time}] 选中股票 {stock}!当前分钟开盘:{minute_open}, 最低:{minute_low}, 成交额:{minute_money}")
# 如果账户中没有该股票,则买入100股作为示例
if context.portfolio.positions[stock].closeable_amount == 0:
order(stock, 100)
log.info(f"买入 {stock} 100股")
get_bars 可能会导致运行超时(模拟盘限制每个函数运行不超过1800秒)。建议在 before_trading_start 中先通过基本面或日线技术指标筛选出一个较小的候选池(如50-100只),然后在盘中仅对这个小候选池请求分钟数据。get_bars 返回多只股票数据且 df=True 时,返回的是一个以股票代码为 key,DataFrame 为 value 的字典(或者 MultiIndex DataFrame,取决于具体版本和参数),请注意正确解析。get_bars 的 include_now=True 获取的是当前分钟结束时的状态。如果在实盘/模拟盘中,它获取的是当前秒的快照。请确保你的逻辑不会因为这种微小差异产生严重的“未来函数”偏差。