← 返回文章列表
March 26, 2026
5 分钟阅读

ETF 投资组合自动再平衡:我们如何为 Tinkoff 投资编写机器人

ETF 投资组合自动再平衡:我们如何为 Tinkoff 投资编写机器人
#etf
#tinkoff
#再平衡
#投资组合
#机器人
#量化交易
#开源

ETF Balancer Bot 自动投资组合再平衡:机器人监控目标权重并代替您进行交易。

假设您有一个由四只 ETF 组成的投资组合:TMOS、TBRU、TRUR 以及卢布现金,每种各占 25%。市场上涨后,TMOS 涨到了 32%,而 TBRU 跌到了 18%。经典理论告诉我们:卖出涨的,买入跌的。这就是再平衡。

问题在于,手动操作非常痛苦。尤其是当您有多个账户、策略包含保证金交易、而且需要每小时进行一次再平衡时。我们编写了一个机器人来自动完成这一切。

TIEBB(Tinkoff Invest ETF Balancer Bot)是一个基于 TypeScript 的开源机器人,它连接 Tinkoff 投资 API,自动维持投资组合的目标配置。四种平衡模式、保证金交易、多账户支持、dry-run 测试模式。


概要

  • 开源(Apache 2.0)ETF 投资组合自动再平衡机器人
  • 4 种平衡模式:手动、按市值、按资产管理规模、去相关性
  • 保证金交易最高 4 倍杠杆,含风险管理
  • 多账户:无限数量的账户,每个都有独立配置
  • TypeScript + Bun — 快速、类型安全、无痛开发
  • Dry-run 模式 — 计算订单但不执行

为什么需要再平衡

投资组合再平衡概念

原理很简单:您设定投资组合中各资产的目标比例(例如 25% TMOS、25% TBRU、25% TRUR、25% RUB)。随着时间推移,市场波动导致实际比例偏离目标。再平衡就是通过卖出涨幅较大的资产、买入跌幅较大的资产,回到目标权重。

为什么这很重要:

  1. 风险控制 — 如果某一资产膨胀到投资组合的 60%,您就过度依赖单一工具
  2. 系统化获利了结 — 自动卖出涨幅较大的资产
  3. 逢低买入 — 自动加仓下跌的资产
  4. 纪律性 — 没有情绪,只有算法

手动操作的问题在于太累人。尤其是当:

  • 您有多个账户
  • 需要每小时再平衡(而非每季度一次)
  • 策略包含保证金交易
  • 需要考虑手数、最小金额和交易所交易时间

机器人工作原理

主循环

1. 检查莫斯科交易所是否开盘
2. 获取当前持仓和价格
3. 计算目标配置(4 种模式)
4. 生成订单:先卖后买
5. 以市价单执行
6. 等待 BALANCE_INTERVAL 后重复

机器人以无限循环运行。间隔可配置 — 从一分钟到一天。默认为一小时。

四种平衡模式

四种平衡模式

1. 手动模式(manual)

最简单的模式。您手动设定权重:

{
  "desired_wallet": {
    "TMOS": 25,
    "TBRU": 25,
    "TRUR": 25,
    "RUB": 25
  }
}

机器人将百分比归一化到 100% 并维持这些比例。

2. 按市值模式(marketcap)

权重与各基金的市值成正比。逻辑是:基金越大,占比越高。数据来源于 T-Bank 和 investfunds.ru 网站。

3. 按资产管理规模模式(aum)

权重与各基金的 AUM(资产管理规模)成正比。数据来源于 t-capital-funds.ru。反映了基金在投资者中的受欢迎程度。

4. 去相关性模式(decorrelation)

最有趣的模式。公式:

decorrelationPct = (marketCap - AUM) / AUM * 100
metric = max_decorrelationPct - individual_decorrelationPct
weight = metric / sum(metrics) * 100

思路是:找到市值与 AUM 存在差异的工具,并在这些指标之间进行平衡。如果市场对某基金的估值高于其管理资产 — 这是一个信号。

订单生成

机器人很智能:先卖后买。这很重要,因为:

  1. 卖出释放资金用于买入
  2. 不需要账户上预留现金
  3. 即使可用余额为零也能运作

所有工具按手数交易。机器人将目标金额转换为卢布 → 转换为手数 → 取整 → 生成订单。


高级功能

保证金交易

保证金交易

{
  "margin_trading": {
    "enabled": true,
    "multiplier": 2,
    "free_threshold": 5000,
    "max_margin_size": 50000,
    "balancing_strategy": "keep_if_small"
  }
}

机器人支持最高 4 倍杠杆。三种保证金管理策略:

  • keep — 始终持有保证金仓位
  • remove — 在交易日结束前平掉保证金
  • keep_if_small — 如果保证金规模低于阈值则保留

机器人自动判断交易所即将收盘(莫斯科时间 18:45),并自动应用策略。同时考虑隔夜持仓费用(超过 5000 卢布仓位的 1%)。

多账户

一个 CONFIG.json — 无限数量的账户。每个账户都有独立的:

  • API 令牌
  • 目标配置
  • 平衡模式
  • 再平衡间隔
  • 保证金设置
{
  "accounts": [
    {
      "id": "main_broker",
      "name": "主经纪账户",
      "desired_wallet": { "TMOS": 50, "TBRU": 50 },
      "balance_interval": 3600000
    },
    {
      "id": "iis_account",
      "name": "个人投资账户",
      "desired_wallet": { "TRUR": 100 },
      "balance_interval": 86400000
    }
  ]
}

最低利润阈值

{
  "min_profit_percent_for_close_position": 5
}

如果利润低于 5% 则不卖出仓位。或者反过来 — 设置 -2 作为止损(最大亏损 2%)。

Dry-run 模式

{
  "exchange_closure_behavior": {
    "mode": "dry_run",
    "update_iteration_result": true
  }
}

机器人计算所有订单并记录日志,但不发送到交易所。非常适合策略测试。

基于差异的调整

{
  "diff": "iteration",
  "diff_multiplier": 50
}

权重基于上次再平衡以来的变化(或当日开始以来)进行调整。乘数范围从 0 到 100,决定影响力度。


技术栈与架构

组件 技术
运行时 Bun 1.0+(或 Node.js 18+)
语言 TypeScript
API Tinkoff Invest gRPC(tinkoff-sdk-grpc-js
配置 CONFIG.json + .env
指标 Puppeteer(抓取市值、AUM)

为什么选择 Bun? 启动速度比 Node.js 快 20-30 倍,原生支持 TypeScript,内置测试运行器。对于启动后循环运行的机器人来说,这不是最关键的 — 但 Bun 在开发时更方便。

模块化架构:

  • Provider — 与 API 通信、管理投资组合
  • Balancer — 再平衡算法(4 种模式)
  • OrderManager — 订单生成与执行
  • MarginCalculator — 保证金与风险计算
  • Tools — 指标抓取、数据收集

快速开始

curl -fsSL https://bun.sh/install | bash

git clone https://github.com/suenot/tinkoff-invest-etf-balancer-bot.git
cd tinkoff-invest-etf-balancer-bot
bun install

cp .env-example .env
cp CONFIG.example.json CONFIG.json


bun run start          # 正常模式
bun run dev            # 调试模式
bun run dev -- --once  # 单次迭代

管理工具:

bun run accounts         # 可用账户列表
bun run config list      # 配置中的所有账户
bun run config validate  # 验证配置

限制与免责声明

  • 仅支持卢布计价的股票和基金。账户中的其他工具不会被操作。
  • 这是测试版。模型不保证盈利。
  • 您对交易结果承担全部责任。
  • 建议先使用 dry-run 模式。

试用


链接:


引用

@software{soloviov2026etfbalancer,
  author = {Soloviov, Eugen},
  title = {ETF 投资组合自动再平衡:Tinkoff 投资机器人},
  year = {2026},
  url = {https://marketmaker.cc/ru/blog/post/etf-balancer-bot-tinkoff},
  description = {基于 TypeScript 的开源机器人,用于在 Tinkoff 投资平台上自动进行 ETF 投资组合再平衡。}
}
免责声明:本文提供的信息仅用于教育和参考目的,不构成财务、投资或交易建议。加密货币交易涉及重大损失风险。

MarketMaker.cc Team

量化研究与策略

在 Telegram 中讨论
Newsletter

紧跟市场步伐

订阅我们的时事通讯,获取独家 AI 交易见解、市场分析和平台更新。

我们尊重您的隐私。您可以随时退订。