模拟与实盘

策略回测通过后,不能直接上实盘——先用模拟盘在实时行情下验证,确认没问题再切到实盘。TqSdk 的「一套代码三种模式」设计让这个切换极其简单:只改 TqApi 的账户参数,策略代码一行不用动。

三种账户类型对比

账户类型行情撮合资金持久化费用
本地模拟TqSim()实时本地撮合程序结束即丢失免费
快期模拟TqKq()实时服务器撮合长期保存免费
实盘TqAccount(...)实时交易所撮合真实资金需专业版

TqSim:本地模拟

最轻量的模拟方式,所有撮合在本地完成:

from tqsdk import TqApi, TqAuth, TqSim

api = TqApi(TqSim(), auth=TqAuth("快期账户", "账户密码"))

特点:

  • 初始资金默认 1000 万,可通过 TqSim(init_balance=100000) 自定义。
  • 限价单需达到对手价才成交;市价单用对手价成交。
  • 不会部分成交——要么全成,要么不成。
  • 程序结束后数据全部丢失(除非用 TqKq)。
  • 回测模式下只能TqSim

可以自定义手续费和保证金,使模拟更接近实盘:

sim = TqSim(init_balance=100000)
sim.set_commission("SHFE.rb2410", 3.5)   # 每手手续费 3.5 元
sim.set_margin("SHFE.rb2410", 0.1)       # 保证金比例 10%
api = TqApi(sim, auth=TqAuth("快期账户", "账户密码"))

TqKq:快期模拟

快期模拟账户在服务器端撮合,资金和持仓长期保存,与快期 APP、快期专业版互通:

from tqsdk import TqApi, TqAuth, TqKq

api = TqApi(TqKq(), auth=TqAuth("快期账户", "账户密码"))

特点:

  • 行情是真实实时行情,交易是模拟撮合。
  • 可以通过快期 APP 的「模拟银行」进行出入金。
  • 账户可以重置。
  • 适合策略上线前的最终验证。

如果创建 TqApi不传任何账户参数,默认就是 TqSim()——一个临时本地模拟,程序结束即清空。

TqAccount:实盘交易

实盘交易需要期货公司的真实账户,属于专业版功能(需购买或申请试用):

from tqsdk import TqApi, TqAuth, TqAccount

# 参数:期货公司名(前面加大写首缀)、账号、密码
api = TqApi(
    TqAccount("H宏源期货", "412432343", "123456"),
    auth=TqAuth("快期账户", "账户密码")
)

期货公司名格式

期货公司名前需加大写字母前缀

  • "H海通期货""H宏源期货""N南华期货"
  • H 表示该期货公司的 CTP 主席,N 表示次席
  • 完整列表见 TqSdk 支持的期货公司

登录失败常见原因

报错原因与解决
CTP:不合法登录期货账号/密码/席位错误,检查 H/N 前缀
CTP:客户端认证失败需联系期货公司绑定 APPID
超时异常行情服务连不上或期货公司服务器关闭
try:
    api = TqApi(TqAccount("H宏源期货", "账号", "密码"),
                auth=TqAuth("快期账户", "账户密码"))
except Exception as e:
    print("登录失败:", e)

快期账户与实盘绑定

  • 每个快期账户最多绑定 3 个实盘账户
  • 首次使用实盘时会自动绑定。
  • 如需解绑/重绑,到 快期用户管理中心 操作(解绑每天限一次)。

从模拟到实盘的切换

核心改动只有一行——TqApi 的第一个参数:

# 回测模式
api = TqApi(TqSim(), backtest=TqBacktest(...), auth=TqAuth(...))

# 本地模拟(代码不改,去掉 backtest 参数即可)
api = TqApi(TqSim(), auth=TqAuth(...))

# 快期模拟(服务器保存数据)
api = TqApi(TqKq(), auth=TqAuth(...))

# 实盘
api = TqApi(TqAccount("期货公司", "账号", "密码"), auth=TqAuth(...))

策略逻辑代码完全不变。 这正是 TqSdk 设计精妙之处。

实盘安全建议

  1. 先用模拟盘跑通:任何策略上线前,至少在 TqKq 快期模拟上跑一个完整交易日。
  2. 设置风控:用 TqSim 测试时养成设置 init_balance 的习惯,实盘注意 account.risk_ratio(风险度)不要过高。
  3. 跨交易日重启:建议每天开盘前重启策略程序,避免隔夜状态问题。
  4. 紧急停止:提前准备好手动干预方案——可以用 api.cancel_order() 撤所有单,或直接终止程序后调用 api.close()
  5. 日志记录:开启 debug=True 输出调试信息到文件,便于事后排查。

小结

  • TqSim 本地模拟,轻量但数据不保存;回测只能用它。
  • TqKq 快期模拟,服务器保存数据,是上线前的最终验证。
  • TqAccount 实盘交易,需专业版,期货公司名加大写前缀。
  • 三种模式只改 TqApi 第一个参数,策略代码不动。
  • 实盘前务必模拟验证,做好风控和日志。

期货之外,TqSdk 还支持期权交易。接下来了解期权的基本用法: 期权基本使用