两种开发方式

在 TBQuant 里「写代码」有两个入口:公式应用策略。两者语法同源(都是 TB 语言), 但用途、结构、能否下单完全不同。先认清自己要哪种,少走弯路。

一句话区分

  • 公式应用:用来写指标、画线、做技术分析,不能下单,类似通达信的技术指标公式。
  • 策略:事件驱动,能调用 Buy/Sell 等交易函数自动下单、做回测、跑实盘——程序化交易的主战场

公式应用(技术分析)

公式应用直接加载到图表上,通过语句控制输出数据和线型,帮你直观分析行情。

结构上偏「公式段」风格,核心是计算 + 输出(用 PlotNumeric 等画线),没有交易动作:

// 双均线指标(公式应用)
Vars
    Numeric maFast;
    Numeric maSlow;
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        maFast = AverageFC(Close, 5);
        maSlow = AverageFC(Close, 20);
        PlotNumeric("MAFast", maFast);    // 画快线
        PlotNumeric("MASlow", maSlow);    // 画慢线
    }
  • PlotNumeric 把数值画到图表上,类似通达信的 : 输出。
  • 公式应用分两类:技术分析类(画线/输出,如上)和交易策略类(在图上标买卖点)。
  • 公式应用不能独立下单,但可以在图表上做信号标注,辅助你手动决策。

策略(事件驱动交易)

策略是 TBQuant 的核心。用 Params / Vars / Events 三段式组织代码,在事件回调里写逻辑,能真正下单:

// 双均线策略(事件驱动,可下单)
Params
    Numeric FastLen(5);
    Numeric SlowLen(20);
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(1, Open);                  // 真实下单:金叉买开
        If (MarketPosition == 1 && CrossUnder(maFast, maSlow))
            Sell(0, Open);                 // 真实下单:死叉卖平
    }
  • Buy / Sell / SellShort / BuyToCover 是真正的交易动作,回测时模拟成交,实盘时发真实委托。
  • 策略既能加载到图表看信号,也能在「策略交易」工作区里实盘运行。

两者对比

维度公式应用策略
目的画指标、技术分析自动交易、回测、实盘
能否下单不能
代码结构计算段 + 输出段Params / Vars / Events 三段式
触发每根 K 线重算事件回调(OnBar 等)
加载位置图表图表(看信号)/ 策略交易(实盘)
还有一种简语言策略(麦语言写法)

此外还有用户函数:被公式应用或策略调用的「子程序」,返回一个值,不能单独加载到图表。 相当于你把常用计算封装成函数复用。

怎么选

  • 只想画个自定义指标辅助看盘 → 公式应用
  • 想让程序自动买卖、跑回测、上实盘 → 策略(本手册后续章节都以策略为主线)。
  • 习惯麦语言(文华/通达信)写法 → 可以试简语言策略,用麦语言语法在 TBQuant 里跑。

即使用简语言,底层仍是事件驱动;理解事件模型依然必要。

新建一个策略

菜单 策略 → 公式编辑器,工具栏点「新建策略」,填简称(唯一标识,字母数字下划线,不能数字开头)、名称、模板、分组、注释,确定后进入代码编辑器。 系统自带 DualMA(双均线)等示例策略,建议先打开读一遍。

小结

公式应用 = 画线分析、不下单;策略 = 事件驱动、能交易。本手册后续都聚焦策略开发。

下一步

策略的核心是事件驱动,下一章帮你建立「事件回调」的思维方式: 事件驱动模型入门