安装
https://doc.shinnytech.com/tqsdk/latest/quickstart.html
pip install tqsdk
demo - 登录帐号
from tqsdk import TqApi, TqAccount, TqAuth, TqMultiAccount, TqKq, TqSim
# 不管使用哪方的模拟交易或实盘交易账号,都需搭配快期帐号使用
# 信易科技官网:https://www.shinnytech.com/
# 模拟帐号-simnow
api = TqApi(TqAccount("simnow", "simnow用户名", "simnow密码"), auth=TqAuth("快期账户", "账户密码"))
# 模拟帐号-simnow多帐号
tqacc1 = TqAccount("simnow", "账户1", "密码1")
tqacc2 = TqAccount("simnow", "账户2", "密码2")
tqacc3 = TqAccount("simnow", "账户3", "密码3")
api = TqApi(account=TqMultiAccount([tqacc1,tqacc2,tqacc3]), auth=TqAuth("快期账户", "账户密码"))
# 模拟帐号-天勤
api = TqApi(TqSim(), auth=TqAuth("快期账户", "账户密码"))
# 模拟帐号-快期多帐号
tq_kq = TqKq() # 创建模拟账户
tq_kq001= TqKq(number=1) # 创建模拟账户001
api = TqApi(account=TqMultiAccount([tq_kq,tq_kq001]), auth=TqAuth("快期账户", "账户密码"))
print(tq_kq.get_account()) # 打印快期模拟账户信息
print(tq_kq001.get_account()) # 打印快期模拟001账户信息
# 实盘帐号-宏源期货:交易服务器和行情服务器
api = TqApi(TqAccount("H宏源期货", "022631", "123456"), auth=TqAuth("快期账户", "账户密码"))
demo - 功能
from tqsdk import TqApi, TqAuth
api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 【登录】快期帐号
quote = api.get_quote("SHFE.ni2206") # 【行情】订阅最新tick
print(quote.last_price, quote.volume)
while True:
api.wait_update() # 阻塞:等待行情更新
print (quote.datetime, quote.last_price)
klines = api.get_kline_serial("SHFE.ni2206", 10) # 行情】订阅最新kline 10秒
print("最后一根K线收盘价", klines.close.iloc[-1])
while True:
api.wait_update()
print("最后一根K线收盘价", klines.close.iloc[-1])
account = api.get_account() # 【账户】资金
position = api.get_position("DCE.m1901")
print("可用资金: %.2f" % (account.available))
print("今多头: %d 手" % (position.volume_long_today))
order = api.insert_order(symbol="DCE.m2105", direction="BUY", offset="OPEN", volume=5, limit_price=3000) # 【订单】委托
print("委托单状态: %s, 已成交: %d 手" % (order.status, order.volume_orign - order.volume_left))
api.cancel_order(order) # 【订单】撤单
demo - 突破均线策略
klines = api.get_kline_serial("DCE.m2105", 60)
while True:
api.wait_update()
if api.is_changing(klines):
ma = sum(klines.close.iloc[-15:])/15
print("最新价", klines.close.iloc[-1], "MA", ma)
if klines.close.iloc[-1] > ma:
print("最新价大于MA: 市价开仓")
api.insert_order(symbol="DCE.m2105", direction="BUY", offset="OPEN", volume=5)
demo - 算法交易
# 创建 ni2010 的目标持仓 task,该 task 负责调整 ni2010 的仓位到指定的目标仓位
target_pos_near = TargetPosTask(api, "SHFE.ni2010")
# 创建 ni2011 的目标持仓 task,该 task 负责调整 ni2011 的仓位到指定的目标仓位
target_pos_deferred = TargetPosTask(api, "SHFE.ni2011")
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)
demo - 策略回测
demo - 模拟交易
from tqsdk import TqApi, TqAuth, TqKq
api = TqApi(TqKq(), auth=TqAuth("快期账户", "账户密码"))
demo - 实盘交易
from tqsdk import TqApi, TqAuth, TqAccount
api = TqApi(TqAccount("H宏源期货", "412432343", "123456"), auth=TqAuth("快期账户", "账户密码")) # 【登录】期货公司帐号