多品种组合与TBPY

单品种策略跑通后,下一步通常是多品种组合(分散风险)和用 Python 开发(借助生态库)。 本章介绍 TBQuant 的多数据源写法和 TBPY(Python 接口)的基本用法,作为进阶起点。

多数据源(多品种)

一个策略可以同时订阅多个品种的数据源(Data0、Data1、Data2……),用 Range 遍历各图层:

Vars
    Series<Numeric> maVal;

Events
    OnBar(ArrayRef<Integer> indexs)
    {
        Integer id;
        Range[id = 0 : DataCount - 1]      // 遍历所有数据源
        {
            maVal = AverageFC(Close, 20);  // 每个品种都算 20 周期均线
            // 用 Data0 的信号决定 Data1 的下单……
        }
    }
  • DataCount 是数据源总数,Range[0:DataCount-1] 遍历每个图层。
  • Symbol 在 Range 内指向当前图层的合约代码,可据此区分品种做不同逻辑。
  • 跨周期策略也用多数据源:Data0 设大周期、Data1 设小周期,大周期定向、小周期择时。

多品种组合的好处是分散——不同品种涨跌不同步,组合后整体回撤往往比单品种小。

组合回测与投资分析

  • 在策略研究里加载多个品种的同一策略,可以做组合回测,看整体资金曲线。
  • 菜单 账户 → 投资分析:对策略交易记录做绩效分析,也支持导入外部交易记录、或只给一条净值曲线就出报告。
  • 关注组合层面的净利润、最大回撤、夏普等,而不仅看单品种。

TBPY:Python 接口

TBPY 让你用 Python 写策略、调行情、下单,享受 pandas/numpy 等生态。它作为客户端的扩展运行, 通过 tbpy 模块与 TBQuant 平台通信。

安装

  • 需要 Python 3.12(推荐用 Anaconda)。
  • 创建 conda 虚拟环境后,用 pip 安装官方提供的 tbpy wheel 包:
conda create -n py312 python=3.12
conda activate py312
pip install --force-reinstall tbpy-x.x.x.x-py3-none-any.whl

初始化与运行

import tbpy

tbpy.init(key="tbquant")   # 必须最先调用,连接 TBQuant 平台
# ... 写策略类、订阅数据 ...
tbpy.exe()                 # 开始运行策略
tbpy.exit()                # 结束

init 返回 True 表示连接成功,False 时用 tbpy.get_last_err() 查原因。

事件回调(与 TB 语言对应)

TBPY 用类方法实现事件回调,和 TB 语言的 OnInit/OnBar/OnTick/OnOrder/OnFill 一一对应:

TB 语言事件TBPY 回调
OnIniton_init(self, context)
OnBaron_bar(self, context, bars, symbol, flag)
OnTickon_tick(self, context, tick)
OnPositionon_position(self, context, position)
OnOrderon_order(self, context, order)
OnFillon_fill(self, context, fill)
OnTimeron_timer(self, context, timer_id, interval_millsecs)

订阅数据与下单

class MyStrategy:
    def on_init(self, context):
        # 订阅 Bar 和 Tick
        context.subscribe_bar(symbol='rb000.SHFE', frequency='1m')
        context.subscribe_tick(symbol='rb000.SHFE')

    def on_bar(self, context, bars, symbol, flag):
        for bar in bars:
            print(symbol, bar.close)
        # 取账户下单
        account = tbpy.get_account(account_id='085489')
        account.buy(symbol='rb000.SHFE', volume=1, price=4000)

tbpy.exe()

查询历史数据

# 取最近 10 根 1 分钟 Bar
data = tbpy.get_history_n(symbol='rb000.SHFE', frequency='1m', count=10,
                          flag=tbpy.QuoteFlag.RolloverBackWard)
# 返回 dict{field: ndarray},可直接喂给 numpy/pandas

get_history_n 返回的字段含 open/close/high/low/volume/position/time 等, 配合 numpy/pandas 做因子计算、机器学习都很方便。

TB 语言 vs TBPY 怎么选

维度TB 语言(策略)TBPY(Python)
上手类 C++/Pascal,门槛中等会 Python 即可
生态平台内置函数库pandas/numpy/sklearn 等全套
适合标准事件驱动策略、回测实盘数据分析、因子研究、机器学习策略
性能原生编译,较快依赖 Python,注意效率

两者可以互补:用 TBPY 做研究和因子计算,用 TB 语言策略做实盘执行。

小结

多品种用多数据源 + Range 遍历,组合回测看整体绩效;TBPY 让你用 Python 写策略、调行情、下单, 事件回调和 TB 语言一一对应,并能借力 Python 生态做因子研究与机器学习。到本章,TBQuant 从语法、函数、 回测、优化到组合与 TBPY 形成完整闭环。

下一步

回到 TBQuant 总览 查阅其他章节,或对比其他平台: 通达信 / 文华财经 / 天勤 tqsdk