【大麦小米学量化】使用天勤TqSdk实现期货量化交易(入门)

酱香拿铁的故事

有一天,小米问大麦:“听说期货很恐怖,很多人亏得裤衩都不剩了。”
大麦:“那是他们重仓交易还不设止损,期货可以很方便的设置止盈止损,会止损的才能不被撵下赌桌。”
“期货是赌博?那我可不玩!”,小米忙挥手摇头,似怕粘上邪气一般。
“赌博和投资也就一念之差,关键看你对时局的把握!”,大麦若有所思,自言自语喃喃说道。
紧接着大麦又补充说:“投资期货,就是在交易风险!杠杆又放大了风险,所以你还是把钱存银行吧!”
小米立刻反驳道:“你小瞧人,我可以用量化规避风险!”
“哦,这么说你知道天勤量化喽?”
“哪里哪里,我才想去学呢,大哥可教我否?”
“这也不难,每天给我送杯酱香拿铁就行!”


言归正传,量化交易,其实最早是在黄金、外汇(MT4/MT5),后来有各种期货的量化交易软件,国内有文华财经、金字塔、MC量化等。今天我们来讨论下,如何使用python进行调用天勤TqSdk来实现期货量化交易。

提示:以下是本篇文章正文内容,下面案例仅供参考

一、TqSdk 是什么?

TqSdk 是一个由 信易科技 发起并贡献主要代码的开源 python 库. 依托 快期多年积累成熟的交易及行情服务器体系 , TqSdk 支持用户使用很少的代码量构建各种类型的量化交易策略程序, 并提供包含 历史数据-实时数据-开发调试-策略回测-模拟交易-实盘交易-运行监控-风险管理 的全套解决方案。

天勤的这个python库,是作者简单最容易理解,并适合初学者上手的量化库。

二、准备工作

1. 安装tqsdk库(Python环境提前准备好)

天勤量化的核心是TqSdk开发包, 在安装天勤量化 (TqSdk) 前, 你需要先准备适当的环境和Python包管理工具, 包括:
Python >=3.6.4,3.7,3.8,3.9 版本,我在3.10版本安装也是没有问题的。

Windows 7 以上版本, Mac Os, 或 Linux,Win10、Win11安装也不会有问题。

推荐采用 pip 命令安装/升级 TqSdk,命令行如下(前提是您已经安装python环境,推荐安装Anaconda,自带python运行环境和配套各种库,省去很多麻烦):

pip install tqsdk -U -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 注册快期账户

天勤的期货软件叫快期,也有APP。我们要用天勤做来量化,也得先注册一下快期账户。进入天勤量化主页,使用手机号码即可用手机号码直接注册,非常方便。
https://www.shinnytech.com/tianqin/

3. 支持的期货公司(更新以官方公布为准)

https://www.shinnytech.com/blog/tq-support-broker/
可直接使用 申请后才能使用 支持ETF期权
A安粮期货 F方正中期 W五矿经易_ETF
B倍特期货 H弘业期货 N南华期货_ETF
B宝城期货 Y银河期货 G国泰君安_ETF
B渤海期货 G国联期货 G光大期货_ETF
C创元期货 D东证期货 G国元期货_ETF
C长城期货 G光大期货 H宏源期货_ETF
C长江期货 S申万期货
D东华期货 H华泰期货
D东方汇金 D东航期货
D东海期货 C长安期货
D大地期货 Z中金岭南期货
D大有期货 G国泰君安
D大越期货 X信达期货
D大陆期货 Z紫金天风
F福能期货 D东吴期货 D东吴期货_苏州
D第一创业 Z中金财富
G冠通期货 Y永安期货
G国信期货
G国元期货
G国富期货
G广州期货
G国投安信
G国新国证期货
G国海良时
G国盛期货
G国贸期货
G国金期货
G国际期货
G广发期货
G广金期货
G格林大华
G港信期货
H华创期货
H华安期货
H华金期货
H华鑫期货
H华闻期货
H华龙期货
H和合期货
H和融期货
H宏源期货
H徽商期货
H恒力期货
H恒泰期货
H海航期货
H海证期货
H海通期货
H混沌天成
H红塔期货
J建信期货
J江海汇鑫
J金信期货
J金元期货
J金瑞期货
J金石期货
J锦泰期货
L鲁证期货(中泰期货)
M民生期货
M美尔雅期货 注:美尔雅是CTP二席,需要切换到对应席位使用
M迈科期货
N南华期货
P平安期货
Q前海期货
Q齐盛期货
R瑞奇期货
R瑞达期货
S上海东亚
S上海东方
S上海中期
S山西三立
S山金期货
S盛达期货
S神华期货
T通惠期货
T铜冠金源
W五矿期货
X先融期货
X先锋期货
X兴业期货
X鑫鼎盛期货
X兴证期货
X新世纪期货
X新湖期货
X新纪元期货
X西南期货
X西部期货
Y一德期货
Y英大期货
Z中信建投
Z中信期货
Z中原期货
Z中天期货
Z中州期货
Z中泰期货_数讯程序化
Z中粮期货
Z中航期货
Z中融汇信
Z中衍期货
Z中财期货
Z中辉期货
Z中钢期货
Z中银期货
Z招商期货
Z浙商期货

三、初试牛刀

以下代码可以获取DCE.jm2401 合约的10秒线,实现数据更新。

1. 示例代码:

# 引入TqSdk模块
from tqsdk import TqApi, TqAuth
# 创建api实例,设置web_gui=True生成图形化界面
api = TqApi(web_gui=True, auth=TqAuth("快期账户", "账户密码")) # 使用手机号码即可注册,注册过程也很简单。
# 订阅 DCE.jm2401 合约的10秒线
klines = api.get_kline_serial("DCE.jm2401", 10)
while True:
    # 通过wait_update刷新数据
    api.wait_update()

天勤SDK的运行逻辑很简单,如下图。是不是很简单,它不像哪些事件驱动的搞一堆on函数,再来几个回调函数,搞得初学者很晕。
在这里插入图片描述

2. 运行后提示如下:

在使用天勤量化之前,默认您已经知晓并同意以下免责条款,如果不同意请立即停止使用:https://www.shinnytech.com/blog/disclaimer/
2023-09-06 23:43:31 -     INFO - 您可以访问 http://127.0.0.1:51960 查看策略绘制出的 K 线图形。
2023-09-06 23:43:37 -     INFO - 通知 : 与 wss://free-api.shinnytech.com/t/nfmd/front/mobile 的网络连接已建立

3. 使用浏览器访问

使用浏览器访问http://127.0.0.1:51960 即可查看策略绘制出的 K 线图形,如下:
在这里插入图片描述
要在 TqSdk 中实现图形化界面非常简单,在 TqApi 中传入参数 web_gui = True即可,一套方案满足实盘/回测需求。
这里的端口是随机的,如果要求固定web_gui网址的,可传入本机IP+端口 ,如web_gui = “http://192.168.1.5:5888”(需填写本机IP+端口) 来进行固定网址访问。

四、模拟交易和实盘交易

折腾这么久,大家最关心的就是如何交易。天勤很大方,即使免费用户也可以关联一个实盘期货账户。这个真是方便!只要找到天勤支持的期货公司开户就可以了。

1. 用快期账户来模拟交易

注册完成的快期账户的【手机号】/【邮箱地址】/【用户名】和【密码】可以作为 快期模拟 账号,通过 TqKq 对 auth 传入参数进行登录,这个 快期模拟 账户在快期APP、快期专业版 和天勤量化上是互通的:

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

模拟账户资金:10000000.00,够你随意折腾了。

2. 用快期账户来实盘交易

对于 TqSdk 免费版,每个快期账户支持最多绑定一个实盘账户,而天勤量化专业版支持一个快期账户绑定任意多个实盘账户。
在这里插入图片描述

快期账户会在用户使用实盘账户时自动进行绑定,直到该快期账户没有能绑定实盘账户的名额(自动绑定功能需要 TqSdk 版本> 1.8.3):

from tqsdk import TqApi, TqAccount, TqAuth, TqKq
api = TqApi(TqAccount("H海通期货", "320102", "123456"), auth=TqAuth("快期账户", "账户密码"))

如果需要注册快期账户或者修改您的快期账户绑定的实盘账户请参见 登录用户管理中心。

注意:实盘之前请务必先模拟测试,否则学费可不是小数目。还是那句话,投资有风险,入市需谨慎!量化不是神,它只是提高了操作效率,但错误的方向,效率越高,亏损越快!

五、 量化策略交易(单均线策略)

绑定了以上账户关系后,既可以使用量化策略来进行量化交易了。

#  -*- coding: utf-8 -*-
from tqsdk import TqApi, TqAuth
'''
如果当前价格大于10秒K线的MA15则开多仓 (使用 insert_order() 函数)
如果小于则平仓
'''
# 模拟使用这个api
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
# 实盘使用下面这个api,模拟、实盘二选一
# api = TqApi(TqAccount("H海通期货", "320102", "123456"), auth=TqAuth("快期账户", "账户密码"))

# 获取 DCE.jm2401 10秒K线的引用
klines = api.get_kline_serial("DCE.jm2401", 10)

# 判断开仓条件
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.jm2401", direction="BUY", offset="OPEN", volume=5)
            break
# 判断平仓条件
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.jm2401", direction="SELL", offset="CLOSE", volume=5)
            break
# 关闭api,释放相应资源
api.close()

总结

天勤的tqSDK确实很不错,业内也多有赞誉。万事开头难,这里抛砖引玉,其实官方的在线说明简直太贴心了,你想到的他们都做好了文档!另外,目前主要是做期货,其它等官方更新后再看吧。

另:tqsdk.ta 模块中包含了大量技术指标. 每个技术指标是一个函数, 函数名为全大写, 第一参数总是K线序列, 以pandas.DataFrame格式返回计算结果。这个简直太方便了,大家尽可直接参考官方文档调用即可。更多精彩,欢迎大家发掘分享。

附录

天勤SDK安装记录:

(base) C:\Users\Administrator>pip install tqsdk -U -i https://pypi.tuna.tsinghua.edu.cn/simple
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting tqsdk
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/58/9a/f8d3d7cf5d82de0559f7228b7460acfaf066d6a6c9a729c5ea75b00cbbd9/tqsdk-3.4.7-py3-none-any.whl (1.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 18.7 MB/s eta 0:00:00
Requirement already satisfied: simplejson in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (3.19.1)
Requirement already satisfied: aiohttp in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (3.8.4)
Requirement already satisfied: websockets>=8.1 in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (10.4)
Collecting sgqlc
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/3c/82/18f202b0891bc41e556e48e72e3ec9e83362f28cfbb4744dd9bd77a3d192/sgqlc-16.3-py3-none-any.whl (81 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.6/81.6 kB ? eta 0:00:00
Requirement already satisfied: scipy in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (1.10.0)
Requirement already satisfied: pyjwt in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (2.4.0)
Requirement already satisfied: requests in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (2.28.2)
Requirement already satisfied: filelock in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (3.12.0)
Collecting tqsdk-sm
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/b5/af/4b92033cccb53d42cfbabfc82e41cbd372fdf0f56a3b550c00dc7064e59c/tqsdk_sm-1.0.5-py3-none-win_amd64.whl (23.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.0/23.0 MB 29.7 MB/s eta 0:00:00
Requirement already satisfied: pandas>=1.1.0 in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (2.0.1)
Collecting tqsdk-ctpse
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e8/8c/6d6154174e4d5d97d2ce63c92c08ed0dcfd8ae553cf6e5a6361f7ca3db80/tqsdk_ctpse-1.0.2-py3-none-win_amd64.whl (897 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 897.3/897.3 kB 28.6 MB/s eta 0:00:00
Requirement already satisfied: numpy in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (1.23.5)
Collecting shinny-structlog
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/61/7e/e9289e6b2c677318b44e48eb8cd5bb7dc9fe786df640e78947cda7a325ae/shinny_structlog-0.0.4-py3-none-any.whl (8.8 kB)
Requirement already satisfied: certifi in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (2022.12.7)
Requirement already satisfied: psutil in d:\programdata\anaconda3\lib\site-packages (from tqsdk) (5.9.0)
Requirement already satisfied: pytz>=2020.1 in d:\programdata\anaconda3\lib\site-packages (from pandas>=1.1.0->tqsdk) (2022.7)
Requirement already satisfied: python-dateutil>=2.8.2 in d:\programdata\anaconda3\lib\site-packages (from pandas>=1.1.0->tqsdk) (2.8.2)
Requirement already satisfied: tzdata>=2022.1 in d:\programdata\anaconda3\lib\site-packages (from pandas>=1.1.0->tqsdk) (2023.3)
Requirement already satisfied: frozenlist>=1.1.1 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (1.3.3)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (2.0.4)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (4.0.2)
Requirement already satisfied: yarl<2.0,>=1.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (1.8.2)
Requirement already satisfied: aiosignal>=1.1.2 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (1.3.1)
Requirement already satisfied: multidict<7.0,>=4.5 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (6.0.4)
Requirement already satisfied: attrs>=17.3.0 in d:\programdata\anaconda3\lib\site-packages (from aiohttp->tqsdk) (22.1.0)
Requirement already satisfied: idna<4,>=2.5 in d:\programdata\anaconda3\lib\site-packages (from requests->tqsdk) (3.4)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in d:\programdata\anaconda3\lib\site-packages (from requests->tqsdk) (1.26.14)
Collecting graphql-core<4.0.0,>=3.1.7
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/f8/39/e5143e7ec70939d2076c1165ae9d4a3815597019c4d797b7f959cf778600/graphql_core-3.2.3-py3-none-any.whl (202 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 202.9/202.9 kB 12.0 MB/s eta 0:00:00
Requirement already satisfied: six>=1.5 in d:\programdata\anaconda3\lib\site-packages (from python-dateutil>=2.8.2->pandas>=1.1.0->tqsdk) (1.16.0)
Installing collected packages: tqsdk-sm, tqsdk-ctpse, shinny-structlog, graphql-core, sgqlc, tqsdk
Successfully installed graphql-core-3.2.3 sgqlc-16.3 shinny-structlog-0.0.4 tqsdk-3.4.7 tqsdk-ctpse-1.0.2 tqsdk-sm-1.0.5

(base) C:\Users\Administrator>

猜你喜欢

转载自blog.csdn.net/popboy29/article/details/132725878