3.35K 浏览
0

感谢发布1.7版本,发现1.7版本修正了很多问题。

但是更新到tqsdk1.7后发现回测时平仓动作不可预测!很担心实盘时候是不是会出现类似的问题。
例子很多,下面是 SHFE.ag2006 start_dt=date(2020, 1, 21), end_dt=date(2020, 1, 23))
的截图,并对比1.6.3版本
1.7版本:

debug发现红色箭头开始一直在执行target_pos.set_target_volume(0)动作,但是不成功

1.6.3版本(同一品种、同一时间、同一代码):

west 已回答的问题 2020年4月20日
0

请问这个可以提供一下重现代码吗

Z Liu 发表新评论 2020年4月20日

以下代码模拟重现该问题,发现1.7类似的情况很多(不同品种,不同周期都会),导致回测结果奇差;
1.6异常成交又导致回测效果奇好。

注意到今天测试平仓时间点和昨天时间点又不一样了。 问题在于server反馈?

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import date
import time
from tqsdk import TqApi, TqAccount,tafunc, __version__
from tqsdk import TqBacktest, TargetPosTask, TqReplay
from tqsdk.ta import SMA
print(__version__) #1.7.0
SYMBOL = “SHFE.ag2006”
api = TqApi(backtest=TqBacktest(start_dt=date(2020, 1, 21), end_dt=date(2020, 1, 23)))
quote = api.get_quote(SYMBOL)
klines = api.get_kline_serial(SYMBOL, 60 * 30)
position = api.get_position(SYMBOL)
target_pos = TargetPosTask(api, SYMBOL)

while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], “close”):
m1 = SMA(klines, 10,1).iloc[-1].sma
m2 = SMA(klines, 21,1).iloc[-1].sma

if m1 > m2:
target_pos.set_target_volume(1)
if m1 < m2:
if position.pos_long == 1:
print(m1 < m2, "–", "开始平仓,kline time:", tafunc.time_to_datetime(klines.iloc[-1]["datetime"]))
target_pos.set_target_volume(0)
if position.pos_long == 0:
print("平仓成功:",tafunc.time_to_datetime(klines.iloc[-1]["datetime"]))

注意到平仓时间开始于:kline time: 2020-01-21 22:00:00
直到kline time: 2020-01-22 09:00:00平仓成功。
且这个平仓时间点可能会随机,不一定是2020-01-22 09:00:00(对比昨天的图)。

INFO – 模拟交易下单 9f5ac790e4ed7e7fcff10324f2af4e28: 时间:2020-01-21 09:00:59.999999,合约:SHFE.ag2006,开平:OPEN,方向:BUY,手数:1,价格:4339.0
INFO – 模拟交易委托单 9f5ac790e4ed7e7fcff10324f2af4e28: 全部成交
True — 开始平仓,kline time: 2020-01-21 22:00:00
True — 开始平仓,kline time: 2020-01-21 22:30:00
True — 开始平仓,kline time: 2020-01-21 22:30:00
True — 开始平仓,kline time: 2020-01-21 23:00:00
True — 开始平仓,kline time: 2020-01-21 23:00:00
True — 开始平仓,kline time: 2020-01-21 23:30:00
True — 开始平仓,kline time: 2020-01-21 23:30:00
True — 开始平仓,kline time: 2020-01-22 00:00:00
True — 开始平仓,kline time: 2020-01-22 00:00:00
True — 开始平仓,kline time: 2020-01-22 00:30:00
True — 开始平仓,kline time: 2020-01-22 00:30:00
True — 开始平仓,kline time: 2020-01-22 01:00:00
True — 开始平仓,kline time: 2020-01-22 01:00:00
True — 开始平仓,kline time: 2020-01-22 01:30:00
True — 开始平仓,kline time: 2020-01-22 01:30:00
True — 开始平仓,kline time: 2020-01-22 02:00:00
True — 开始平仓,kline time: 2020-01-22 02:00:00
True — 开始平仓,kline time: 2020-01-22 09:00:00
INFO – 模拟交易下单 654e39ecde041150b8137b373d2b956d: 时间:2020-01-22 09:00:59.999999,合约:SHFE.ag2006,开平:CLOSE,方向:SELL,手数:1,价格:4292.0
INFO – 模拟交易委托单 654e39ecde041150b8137b373d2b956d: 全部成交
平仓成功: 2020-01-22 09:00:00

您正在查看1个答案中的1个,单击此处查看所有答案。