随期而动的期货/期权投资笔记

TqSdk 自动化交易:普通交易者 99 元云服务器方案

内容持续修订,过时部分会及时剔除

很多人以为自动化交易要先会写程序、买服务器、接柜台。其实对普通交易者,最小可用方案就三样:一个免费的 Python 库、一台 99 元一年的小服务器、一套写死了止损的规则。

三句话记住这篇

1. TqSdk 免费版够跑通回测、模拟和指定期货公司的实盘;需要更多账户和股票数据时,再考虑专业版。

2. 2 核 2G 云服务器足够跑一个日线或小时级策略,99 元买的是“不断电、不断网”,不是算力。

3. 自动化只放大你原本的期望值:正期望放大,负期望也放大;止损必须写在代码里,不能只写在脑子里。

一、先泼冷水:自动化不等于“躺着赚钱”

自动化交易的本质,是把“看到信号—下单—止损”这套动作交给程序执行。它不负责预测方向,也不负责把亏损变成盈利。程序真正的价值是:

反过来说,如果你的规则本身是负期望,自动化只会让你亏得更快、更稳定。所以这篇讲的是“怎么把规则跑起来”,不是“怎么找到一个赚钱规则”。如果你确定不想写代码,手工下单、套利和期权的工具可以看无限易这篇;下面只讲自动化。

普通交易者需要 普通交易者不需要
一台能 7×24 在线的机器 机房托管、专线、FPGA
Python 基础:变量、循环、函数 从零手写 C++ 交易网关
小时线或日线级别的规则 毫秒级抢单、做市商级延迟
模拟、回测、小资金实盘 一上来就全仓跑实盘

二、TqSdk 免费版,免费到什么程度

TqSdk 是天勤量化(信易科技)提供的 Python 期货量化库。它把行情、K 线、回测、模拟和实盘交易封装成 Python 接口,登录用“快期账户”,实盘再绑定期货资金账户。

免费版不是“只能看不能做”。按官网当前说明,免费版已经包含回测、模拟交易、期货与商品期权行情,以及指定期货公司的实盘交易。换句话说,普通交易者跑通第一套策略,通常不需要先买专业版。

能力 免费版 说明
Python API 支持 策略、行情、下单都在 Python 里完成
历史回测 不限次数 用 TqBacktest 回放历史行情
模拟交易 支持 TqSim 本地模拟,或 TqKq 快期模拟
实盘交易 指定期货公司 开户前先查支持名单,不在名单可能要专业版
行情范围 期货、商品期权、中金所期权 A 股、ETF 期权等属于专业版范围
专业版 按年付费 官网标价 14888 元/年,含更多账户、股票与 ETF 期权数据

这里有两个容易踩的点:

价格、支持名单和功能边界会调整,购买或开户前以天勤官网和期货公司的最新说明为准,别拿本文当报价单。

三、算一笔账:为什么是 99 元云服务器

策略跑在家里电脑上,最大的问题不是性能,而是“它可能会关”:停电、断网、系统更新、误碰电源、合上笔记本。云服务器的价值,就是把这些意外换成一份可预期的小账单。

一年的现金成本

TqSdk 免费版:0 元

阿里云 2 核 2G、3M 带宽、40G 系统盘:99 元/年(活动价,以购买页为准)

合计:99 元/年,平均每月 8 元出头。

对比一下家里常开的电脑:按整机平均 60W、电价 0.6 元/度粗算,一年电费约 315 元,还没算硬件折旧和断网风险。对只跑一个策略的人来说,99 元的小服务器更省心。

但 2 核 2G 有明确边界:

阿里云的 99 元档经常是“经济型 e 实例 + 固定配置”,新老用户、续费同价等规则会变,活动也有期限。买之前看清楚:配置能不能满足你、到期续费是什么价、地域和系统盘够不够。

四、从零跑通:七步

  1. 开期货账户,注册快期账户。 期货账户用于实盘,快期账户用于登录 TqSdk。只做模拟的话,先注册快期账户也能开始。
  2. 买一台小服务器。 选 2 核 2G、Ubuntu 22.04 或 24.04、40G 系统盘。安全组只开 SSH,别把 Python 服务端口暴露到公网。
  3. 装 Python 3.9+ 和 TqSdk。 用虚拟环境,避免污染系统 Python。
  4. 跑通一次行情。 先打印最新价,确认账号、网络、合约代码都没问题。
  5. 跑模拟。 用 TqSim 或 TqKq 至少跑两到四周,观察成交、拒单、断线重连。
  6. 做回测。 把成本、滑点、换月规则写进去,再看样本外。回测不过关,不要上实盘。
  7. 小资金实盘。 先确认期货公司的程序化交易报备和外接要求,再用最小手数跑一到三个月,确认执行和回撤都在可接受范围,再考虑放大。

服务器上装环境的命令大致如下(以 Ubuntu 为例):

在云服务器上安装
sudo timedatectl set-timezone Asia/Shanghai
sudo apt update
sudo apt install -y python3 python3-venv python3-pip

python3 -m venv ~/tqenv
source ~/tqenv/bin/activate
pip install tqsdk -i https://pypi.tuna.tsinghua.edu.cn/simple

先写一个最小的行情脚本,确认能连上:

hello_tqsdk.py
from tqsdk import TqApi, TqAuth

api = TqApi(auth=TqAuth("快期账户", "账户密码"))
quote = api.get_quote("SHFE.rb2701")   # 换成仍在交易的合约
print(quote.datetime, quote.last_price)
api.close()

运行 python hello_tqsdk.py,能看到行情时间与最新价,说明环境通了。正式跑策略时,用 nohup 或 systemd 让程序在 SSH 断开后继续运行;生产环境更推荐 systemd,因为它能自动重启、集中看日志。

账号密码不要进 Git

示例里的账号密码只是占位。实盘时用环境变量或服务器上的私有配置文件读取,别把明文密码提交到公开仓库;服务器只开必要端口,系统补丁也要定期更新。

五、最小策略骨架:均线 + 刚性止损

下面这段代码只做多、只跑一个品种、用上一根已完成 K 线判断,目的是展示“信号—下单—止损—退出”的完整结构。它用 20 周期均线判断方向,用 ATR(平均真实波幅,衡量正常波动)的 2 倍作为止损距离。它不是赚钱策略,参数也没有优化过,直接实盘会亏。

strategy.py(结构示例,不保证盈利)
from tqsdk import TqApi, TqAuth, TargetPosTask
from tqsdk.tafunc import ma

api = TqApi(auth=TqAuth("快期账户", "账户密码"))  # 默认 TqSim 模拟
quote = api.get_quote("KQ.m@SHFE.rb")
symbol = quote.underlying_symbol
klines = api.get_kline_serial(symbol, 60 * 60, data_length=300)
target = TargetPosTask(api, symbol)

entry = None
stop = None

try:
    while True:
        api.wait_update()
        if not api.is_changing(klines.iloc[-1], "datetime"):
            continue

        close = float(klines.close.iloc[-2])       # 上一根已完成 K 线
        ma20 = float(ma(klines.close, 20).iloc[-2])
        atr = float((klines.high - klines.low).rolling(14).mean().iloc[-2])
        atr = max(atr, close * 0.002)              # 简化 ATR,防止过小

        if entry is None:
            if close > ma20:
                target.set_target_volume(1)
                entry, stop = close, close - 2 * atr
                print("开多", symbol, "参考价", entry, "止损", stop)
        elif close < stop:
            target.set_target_volume(0)
            print("触发止损", close)
            entry, stop = None, None
finally:
    api.close()

模拟跑通后,实盘要把 TqApi(auth=...) 换成 TqApi(TqAccount(...), auth=...)(TqAccount 需从 tqsdk 导入),并先确认期货公司在免费版支持名单里;不要直接把模拟代码连上实盘。

这段骨架里,有几处是刻意简化、实盘必须补上的:

先想清楚“错了怎么办”

开仓前就要写死:止损价在哪、一手亏多少钱、账户最多承受几 R(1R = 单笔愿意亏的钱)、连续亏损几次停机。代码只是执行这些规则的工具,不是替你思考的合伙人。

六、上线前的检查表

检查项 合格标准
策略期望值 扣掉手续费和滑点后仍为正,且有样本外验证
最大回撤 在账户能承受的范围内,不靠“扛一扛”过关
止损 写在代码里,触发即平仓,不依赖人工盯盘
仓位 单笔亏损不超过账户的一个固定比例
断线处理 有日志、有重启、有最大持仓保护
换月 知道主力切换时程序会怎样,不会交易到不活跃合约
人工接管 能随时停机、撤单、平仓,不依赖程序自己恢复
资金规模 先用最小手数跑一到三个月,再谈放大

七、常见问题

免费版能直接实盘吗?

可以,但仅限指定期货公司。你的期货公司不在名单里,可能就需要专业版。先查名单,再开户,顺序别反。

2 核 2G 够不够,必须买云服务器吗?

跑一个日线或小时级策略,2 核 2G 通常够用;真正吃资源的是多品种 tick 回测、长时间历史数据下载和图形界面。服务器也不是必须的:旧电脑、迷你主机都能跑,前提是供电和网络稳定;树莓派要先确认 TqSdk 依赖是否兼容。云服务器的优势是不受家里停电断网影响,出问题容易重装;缺点是多一份年费,且要自己维护安全。

程序断了怎么办?

先看日志,再看持仓和委托,最后才重启。重启前要想清楚:现有仓位由谁接管、要不要先平掉、止损是否还有效。别让程序在“不知道自己有仓”的状态下重新开仓。

“自动化不是帮你找到优势,而是帮你把已有的优势执行到位;如果本来就没有优势,它只会把亏损执行得更整齐。”

— 本站体系札记
下一步

先把规则写清楚:交易系统的五个零件;再补上验证环节:回测与样本外。

如果你身边有人还在用家用电脑挂策略,把这篇转给他,先算清断电和断网的账。

← 返回首页