3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在股票量化交易中,内外盘数据是衡量市场多空博弈和资金主动买卖意愿的重要指标:
利用 QMT(迅投量化交易系统)提供的 get_bvol 和 get_svol 接口,我们可以实时计算外盘与内盘的比率(如外盘占比),捕捉资金的主动净流入方向,从而构建高胜率的资金流向择时策略。
QMT 提供了两个直接获取当前股票内外盘成交量的 ContextInfo 方法:
ContextInfo.get_bvol(stockcode)stockcode(如 '000001.SZ'),缺省为空时默认取当前主图代码。string 或 number。ContextInfo.get_svol(stockcode)stockcode(如 '000001.SZ'),缺省为空时默认取当前主图代码。string 或 number。total_vol = bvol + svolbuy_ratio = bvol / total_volbuy_ratio > 0.6(即主动买盘超过 60%),且内外盘总量具备一定规模时,判定多头资金强劲,执行买入/建仓。buy_ratio < 0.4(即主动卖盘超过 60%)时,判定空头力量占优,执行卖出/平仓。以下策略代码基于 QMT Python API 编写,实现了基于内外盘资金流向的主动择时逻辑:
#coding:gbk
import float
def init(ContextInfo):
# 设定股票池
ContextInfo.symbol = '000001.SZ'
ContextInfo.set_universe([ContextInfo.symbol])
# 绑定交易账号
ContextInfo.account = '6000000248'
ContextInfo.set_account(ContextInfo.account)
# 参数设置
ContextInfo.buy_threshold = 0.60 # 外盘占比高于60%买入
ContextInfo.sell_threshold = 0.40 # 外盘占比低于40%卖出
ContextInfo.trade_lots = 100 # 每次交易股数
print("主动买卖盘资金流向择时策略初始化完成!")
def handlebar(ContextInfo):
# 仅在最新 K 线运行(盘中 Tick 驱动或最新Bar)
if not ContextInfo.is_last_bar():
return
code = ContextInfo.symbol
# 获取内盘和外盘成交量
try:
bvol_str = ContextInfo.get_bvol(code)
svol_str = ContextInfo.get_svol(code)
bvol = float(bvol_str) if bvol_str else 0.0
svol = float(svol_str) if svol_str else 0.0
except Exception as e:
print(f"获取内外盘数据失败: {e}")
return
total_vol = bvol + svol
if total_vol <= 0:
return
# 计算主动买盘(外盘)占比
buy_ratio = bvol / total_vol
print(f"[{code}] 外盘(主动买): {bvol}, 内盘(主动卖): {svol}, 外盘占比: {buy_ratio:.2%}")
# 查询账户持仓
pos_list = get_trade_detail_data(ContextInfo.account, 'STOCK', 'POSITION')
hold_vol = 0
for pos in pos_list:
if pos.m_strInstrumentID == code.split('.')[0]:
hold_vol = pos.m_nCanUseVolume
break
# 交易决策
if buy_ratio >= ContextInfo.buy_threshold and hold_vol == 0:
print(f"[买入信号] 外盘占比 {buy_ratio:.2%} 达到买入阈值,执行买入!")
# 使用 passorder 市价/最新价买入
passorder(23, 1101, ContextInfo.account, code, 5, -1, ContextInfo.trade_lots, ContextInfo)
elif buy_ratio <= ContextInfo.sell_threshold and hold_vol > 0:
print(f"[卖出信号] 外盘占比 {buy_ratio:.2%} 降至卖出阈值,执行卖出!")
passorder(24, 1101, ContextInfo.account, code, 5, -1, hold_vol, ContextInfo)
ddx, ddy)和大单资金净流入做二次确认,过滤假突破。