Skip to content

Commit 116096a

Browse files
committed
lib: 修复insertOrderTask中错误使用所有权已经被转移的变量
将数据发送到channel时,所有权也随之转移,后续代码中不应继续使用该数据。
1 parent c64a02f commit 116096a

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

tqsdk/lib.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ def _get_order(self, offset, vol, pending_frozen):
9999
else:
100100
frozen_volume = pending_frozen + sum([order.volume_left for order in self.pos.orders.values() if
101101
not order.is_dead and order.offset != "OPEN" and order.direction == order_dir])
102-
if (
103-
self.pos.pos_short_today if vol > 0 else self.pos.pos_long_today) - frozen_volume > 0: # 判断是否有未冻结的今仓手数: 若有则不平昨仓
102+
# 判断是否有未冻结的今仓手数: 若有则不平昨仓
103+
if (self.pos.pos_short_today if vol > 0 else self.pos.pos_long_today) - frozen_volume > 0:
104104
pos_all = frozen_volume
105105
order_volume = min(abs(vol), max(0, pos_all - frozen_volume))
106106
elif offset == "今":
@@ -212,7 +212,7 @@ async def _run(self):
212212
self.volume = order.volume_left
213213
if self.volume != 0 and not check_task.done():
214214
raise Exception("遇到错单: %s %s %s %d手 %f %s" % (
215-
self.symbol, self.direction, self.offset, self.volume, limit_price, order.last_msg))
215+
self.symbol, self.direction, self.offset, self.volume, limit_price, order.last_msg))
216216
finally:
217217
await check_chan.close()
218218
await check_task
@@ -288,10 +288,10 @@ def __init__(self, api, symbol, direction, offset, volume, limit_price=None, ord
288288
async def _run(self):
289289
"""负责下单的task"""
290290
order = self.api.insert_order(self.symbol, self.direction, self.offset, self.volume, self.limit_price)
291-
last_order = order.copy()
291+
last_order = order.copy() # 保存当前 order 的状态
292292
last_left = self.volume
293293
async with self.api.register_update_notify() as update_chan:
294-
await self.order_chan.send(last_order)
294+
await self.order_chan.send(last_order.copy()) # 将副本的数据及所有权转移
295295
while order.status != "FINISHED" or (order.volume_orign - order.volume_left) != sum(
296296
[trade.volume for trade in order.trade_records.values()]):
297297
await update_chan.recv()
@@ -301,4 +301,4 @@ async def _run(self):
301301
await self.trade_chan.send(vol if order.direction == "BUY" else -vol)
302302
if order != last_order:
303303
last_order = order.copy()
304-
await self.order_chan.send(last_order)
304+
await self.order_chan.send(last_order.copy())

0 commit comments

Comments
 (0)