3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在股票交易中,内盘(Active Sell)和外盘(Active Buy)是判断市场多空力量对比的重要指标:
通过计算外盘与内盘的差值(外盘 - 内盘),我们可以得到主动性买入净额(即内外盘净流入)。当外盘显著大于内盘时,说明资金在主动流入,股价上涨概率较大;反之,则说明资金在流出。
QMT 提供了直接获取个股内盘和外盘成交量的接口:
ContextInfo.get_svol()ContextInfo.get_svol(stockcode)stockcode(股票代码,如 '000001.SZ')string(内盘成交量)ContextInfo.get_bvol()ContextInfo.get_bvol(stockcode)stockcode(股票代码,如 '000001.SZ')string(外盘成交量)策略逻辑:
handlebar 驱动中,实时获取目标股票的内盘成交量(svol)与外盘成交量(bvol)。Net_Ratio = (外盘 - 内盘) / (外盘 + 内盘)。0.15,即主动买盘比主动卖盘多出15%以上),且当前无持仓时,买入目标股票。-0.15),且当前持有仓位时,卖出平仓。请在 QMT 策略编辑器中新建 Python 策略,并粘贴以下代码:
#coding:gbk
def init(ContextInfo):
# 设置目标股票与资金账号
ContextInfo.stock = '600000.SH' # 浦发银行
ContextInfo.set_universe([ContextInfo.stock])
ContextInfo.account_id = '6000000248' # 请替换为您的真实/模拟资金账号
ContextInfo.set_account(ContextInfo.account_id)
# 策略参数设置
ContextInfo.threshold = 0.15 # 资金净流入比例阈值
print("资金流向策略初始化成功!")
def handlebar(ContextInfo):
# 仅在最后一根Bar(最新Tick驱动)执行交易逻辑
if not ContextInfo.is_last_bar():
return
stock = ContextInfo.stock
acc_id = ContextInfo.account_id
# 1. 获取内外盘数据
svol_str = ContextInfo.get_svol(stock)
bvol_str = ContextInfo.get_bvol(stock)
# 2. 数据类型转换与安全处理
try:
svol = float(svol_str) if svol_str else 0.0
bvol = float(bvol_str) if bvol_str else 0.0
except ValueError:
return
total_vol = svol + bvol
if total_vol == 0:
return
# 3. 计算净流入比例
net_inflow_ratio = (bvol - svol) / total_vol
# 4. 获取当前持仓状态
holding_vol = 0
position_info = get_trade_detail_data(acc_id, 'STOCK', 'POSITION')
for pos in position_info:
if pos.m_strInstrumentID == stock:
holding_vol = pos.m_nVolume
break
# 5. 信号判断与下单交易
if net_inflow_ratio > ContextInfo.threshold and holding_vol == 0:
# 资金强劲流入,买入100股
print(f"【买入信号】净流入比例: {net_inflow_ratio:.2%}, 大于阈值 {ContextInfo.threshold:.2%}")
passorder(23, 1101, acc_id, stock, 5, -1, 100, '资金流向策略', 1, ContextInfo)
elif net_inflow_ratio < -ContextInfo.threshold and holding_vol > 0:
# 资金强劲流出,卖出平仓
print(f"【卖出信号】净流出比例: {abs(net_inflow_ratio):.2%}, 大于阈值 {ContextInfo.threshold:.2%}")
passorder(24, 1101, acc_id, stock, 5, -1, holding_vol, '资金流向策略', 1, ContextInfo)
get_svol 与 get_bvol 在盘中实时行情下表现最精准。回测模式下,其数值取决于历史分笔数据的完整度。