0
+
用户数
0
+
已上线期货公司
0
+
实盘报单量
Python语言
基于python语言, 在一个策略中访问任意K线和行情数据, 还能对交易细节和账户执行精确控制
即装即用
一分钟安装, 策略开发/运行/回测, 模拟/实盘交易, 实时行情/历史行情等功能全部直接到位
免费开源
天勤量化开发包在 Github 完全开放,可以自由获取或修改, 也可以与其它 python 包组合使用.
了解 天勤 1.0.0 版本的 新增功能!
数据支持
天勤提供当前所有可交易合约从上市开始的全部Tick数据和K线数据
实盘交易
天勤支持数十家期货公司的实盘账号,您可以通过这些账号进行实盘交易
模拟交易
天勤提供模拟交易账号, 用于测试您的交易策略
历史复盘
可以指定历史上任一天, 整个软件, 行情数据和策略程序都回到那天运行
Python策略开发
无须安装其它任何软件包, 即可在天勤中开发策略程序
可视化分析
天勤为每个策略提供一个专属行情图. 策略程序可以通过Python代码在图上绘制标记
Tick级策略回测
所有策略程序可以直接执行回测, 包括K线回测和Tick回测, 回测过程中实时生成回测报告
VsCode插件
提供VsCode插件,直接在VsCode中打开K线图,运行策略和回测
技术指标库
天勤提供一套完整的技术指标库, 以Python写成, 可以在策略程序中使用, 也可以自行修改
套利策略
天勤包含了数个套利策略的完整代码, 您可以直接使用它们, 也可以按自己的需求改进
网格策略
天勤包含了一个完整的网格交易策略的完整代码, 您可以使用或修改它
算法交易
天勤中除完整策略外, 也支持人机混合的算法交易程序, 例如自动迁仓, 大单分拆等
代码示例
获取实时行情
from tqsdk import TqApi # 创建API实例 api = TqApi() # 获得上期所 cu1812 的行情引用,当行情有变化时 quote 中的字段会对应更新 quote = api.get_quote("SHFE.cu1812") while True: # 调用 wait_update 等待业务信息发生变化,例如: 行情发生变化, 委托单状态变化, 发生成交等等 api.wait_update() # 每当业务信息有变化时就输出 cu1812 的最新行情时间和最新价 # 注意:其他合约的行情的更新也会触发业务信息变化,因此这里可能会将同一笔行情输出多次 print(quote.datetime, quote.last_price)
使用K线数据
from tqsdk import TqApi import datetime api = TqApi() # 获得cu1812 tick序列的引用 ticks = api.get_tick_serial("SHFE.cu1812") # 获得cu1812 10秒K线的引用 klines = api.get_kline_serial("SHFE.cu1812", 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() # 获得 m1901 的持仓引用,当持仓有变化时 position 中的字段会对应更新 position = api.get_position("DCE.m1901") # 获得资金账户引用,当账户有变化时 account 中的字段会对应更新 account = api.get_account() # 下单并返回委托单的引用,当该委托单有变化时 order 中的字段会对应更新 order = api.insert_order(symbol="DCE.m1901", direction="BUY", offset="OPEN", volume=5) 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)