天勤量化(TqSdk)

简单但强大的Python量化开发包

0 +
用户数
0 +
已上线期货公司
0 +
实盘报单量

Python语言

基于python语言, 在一个策略中访问任意K线和行情数据, 还能对交易细节和账户执行精确控制

即装即用

一分钟安装, 策略开发/运行/回测, 模拟/实盘交易, 实时行情/历史行情等功能全部直接到位

免费开源

天勤量化开发包在 Github 完全开放,可以自由获取或修改, 也可以与其它 python 包组合使用.

数据支持

天勤提供当前所有可交易合约从上市开始的全部Tick数据和K线数据

实盘交易

天勤支持数十家期货公司的实盘账号,您可以通过这些账号进行实盘交易

模拟交易

天勤提供模拟交易账号, 用于测试您的交易策略

历史复盘

可以指定历史上任一天, 整个软件, 行情数据和策略程序都回到那天运行

Python策略开发

无须安装其它任何软件包, 即可在天勤中开发策略程序

可视化分析​

天勤为每个策略提供一个专属行情图. 策略程序可以通过Python代码在图上绘制标记

Tick级策略回测

所有策略程序可以直接执行回测, 包括K线回测和Tick回测, 回测过程中实时生成回测报告

VsCode插件

提供VsCode插件,直接在VsCode中打开K线图,运行策略和回测

技术指标库

天勤提供一套完整的技术指标库, 以Python写成, 可以在策略程序中使用, 也可以自行修改

套利策略​

天勤包含了数个套利策略的完整代码, 您可以直接使用它们, 也可以按自己的需求改进

网格策略

天勤包含了一个完整的网格交易策略的完整代码, 您可以使用或修改它

算法交易

天勤中除完整策略外, 也支持人机混合的算法交易程序, 例如自动迁仓, 大单分拆等

代码示例

from tqsdk import TqApi

# 创建API实例 
api = TqApi()
# 获得上期所 cu2001 的行情引用,当行情有变化时 quote 中的字段会对应更新
quote = api.get_quote("SHFE.cu2001")

while True:
    # 调用 wait_update 等待业务信息发生变化,例如: 行情发生变化, 委托单状态变化, 发生成交等等
    api.wait_update()
    # 每当业务信息有变化时就输出 cu2001 的最新行情时间和最新价
    # 注意:其他合约的行情的更新也会触发业务信息变化,因此这里可能会将同一笔行情输出多次
    print(quote.datetime, quote.last_price)
from tqsdk import TqApi
import datetime

api = TqApi()
# 获得cu2001 tick序列的引用
ticks = api.get_tick_serial("SHFE.cu2001")
# 获得cu2001 10秒K线的引用
klines = api.get_kline_serial("SHFE.cu2001", 10)

while True:
    api.wait_update()
    # 判断整个tick序列是否有变化
    if api.is_changing(ticks):
        # ticks.iloc[-1]返回序列中最后一个tick
        print("tick变化", ticks.iloc[-1])
    # 判断最后一根K线的时间是否有变化,如果发生变化则表示新产生了一根K线
    if api.is_changing(klines.iloc[-1], "datetime"):
        # datetime: 自unix epoch(1970-01-01 00:00:00 GMT)以来的纳秒数
        print("新K线", datetime.datetime.fromtimestamp(klines.iloc[-1]["datetime"]/1e9))
    # 判断最后一根K线的收盘价是否有变化
    if api.is_changing(klines.iloc[-1], "close"):
        # klines.close返回收盘价序列
        print("K线变化", datetime.datetime.fromtimestamp(klines.iloc[-1]["datetime"]/1e9), klines.close.iloc[-1])

from tqsdk import TqApi

api = TqApi()
# 获得 m2005 的持仓引用,当持仓有变化时 position 中的字段会对应更新
position = api.get_position("DCE.m2005")
# 获得资金账户引用,当账户有变化时 account 中的字段会对应更新
account = api.get_account()
# 下单并返回委托单的引用,当该委托单有变化时 order 中的字段会对应更新
order = api.insert_order(symbol="DCE.m2005", direction="BUY", offset="OPEN", volume=5, limit_price=2900)

while True:
    api.wait_update()
    if api.is_changing(order, ["status", "volume_orign", "volume_left"]):
        print("单状态: %s, 已成交: %d 手" % (order.status, order.volume_orign - order.volume_left))
    if api.is_changing(position, "volume_long_today"):
        print("今多头: %d 手" % (position.volume_long_today))
    if api.is_changing(account, "available"):
        print("可用资金: %.2f" % (account.available))
from tqsdk import TqApi, TargetPosTask

'''
价差回归
当近月-远月的价差大于200时做空近月,做多远月
当价差小于150时平仓
'''
api = TqApi()
quote_near = api.get_quote("SHFE.rb1810")
quote_deferred = api.get_quote("SHFE.rb1901")
# 创建 rb1810 的目标持仓 task,该 task 负责调整 rb1810 的仓位到指定的目标仓位
target_pos_near = TargetPosTask(api, "SHFE.rb1810")
# 创建 rb1901 的目标持仓 task,该 task 负责调整 rb1901 的仓位到指定的目标仓位
target_pos_deferred = TargetPosTask(api, "SHFE.rb1901")

while True:
    api.wait_update()
    if api.is_changing(quote_near) or api.is_changing(quote_deferred):
        spread = quote_near.last_price - quote_deferred.last_price
        print("当前价差:", spread)
        if spread > 200:
            print("目标持仓: 空近月,多远月")
            # 设置目标持仓为正数表示多头,负数表示空头,0表示空仓
            target_pos_near.set_target_volume(-1)
            target_pos_deferred.set_target_volume(1)
        elif spread < 150:
            print("目标持仓: 空仓")
            target_pos_near.set_target_volume(0)
            target_pos_deferred.set_target_volume(0)

我自己也封装过CTP分布式接口,感觉天勤的API接口,才是真正理解交易的开发商做出来的软件,领先免费开源软件两个段位,领先收费商用软件一个段位。

山外看山天勤用户

这是我见过的最好的API,比****,****等好很多,最主要就是数据不需要自己收集。

大漠孤烟天勤用户

天勤的文档是我看过的,最详细的。

lll天勤用户

学习和支持

要学习天勤的使用或寻求支持,请访问天勤学习和支持页面