Skip to content

Commit a2fe774

Browse files
shinny-hongyanshinny-zhangyihang
authored andcommitted
Update Version 3.10.1
1 parent 158417a commit a2fe774

72 files changed

Lines changed: 787 additions & 424 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

PKG-INFO

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Metadata-Version: 2.1
22
Name: tqsdk
3-
Version: 3.9.9
3+
Version: 3.10.1
44
Summary: TianQin SDK
55
Home-page: https://www.shinnytech.com/tqsdk
66
Author: TianQin
@@ -10,7 +10,7 @@ Platform: UNKNOWN
1010
Classifier: Programming Language :: Python :: 3
1111
Classifier: License :: OSI Approved :: Apache Software License
1212
Classifier: Operating System :: OS Independent
13-
Requires-Python: >=3.8
13+
Requires-Python: >=3.9
1414
Description-Content-Type: text/markdown
1515
License-File: LICENSE
1616

@@ -20,7 +20,7 @@ License-File: LICENSE
2020
<p align="center">
2121
<img src ="https://img.shields.io/pypi/v/tqsdk?color=blueviolet">
2222
<img src ="https://img.shields.io/badge/platform-windows|linux|macos-green.svg"/>
23-
<img src ="https://img.shields.io/badge/python-3.8+-blue.svg" />
23+
<img src ="https://img.shields.io/badge/python-3.9+-blue.svg" />
2424
<img src ="https://img.shields.io/pypi/dm/tqsdk?color=yellowgreen">
2525
<img src ="https://img.shields.io/github/license/shinnytech/tqsdk-python.svg?color=orange"/>
2626
</p>
@@ -37,23 +37,23 @@ TqSdk 支持用户使用极少的代码量构建各种类型的量化交易策
3737
from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask
3838

3939
api = TqApi(TqAccount("H海通期货", "4003242", "123456"), auth=TqAuth("快期账户", "账户密码")) # 创建 TqApi 实例, 指定交易账户
40-
q_2309 = api.get_quote("SHFE.rb2309") # 订阅近月合约行情
41-
t_2309 = TargetPosTask(api, "SHFE.rb2309") # 创建近月合约调仓工具
42-
q_2401 = api.get_quote("SHFE.rb2401") # 订阅远月合约行情
43-
t_2401 = TargetPosTask(api, "SHFE.rb2401") # 创建远月合约调仓工具
40+
q_2610 = api.get_quote("SHFE.rb2610") # 订阅近月合约行情
41+
t_2610 = TargetPosTask(api, "SHFE.rb2610") # 创建近月合约调仓工具
42+
q_2701 = api.get_quote("SHFE.rb2701") # 订阅远月合约行情
43+
t_2701 = TargetPosTask(api, "SHFE.rb2701") # 创建远月合约调仓工具
4444

4545
while True:
4646
api.wait_update() # 等待数据更新
47-
spread = q_2309["last_price"] - q_2401["last_price"] # 计算近月合约-远月合约价差
47+
spread = q_2610["last_price"] - q_2701["last_price"] # 计算近月合约-远月合约价差
4848
print("当前价差:", spread)
4949
if spread > 250:
5050
print("价差过高: 空近月,多远月")
51-
t_2309.set_target_volume(-1) # 要求把2309合约调整为空头1手
52-
t_2401.set_target_volume(1) # 要求把2401合约调整为多头1手
51+
t_2610.set_target_volume(-1) # 要求把近月合约调整为空头1手
52+
t_2701.set_target_volume(1) # 要求把远月合约调整为多头1手
5353
elif spread < 200:
54-
print("价差回复: 清空持仓") # 要求把 2309 和 2401合约都调整为不持仓
55-
t_2309.set_target_volume(0)
56-
t_2401.set_target_volume(0)
54+
print("价差回复: 清空持仓") # 要求把近月和远月合约都调整为不持仓
55+
t_2610.set_target_volume(0)
56+
t_2701.set_target_volume(0)
5757
```
5858

5959
要快速了解如何使用TqSdk,请访问我们的 [十分钟快速入门指南](https://doc.shinnytech.com/tqsdk/latest/quickstart.html)。
@@ -102,7 +102,7 @@ TqSdk提供的功能可以支持从简单到复杂的各类策略程序:
102102

103103
## 安装方法
104104

105-
TqSdk 仅支持 Python 3.8 及更高版本。要安装 TqSdk,可使用 pip:
105+
TqSdk 仅支持 Python 3.9 及更高版本。要安装 TqSdk,可使用 pip:
106106

107107
```bash
108108
pip install tqsdk

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<p align="center">
55
<img src ="https://img.shields.io/pypi/v/tqsdk?color=blueviolet">
66
<img src ="https://img.shields.io/badge/platform-windows|linux|macos-green.svg"/>
7-
<img src ="https://img.shields.io/badge/python-3.8+-blue.svg" />
7+
<img src ="https://img.shields.io/badge/python-3.9+-blue.svg" />
88
<img src ="https://img.shields.io/pypi/dm/tqsdk?color=yellowgreen">
99
<img src ="https://img.shields.io/github/license/shinnytech/tqsdk-python.svg?color=orange"/>
1010
</p>
@@ -21,23 +21,23 @@ TqSdk 支持用户使用极少的代码量构建各种类型的量化交易策
2121
from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask
2222

2323
api = TqApi(TqAccount("H海通期货", "4003242", "123456"), auth=TqAuth("快期账户", "账户密码")) # 创建 TqApi 实例, 指定交易账户
24-
q_2309 = api.get_quote("SHFE.rb2309") # 订阅近月合约行情
25-
t_2309 = TargetPosTask(api, "SHFE.rb2309") # 创建近月合约调仓工具
26-
q_2401 = api.get_quote("SHFE.rb2401") # 订阅远月合约行情
27-
t_2401 = TargetPosTask(api, "SHFE.rb2401") # 创建远月合约调仓工具
24+
q_2610 = api.get_quote("SHFE.rb2610") # 订阅近月合约行情
25+
t_2610 = TargetPosTask(api, "SHFE.rb2610") # 创建近月合约调仓工具
26+
q_2701 = api.get_quote("SHFE.rb2701") # 订阅远月合约行情
27+
t_2701 = TargetPosTask(api, "SHFE.rb2701") # 创建远月合约调仓工具
2828

2929
while True:
3030
api.wait_update() # 等待数据更新
31-
spread = q_2309["last_price"] - q_2401["last_price"] # 计算近月合约-远月合约价差
31+
spread = q_2610["last_price"] - q_2701["last_price"] # 计算近月合约-远月合约价差
3232
print("当前价差:", spread)
3333
if spread > 250:
3434
print("价差过高: 空近月,多远月")
35-
t_2309.set_target_volume(-1) # 要求把2309合约调整为空头1手
36-
t_2401.set_target_volume(1) # 要求把2401合约调整为多头1手
35+
t_2610.set_target_volume(-1) # 要求把近月合约调整为空头1手
36+
t_2701.set_target_volume(1) # 要求把远月合约调整为多头1手
3737
elif spread < 200:
38-
print("价差回复: 清空持仓") # 要求把 2309 和 2401合约都调整为不持仓
39-
t_2309.set_target_volume(0)
40-
t_2401.set_target_volume(0)
38+
print("价差回复: 清空持仓") # 要求把近月和远月合约都调整为不持仓
39+
t_2610.set_target_volume(0)
40+
t_2701.set_target_volume(0)
4141
```
4242

4343
要快速了解如何使用TqSdk,请访问我们的 [十分钟快速入门指南](https://doc.shinnytech.com/tqsdk/latest/quickstart.html)
@@ -86,7 +86,7 @@ TqSdk提供的功能可以支持从简单到复杂的各类策略程序:
8686

8787
## 安装方法
8888

89-
TqSdk 仅支持 Python 3.8 及更高版本。要安装 TqSdk,可使用 pip:
89+
TqSdk 仅支持 Python 3.9 及更高版本。要安装 TqSdk,可使用 pip:
9090

9191
```bash
9292
pip install tqsdk

doc/_includes/tqsdk_ai_agent_intro.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44

55
请先下载并解压 TqSdk 技能包:https://doc.shinnytech.com/tqsdk/latest/ai_editor/skills/tqsdk-trading-and-data.zip,然后先阅读其中的 SKILL.md,并按里面的说明再回答任何 TqSdk 问题或编写任何 TqSdk 代码。
66

7+
推荐的 AI Agent 工具下载:
8+
9+
* Trae:https://www.trae.cn/ide/download
10+
* CodeBuddy:https://www.codebuddy.cn/ide/
11+
* Codex:https://openai.com/codex/
12+
713
.. tqsdk_skills_ref_marker
814
915
详细说明请见 :ref:`tqsdk_skills` 。

doc/_static/search_zh_dict.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ TqKq 100000
88
TqKqStock 100000
99
TqMultiAccount 100000
1010
TqNotify 100000
11-
TqReplay 100000
1211
TqRiskRule 100000
1312
TqRiskRuleError 100000
1413
TqSim 100000

doc/advanced/backtest.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ TqSdk 并不提供专门的参数优化机制. 您可以按照自己的需求,
1313
from datetime import date
1414

1515
LONG = 60
16-
SYMBOL = "SHFE.cu1907"
16+
SYMBOL = "SHFE.cu2607"
1717

1818
for SHORT in range(20, 40): # 短周期参数从20-40分别做回测
1919
acc = TqSim() # 每次回测都创建一个新的模拟账户
2020
try:
21-
api = TqApi(acc, backtest=TqBacktest(start_dt=date(2019, 5, 6), end_dt=date(2019, 5, 10)), auth=TqAuth("快期账户", "账户密码"))
21+
api = TqApi(acc, backtest=TqBacktest(start_dt=date(2026, 5, 18), end_dt=date(2026, 5, 22)), auth=TqAuth("快期账户", "账户密码"))
2222
account = api.get_account()
2323
klines = api.get_kline_serial(SYMBOL, duration_seconds=60, data_length=LONG + 2)
2424
target_pos = TargetPosTask(api, SYMBOL)
@@ -48,10 +48,10 @@ TqSdk 并不提供专门的参数优化机制. 您可以按照自己的需求,
4848

4949
def MyStrategy(SHORT):
5050
LONG = 60
51-
SYMBOL = "SHFE.cu1907"
51+
SYMBOL = "SHFE.cu2607"
5252
acc = TqSim()
5353
try:
54-
api = TqApi(acc, backtest=TqBacktest(start_dt=date(2019, 5, 6), end_dt=date(2019, 5, 10)), auth=TqAuth("快期账户", "账户密码"))
54+
api = TqApi(acc, backtest=TqBacktest(start_dt=date(2026, 5, 18), end_dt=date(2026, 5, 22)), auth=TqAuth("快期账户", "账户密码"))
5555
data_length = LONG + 2
5656
klines = api.get_kline_serial(SYMBOL, duration_seconds=60, data_length=data_length)
5757
target_pos = TargetPosTask(api, SYMBOL)

doc/advanced/dingding.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ TqSdk 并不提供专门的服务器来推送消息,但是你可以通过其
2525

2626

2727
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
28-
quote = api.get_quote("SHFE.rb2109")
29-
target_pos = TargetPosTask(api, "SHFE.rb2110")
28+
quote = api.get_quote("SHFE.rb2610")
29+
target_pos = TargetPosTask(api, "SHFE.rb2701")
3030
send_msg("策略开始运行")
3131
a = 0
3232
while True:

doc/advanced/for_ctp_user.rst

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ Ctp接口不提供K线数据.
5050

5151
TqSdk中的K线序列采用 pandas.DataFrame 格式. pandas 提供了 `非常丰富的数据处理函数 <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>`_ , 使我们可以非常方便的进行数据处理, 例如::
5252

53-
ks = api.get_kline_serial("SHFE.cu1901", 60)
53+
ks = api.get_kline_serial("SHFE.cu2607", 60)
5454
print(ks.iloc[-1]) # <- 最后一根K线
5555
print(ks.close) # <- 收盘价序列
5656
ks.high - ks.high.shift(1) # <- 每根K线最高价-前一根K线最高价, 形成一个新序列
@@ -59,7 +59,7 @@ TqSdk中的K线序列采用 pandas.DataFrame 格式. pandas 提供了 `非常丰
5959
TqSdk 也通过 :py:mod:`tqsdk.tafunc` 提供了一批行情分析中常用的计算函数, 例如::
6060
6161
from tqsdk import tafunc
62-
ks = api.get_kline_serial("SHFE.cu1901", 60)
62+
ks = api.get_kline_serial("SHFE.cu2607", 60)
6363
ms = tafunc.max(ks.open, ks.close) # <- 取每根K线开盘价和收盘价的高者构建一个新序列
6464
median3 = tafunc.median(ks.close, 100) # <- 求最近100根K线收盘价的中间值
6565
ss = tafunc.std(ks.close, 5) # <- 每5根K线的收盘价标准差
@@ -85,8 +85,10 @@ Ctp接口按照事件回调模型设计, 使用 CThostFtdcTraderSpi 的 OnXXX
8585
8686
TqSdk则不使用事件回调机制. :py:meth:`~tqsdk.TqApi.wait_update` 函数设计用来获取任意数据更新, 像这样::
8787

88+
from tqsdk import TqApi, TqAuth
89+
8890
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
89-
x = api.insert_order("SHFE.cu1901", direction="BUY", offset="OPEN", volume=1, limit_price=50000)
91+
x = api.insert_order("SHFE.cu2607", direction="BUY", offset="OPEN", volume=1, limit_price=50000)
9092
9193
while True:
9294
api.wait_update() # <- 这个 wait_update 将尝试更新所有数据. 如果没有任何新信息, 程序会阻塞在这一句. 一旦有任意数据被更新, 程序会继续往下执行
@@ -95,10 +97,12 @@ TqSdk则不使用事件回调机制. :py:meth:`~tqsdk.TqApi.wait_update` 函数
9597

9698
一次 wait_update 可能更新多个实体, 在这种情况下, :py:meth:`~tqsdk.TqApi.is_changing` 被用来判断某个实体是否有变更::
9799

100+
from tqsdk import TqApi, TqAuth
101+
98102
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
99-
q = api.get_quote("SHFE.cu1901")
100-
ks = api.get_kline_serial("SHFE.cu1901", 60)
101-
x = api.insert_order("SHFE.cu1901", direction="BUY", offset="OPEN", volume=1, limit_price=50000)
103+
q = api.get_quote("SHFE.cu2607")
104+
ks = api.get_kline_serial("SHFE.cu2607", 60)
105+
x = api.insert_order("SHFE.cu2607", direction="BUY", offset="OPEN", volume=1, limit_price=50000)
102106
103107
while True:
104108
api.wait_update() # <- 这个 wait_update 将尝试更新所有数据. 如果没有任何新信息, 程序会阻塞在这一句. 一旦有任意数据被更新, 程序会继续往下执行

doc/advanced/for_vnpy_user.rst

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ TqSdk 则使用基于网络协作的组件设计. 如下图:
7171

7272
SHORT = 30
7373
LONG = 60
74-
SYMBOL = "SHFE.bu1912"
74+
SYMBOL = "SHFE.bu2609"
7575

7676
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
7777

@@ -122,13 +122,15 @@ TqSdk将每个策略作为一个独立进程运行, 这样就可以:
122122
当近月-远月的价差大于200时做空近月,做多远月
123123
当价差小于150时平仓
124124
'''
125+
from tqsdk import TqApi, TqAuth, TargetPosTask
126+
125127
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
126-
quote_near = api.get_quote("SHFE.rb1910")
127-
quote_deferred = api.get_quote("SHFE.rb2001")
128-
# 创建 rb1910 的目标持仓 task,该 task 负责调整 rb1910 的仓位到指定的目标仓位
129-
target_pos_near = TargetPosTask(api, "SHFE.rb1910")
130-
# 创建 rb2001 的目标持仓 task,该 task 负责调整 rb2001 的仓位到指定的目标仓位
131-
target_pos_deferred = TargetPosTask(api, "SHFE.rb2001")
128+
quote_near = api.get_quote("SHFE.rb2610")
129+
quote_deferred = api.get_quote("SHFE.rb2701")
130+
# 创建 rb2610 的目标持仓 task,该 task 负责调整 rb2610 的仓位到指定的目标仓位
131+
target_pos_near = TargetPosTask(api, "SHFE.rb2610")
132+
# 创建 rb2701 的目标持仓 task,该 task 负责调整 rb2701 的仓位到指定的目标仓位
133+
target_pos_deferred = TargetPosTask(api, "SHFE.rb2701")
132134

133135
while True:
134136
api.wait_update()
@@ -160,7 +162,7 @@ K线数据与指标计算
160162

161163
TqSdk中的K线序列采用 pandas.DataFrame 格式. pandas 提供了 `非常丰富的数据处理函数 <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>`_ , 使我们可以非常方便的进行数据处理, 例如::
162164

163-
ks = api.get_kline_serial("SHFE.cu1901", 60)
165+
ks = api.get_kline_serial("SHFE.cu2607", 60)
164166
print(ks.iloc[-1]) # <- 最后一根K线
165167
print(ks.close) # <- 收盘价序列
166168
ks.high - ks.high.shift(1) # <- 每根K线最高价-前一根K线最高价, 形成一个新序列
@@ -169,7 +171,7 @@ TqSdk中的K线序列采用 pandas.DataFrame 格式. pandas 提供了 `非常丰
169171
TqSdk 也通过 :py:mod:`tqsdk.tafunc` 提供了一批行情分析中常用的计算函数, 例如::
170172
171173
from tqsdk import tafunc
172-
ks = api.get_kline_serial("SHFE.cu1901", 60)
174+
ks = api.get_kline_serial("SHFE.cu2607", 60)
173175
ms = tafunc.max(ks.open, ks.close) # <- 取每根K线开盘价和收盘价的高者构建一个新序列
174176
median3 = tafunc.median(ks.close, 100) # <- 求最近100根K线收盘价的中间值
175177
ss = tafunc.std(ks.close, 5) # <- 每5根K线的收盘价标准差
@@ -192,8 +194,10 @@ vn.py按照事件回调模型设计, 使用 CtaTemplate 的 on_xxx 回调函数
192194

193195
TqSdk则不使用事件回调机制. :py:meth:`~tqsdk.TqApi.wait_update` 函数设计用来获取任意数据更新, 像这样::
194196

197+
from tqsdk import TqApi, TqAuth
198+
195199
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
196-
ks = api.get_kline_serial("SHFE.cu1901", 60)
200+
ks = api.get_kline_serial("SHFE.cu2607", 60)
197201
198202
while True:
199203
api.wait_update() # <- 这个 wait_update 将尝试更新所有数据. 如果没有任何新信息, 程序会阻塞在这一句. 一旦有任意数据被更新, 程序会继续往下执行
@@ -202,10 +206,12 @@ TqSdk则不使用事件回调机制. :py:meth:`~tqsdk.TqApi.wait_update` 函数
202206

203207
一次 wait_update 可能更新多个实体, 在这种情况下, :py:meth:`~tqsdk.TqApi.is_changing` 被用来判断某个实体是否有变更::
204208

209+
from tqsdk import TqApi, TqAuth
210+
205211
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
206-
q = api.get_quote("SHFE.cu1901")
207-
ks = api.get_kline_serial("SHFE.cu1901", 60)
208-
x = api.insert_order("SHFE.cu1901", direction="BUY", offset="OPEN", volume=1, limit_price=50000)
212+
q = api.get_quote("SHFE.cu2607")
213+
ks = api.get_kline_serial("SHFE.cu2607", 60)
214+
x = api.insert_order("SHFE.cu2607", direction="BUY", offset="OPEN", volume=1, limit_price=50000)
209215
210216
while True:
211217
api.wait_update() # <- 这个 wait_update 将尝试更新所有数据. 如果没有任何新信息, 程序会阻塞在这一句. 一旦有任意数据被更新, 程序会继续往下执行
@@ -235,12 +241,14 @@ TqSdk 提供 :ref:`web_gui` 来供有图形化需求的用户使用:
235241

236242
TqSdk配合web_gui使用时, 还支持自定义绘制行情图表, 像这样::
237243

244+
from tqsdk import TqApi, TqAuth
245+
238246
api = TqApi(auth=TqAuth("快期账户","账户密码"), web_gui=True)
239-
# 获取 cu1905cu1906 的日线数据
240-
klines = api.get_kline_serial("SHFE.cu1905", 86400)
241-
klines2 = api.get_kline_serial("SHFE.cu1906", 86400)
247+
# 获取 cu2607cu2608 的日线数据
248+
klines = api.get_kline_serial("SHFE.cu2607", 86400)
249+
klines2 = api.get_kline_serial("SHFE.cu2608", 86400)
242250

243-
# 算出 cu1906 - cu1905 的价差,并以折线型态显示在副图
251+
# 算出 cu2608 - cu2607 的价差,并以折线型态显示在副图
244252
klines["dif"] = klines2["close"] - klines["close"]
245253
klines["dif.board"] = "DIF"
246254
klines["dif.color"] = 0xFF00FF00

0 commit comments

Comments
 (0)