Install
openclaw skills install qmt-devQMT平台开发专用技能。当用户说"QMT"、"实盘"、"QMT策略"、"QMT回测"、"QMT开发"时自动触发。提供QMT API规范、核心函数机制、止损监控方式、实盘注意事项。适用于使用QMT平台的量化策略开发。
openclaw skills install qmt-dev版本:1.0.0 适用平台:迅投QMT量化交易平台
| 函数 | 用途 | 触发时机 | 说明 |
|---|---|---|---|
init() | 初始化 | 策略启动时 | 加载信号、设置参数、设置股票池 |
handlebar() | K线处理 | 每根K线 | 主要逻辑,买入/卖出/止损 |
| 场景 | is_last_bar() 返回值 | 止损检查 |
|---|---|---|
| 回测 | 每根K线都返回True | ✅ 每天检查 |
| 实盘 | 只在特定时刻返回True | ❌ 盘中可能不检查 |
关键理解:
is_last_bar()都返回Trueis_last_bar()只在特定时刻返回True(可能是收盘时)结论:
is_last_bar()控制止损/止盈检查def handlebar(ContextInfo):
"""每根K线都会触发"""
# 止损监控(每5分钟检查一次)
now = datetime.now()
if G.last_check_time:
elapsed = (now - G.last_check_time).total_seconds() / 60
if elapsed >= 5: # 每5分钟检查
check_stop_loss(ContextInfo)
G.last_check_time = now
# 买入逻辑(可以保留is_last_bar()限制)
if not ContextInfo.is_last_bar():
return
# 买入逻辑...
def handlebar(ContextInfo):
"""每根K线都会触发"""
# 每5根K线检查一次止损
if ContextInfo.bar_count % 5 == 0:
check_stop_loss(ContextInfo)
# 全局状态对象
class GlobalState:
pass
G = GlobalState()
def init(ContextInfo):
"""初始化"""
# 全局状态
G.waiting_list = []
G.sent_orders = set()
G.buy_prices = {} # 记录买入价格
G.last_check_time = None
# 加载信号
with open('trading_signals/alphagbm_signals_qmt.json') as f:
data = json.load(f)
G.signals = [s['code'] for s in data['signals']]
# 设置股票池
ContextInfo.set_universe(G.signals)
def handlebar(ContextInfo):
"""每根K线触发"""
# 1. 止损监控(每5分钟)
now = datetime.now()
if G.last_check_time:
elapsed = (now - G.last_check_time).total_seconds() / 60
if elapsed >= 5:
check_stop_loss(ContextInfo)
G.last_check_time = now
# 2. 检查waiting_list
if check_waiting_orders(ContextInfo):
return
# 3. 买入逻辑(只在最后一根K线)
if not ContextInfo.is_last_bar():
return
# 买入...
# ❌ 错误
passorder(23, 1101, accID, code, -1, ...) # prType=-1(价格不可控)
# ✅ 正确
passorder(23, 1101, accID, code, 14, ...) # prType=14(对手价)
# 初始化
G.waiting_list = []
G.sent_orders = set()
# 买入时记录
if code not in G.sent_orders:
passorder(...)
G.sent_orders.add(code)
G.waiting_list.append(msg)
# 检查waiting_list
def check_waiting_orders(ContextInfo):
for msg in G.waiting_list[:]:
order_result = get_trade_detail_data(...)
if order_result:
G.waiting_list.remove(msg)
QMT层面:
代码层面:
is_last_bar()控制止损检查技能版本:1.0.0