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

2024-01-30 19:30

本文主要是介绍【大麦小米学量化】使用天勤TqSdk实现期货量化交易(入门),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 酱香拿铁的故事
  • 一、TqSdk 是什么?
  • 二、准备工作
    • 1. 安装tqsdk库(Python环境提前准备好)
    • 2. 注册快期账户
    • 3. 支持的期货公司(更新以官方公布为准)
  • 三、初试牛刀
    • 1. 示例代码:
    • 2. 运行后提示如下:
    • 3. 使用浏览器访问
  • 四、模拟交易和实盘交易
    • 1. 用快期账户来模拟交易
    • 2. 用快期账户来实盘交易
  • 五、 量化策略交易(单均线策略)
  • 总结
  • 附录

酱香拿铁的故事

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


言归正传,量化交易,其实最早是在黄金、外汇(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:]) / 15print("最新价", 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:]) / 15print("最新价", 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 tqsdkDownloading 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 sgqlcDownloading 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-smDownloading 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-ctpseDownloading 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-structlogDownloading 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.7Downloading 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>

这篇关于【大麦小米学量化】使用天勤TqSdk实现期货量化交易(入门)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661301

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja