简单但强大的 Python 量化开发包
基于 Python 语言, 在一个策略中访问任意K线和行情数据, 还能对交易细节和账户执行精确控制
一分钟安装, 策略开发/运行/回测, 模拟/实盘交易, 实时行情/历史行情等功能全部直接到位
天勤量化免费版的开发包在 Github 完全开放,可以自由获取或修改, 也可以与其它 Python 包组合使用
点击注册/登录信易账户,了解更多关于天勤量化专业版内容!
天勤提供当前所有可交易合约从上市开始的全部 Tick 数据和K线数据
天勤支持数十家期货公司的实盘账号,您可以通过这些账号进行实盘交易
天勤提供模拟账户用于测试您的交易策略
可以指定历史上任意一天的行情进行复盘
天勤提供一套完整的技术指标库, 以 Python 写成, 可以在策略程序中使用, 也可以自行修改
天勤包含了数个套利策略的完整代码, 您可以直接使用它们, 也可以按自己的需求改进
天勤包含了一个完整的网格交易策略的完整代码, 您可以使用或修改它
天勤中除完整策略外, 也支持人机混合的算法交易程序, 例如自动迁仓, 大单分拆等
无须安装其它任何软件包, 即可在天勤中开发策略程序
天勤为每个策略提供一个专属行情图. 策略程序可以通过 Python 代码在图上绘制标记
所有策略程序可以直接执行回测, 包括K线回测和 Tick 回测, 回测过程中实时生成回测报告
提供VsCode插件,直接在VsCode中打开K线图,运行策略和回测
from tqsdk import TqApi, TqAuth # 创建API实例 api = TqApi(auth=TqAuth("信易账户","信易账户密码")) # 获得上期所 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, TqAuth import datetime api = TqApi(auth=TqAuth("信易账户","信易账户密码")) # 获得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, TqAuth api = TqApi(auth=TqAuth("信易账户","信易账户密码")) # 获得 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, TqAuth, TargetPosTask ''' 价差回归 当近月-远月的价差大于200时做空近月,做多远月 当价差小于150时平仓 ''' api = TqApi(auth=TqAuth("信易账户","信易账户密码")) 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)
基于 Python 语言, 在一个策略中访问任意K线和行情数据, 还能对交易细节和账户执行精确控制
一分钟安装, 策略开发/运行/回测, 模拟/实盘交易, 实时行情/历史行情等功能全部直接到位
天勤量化免费版的开发包在 Github 完全开放,可以自由获取或修改, 也可以与其它 Python 包组合使用
天勤提供当前所有可交易合约从上市开始的全部 Tick 数据和K线数据
天勤支持上百家期货公司的实盘账号,其中重点合作的期货公司实盘交易免费,无需购买专业版
天勤提供模拟账户用于测试您的交易策略
可以指定历史上任意一天的行情进行复盘
from tqsdk import TqApi, TqAuth # 创建API实例 api = TqApi(auth=TqAuth("信易账户","信易账户密码")) # 获得上期所 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, TqAuth import datetime api = TqApi(auth=TqAuth("信易账户","信易账户密码")) # 获得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, TqAuth api = TqApi(auth=TqAuth("信易账户","信易账户密码")) # 获得 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, TqAuth, TargetPosTask ''' 价差回归 当近月-远月的价差大于200时做空近月,做多远月 当价差小于150时平仓 ''' api = TqApi(auth=TqAuth("信易账户","信易账户密码")) 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)