【大麦小米学量化】使用天勤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

相关文章

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

MyBatis与其使用方法示例详解

《MyBatis与其使用方法示例详解》MyBatis是一个支持自定义SQL的持久层框架,通过XML文件实现SQL配置和数据映射,简化了JDBC代码的编写,本文给大家介绍MyBatis与其使用方法讲解,... 目录ORM缺优分析MyBATisMyBatis的工作流程MyBatis的基本使用环境准备MyBati

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式