Skip to content

Commit 6b51b4e

Browse files
shinny-packshinny-mayanqiong
authored andcommitted
Update Version 3.2.9
1 parent 6d48354 commit 6b51b4e

19 files changed

+176
-177
lines changed

PKG-INFO

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Metadata-Version: 2.1
22
Name: tqsdk
3-
Version: 3.2.8
3+
Version: 3.2.9
44
Summary: TianQin SDK
55
Home-page: https://www.shinnytech.com/tqsdk
66
Author: TianQin

doc/advanced/multi_strategy.rst

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
我们可能需要将这个策略运行多份, 每份的 SYMBOL, LONG, SHORT 都不同.
3131

32-
TqSdk 为这类需求提供三种解决方案, 您可任意选择一种.
32+
TqSdk 为这类需求提供两种解决方案, 您可任意选择一种.
3333

3434

3535
每个进程执行一个策略实例
@@ -111,60 +111,6 @@ TqSdk 为这类需求提供三种解决方案, 您可任意选择一种.
111111
* 每个策略进程要建立一个单独的服务器连接, 数量过大时可能无法连接成功
112112

113113

114-
单进程中多线程, 每个线程执行一个策略实例
115-
-------------------------------------------------
116-
一般情况下, 我们推荐用户使用上一方案. 仅当用户策略实例很多, 导致网络连接数无法容纳时, 可以考虑使用本方案.
117-
118-
* 首先需要正常创建一个 TqApi 实例 api_master, 并用 TqApi.copy 函数获得多个slave副本
119-
* 启动多个线程, 每个线程中使用一个 TqApi 实例副本.
120-
* 主线程中的 api_master 仍然需要持续调用 wait_update
121-
* 每个线程中的策略代码可以如常工作
122-
123-
示例代码如下::
124-
125-
import threading
126-
127-
class WorkerThread(threading.Thread):
128-
def __init__(self, api, symbol):
129-
threading.Thread.__init__(self)
130-
self.api = api
131-
self.symbol = symbol
132-
133-
def run(self):
134-
SHORT = 30 # 短周期
135-
LONG = 60 # 长周期
136-
data_length = LONG + 2 # k线数据长度
137-
klines = self.api.get_kline_serial(self.symbol, duration_seconds=60, data_length=data_length)
138-
target_pos = TargetPosTask(self.api, self.symbol)
139-
140-
while True:
141-
self.api.wait_update()
142-
if self.api.is_changing(klines.iloc[-1], "datetime"): # 产生新k线:重新计算SMA
143-
short_avg = ma(klines["close"], SHORT) # 短周期
144-
long_avg = ma(klines["close"], LONG) # 长周期
145-
if long_avg.iloc[-2] < short_avg.iloc[-2] and long_avg.iloc[-1] > short_avg.iloc[-1]:
146-
target_pos.set_target_volume(-3)
147-
print("均线下穿,做空")
148-
if short_avg.iloc[-2] < long_avg.iloc[-2] and short_avg.iloc[-1] > long_avg.iloc[-1]:
149-
target_pos.set_target_volume(3)
150-
print("均线上穿,做多")
151-
152-
153-
if __name__ == "__main__":
154-
api_master = TqApi(TqSim())
155-
156-
# Create new threads
157-
thread1 = WorkerThread(api_master.copy(), "SHFE.cu1901")
158-
thread2 = WorkerThread(api_master.copy(), "SHFE.rb1901")
159-
160-
# Start new Threads
161-
thread1.start()
162-
thread2.start()
163-
164-
while True:
165-
api_master.wait_update()
166-
167-
168114
.. _multi_async_task:
169115

170116
单线程创建多个异步任务

doc/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
# built documents.
4949
#
5050
# The short X.Y version.
51-
version = u'3.2.8'
51+
version = u'3.2.9'
5252
# The full version, including alpha/beta/rc tags.
53-
release = u'3.2.8'
53+
release = u'3.2.9'
5454

5555
# The language for content autogenerated by Sphinx. Refer to documentation
5656
# for a list of supported languages.

doc/version.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
版本变更
44
=============================
5+
3.2.9 (2022/07/07)
6+
7+
* 增加:下载 tick 数据时增加 average 列
8+
* 增加::py:meth:`~tqsdk.TqApi.get_tick_data_series` 接口返回值中增加 average 列
9+
* 优化:下载数据时优化 cpu 占用
10+
* 优化:tqsdk 内部各个模块使用统一的时间处理函数
11+
* 修复::py:class:`~tqsdk.TargetPosTask` 及 :py:class:`~tqsdk.algorithm.twap` 增加添加普麦、早籼稻、粳稻及晚籼稻期货暂不支持的提示
12+
* 修复::py:meth:`~tqsdk.TqApi.query_symbol_ranking` 接口某些情况可能报错的问题
13+
14+
515
3.2.8 (2022/04/29)
616

717
* 修复:下载多合约 klines 时数据可能未完全收全的问题

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def get_tag(self):
3636

3737
setuptools.setup(
3838
name='tqsdk',
39-
version="3.2.8",
39+
version="3.2.9",
4040
description='TianQin SDK',
4141
author='TianQin',
4242
author_email='tianqincn@gmail.com',

tqsdk/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '3.2.8'
1+
__version__ = '3.2.9'

tqsdk/algorithm/time_table_generater.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
from tqsdk.api import TqApi
1313
from tqsdk import utils
14-
from tqsdk.datetime import _get_trading_timestamp, _get_trade_timestamp, _get_trading_day_from_timestamp
14+
from tqsdk.datetime import _get_trading_timestamp, _get_trade_timestamp, _get_trading_day_from_timestamp, \
15+
_datetime_to_timestamp_nano
1516
from tqsdk.rangeset import _rangeset_slice, _rangeset_head
1617
from tqsdk.tradeable import TqAccount, TqKq, TqSim
1718

@@ -228,7 +229,7 @@ def vwap_table(api: TqApi, symbol: str, target_pos: int, duration: float,
228229
current_datetime = datetime.fromtimestamp(current_timestamp_nano//1000000000)
229230
# 下一分钟的开始时间
230231
next_datetime = current_datetime.replace(second=0) + timedelta(minutes=1)
231-
start_datetime_nano = int(next_datetime.timestamp()) * 1000000000
232+
start_datetime_nano = _datetime_to_timestamp_nano(next_datetime)
232233
r = _rangeset_head(_rangeset_slice(trading_timestamp_nano_range, start_datetime_nano), int(duration * 1e9))
233234
if not (r and trading_timestamp_nano_range[0][0] <= r[-1][-1] < trading_timestamp_nano_range[-1][1]):
234235
raise Exception("指定时间段超出当前交易日")

tqsdk/algorithm/twap.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@ def __init__(self, api: TqApi, symbol: str, direction: str, offset: str, volume:
123123
raise Exception("动力煤期货不支持创建 targetpostask、twap、vwap 任务,交易所规定该品种最小开仓手数为大于等于 4 手,这些函数还未支持该规则!")
124124
if symbol.startswith("CZCE.WH"):
125125
raise Exception("强麦期货不支持创建 targetpostask、twap、vwap 任务,交易所规定该品种最小开仓手数为大于等于 10 手,这些函数还未支持该规则!")
126+
if symbol.startswith("CZCE.PM"):
127+
raise Exception("普麦期货不支持创建 targetpostask、twap、vwap 任务,交易所规定该品种最小开仓手数为大于等于 10 手,这些函数还未支持该规则!")
128+
if symbol.startswith("CZCE.RI"):
129+
raise Exception("早籼稻期货不支持创建 targetpostask、twap、vwap 任务,交易所规定该品种最小开仓手数为大于等于 10 手,这些函数还未支持该规则!")
130+
if symbol.startswith("CZCE.JR"):
131+
raise Exception("粳稻期货不支持创建 targetpostask、twap、vwap 任务,交易所规定该品种最小开仓手数为大于等于 10 手,这些函数还未支持该规则!")
132+
if symbol.startswith("CZCE.LR"):
133+
raise Exception("晚籼稻期货不支持创建 targetpostask、twap、vwap 任务,交易所规定该品种最小开仓手数为大于等于 10 手,这些函数还未支持该规则!")
126134
self._api = api
127135
self._account = api._account._check_valid(account)
128136
if self._account is None:

0 commit comments

Comments
 (0)