行情与交易函数
策略的本质是「读行情 → 做判断 → 下单」。本章把 TBQuant 里最常用的行情数据和交易函数讲清楚, 掌握这些就能写出能跑的双均线级别的策略。
Bar 行情数据
OnBar 里可以直接引用当前 K 线(Bar)的行情数据,它们都是序列,可用 [N] 回溯:
| 数据 | 含义 |
|---|---|
Open | 开盘价 |
High | 最高价 |
Low | 最低价 |
Close | 收盘价 |
Vol | 成交量 |
OpenInt | 持仓量(期货) |
Time | 当前 Bar 时间 |
Date | 当前 Bar 日期 |
CurrentBar | 当前 Bar 序号(从 0 开始) |
Numeric yestClose = Close[1]; // 上一根 Bar 的收盘价
Numeric barIdx = CurrentBar; // 当前是第几根 K 线
在
OnBar中,Close指当前这根 K 线的收盘价。历史回测时它已确定;实盘的最后一根 Bar 上它随行情变动—— 因此用CrossOver(Close, ...)判断穿越要小心信号闪烁,官方建议改用High/Low判断突破。
实时盘口函数(Q_ 系列)
实盘或看盘时,要取实时盘口数据(非 K 线),用 Q_ 前缀函数:
| 函数 | 含义 |
|---|---|
Q_Last | 最新价 |
Q_AskPrice / Q_AskVol | 卖一价 / 卖一量 |
Q_BidPrice / Q_BidVol | 买一价 / 买一量 |
Q_UpperLimit / Q_LowerLimit | 涨停价 / 跌停价 |
Q_TotalVol / Q_TurnOver | 当日成交量 / 成交额 |
Q_OpenInt | 当日持仓量 |
Q_系列是实时快照,回测(历史 Bar)里通常没有意义,主要用于OnTick或实盘精细下单。
四个交易函数
TBQuant 用四个函数覆盖期货的「开多/平多/开空/平空」:
| 函数 | 动作 | 持仓变化 |
|---|---|---|
Buy(Share, Price) | 多头建仓(买开) | 持仓 → 多 |
Sell(Share, Price) | 多头平仓(卖平) | 多 → 平 |
SellShort(Share, Price) | 空头建仓(卖开) | 持仓 → 空 |
BuyToCover(Share, Price) | 空头平仓(买平) | 空 → 平 |
函数签名(四个一致):
Bool Buy(Numeric Share=0, Numeric Price=0, Integer signalFlag=0)
Share:手数。0表示用系统设置的手数;Sell/BuyToCover省略时平掉全部该方向持仓。Price:委托价。0表示现价(历史 Bar 上取Close);填Open/Close用对应价。- 返回
Bool,执行成功为True。
Buy(1, Open); // 用开盘价买开 1 手
Sell(0, Close); // 用收盘价平掉所有多头
SellShort(2, 4000); // 用 4000 的价格卖开 2 手
BuyToCover(1, 0); // 用现价买平 1 手
智能切换:若当前持空仓时调用
Buy,平台会先平掉所有空仓再开多(除非设置了允许双向持仓)。
持仓状态 MarketPosition
MarketPosition 表示当前持仓方向,是判断「该不该开/平仓」的关键:
| 值 | 含义 |
|---|---|
1 | 持有多头仓位 |
0 | 空仓(持平) |
-1 | 持有空头仓位 |
典型用法——只在空仓时开仓,避免重复加仓:
If (MarketPosition != 1 && CrossOver(maFast, maSlow))
Buy(1, Open);
配套的还有 Position(持仓结构体,含手数、均价、盈亏等),在 OnPosition 事件里更新。
账户资金函数
需要查账户资金时用 A_ 前缀函数:
| 函数 | 含义 |
|---|---|
A_FreeMargin | 可用资金 |
A_CurrentEquity | 动态权益 |
A_TotalMargin | 占用保证金 |
A_ProfitLoss | 浮动盈亏(按结算价) |
这些函数按账户返回,多账户时配合
A_AccountID等指定账户。
完整示例:双均线策略
Params
Numeric FastLen(5);
Numeric SlowLen(20);
Numeric Lots(1);
Vars
Numeric maFast;
Numeric maSlow;
Events
OnBar(ArrayRef<Integer> indexs)
{
maFast = AverageFC(Close, FastLen);
maSlow = AverageFC(Close, SlowLen);
If (MarketPosition != 1 && CrossOver(maFast, maSlow))
Buy(Lots, Open); // 金叉买开
If (MarketPosition == 1 && CrossUnder(maFast, maSlow))
Sell(0, Open); // 死叉全平
}
小结
- 行情用
Open/High/Low/Close/Vol(Bar 数据),实时盘口用Q_系列。 - 四个交易函数:
Buy(买开)、Sell(卖平)、SellShort(卖开)、BuyToCover(买平)。 MarketPosition判断持仓方向,避免重复开仓;账户资金用A_系列。
下一步
策略里除了行情和交易,还需要统计指标(均线、标准差、交叉判断)来做决策信号: 统计与指标函数。