期货量化尾盘没清仓:天勤 trading_time 过滤与收盘前平仓

前言

国内期货日内量化策略规定不留隔夜敞口:程序白天用天勤 TqSdk 订 5 分钟 K 线,均线或突破信号触发后 TargetPosTask 加仓,希望在日盘或夜盘结束前把净持仓调到零。事故常出在收盘前几分钟------信号层仍算出「做多 2 手」,执行层继续 set_target_volume,结果带着仓位过夜,第二天跳空吃亏。有人用本机 datetime.now() 判断「是不是 14:55」,忽略国内期货有夜盘、小节休息、螺纹钢和股指收盘时刻并不相同。

天勤每个合约的 quote.trading_time 由行情服务下发,描述真实交易时段;TargetPosTask 内部也会判断是否处于交易时间。策略层应主动做「收盘前 N 分钟强制平仓」和「非交易时段不算信号」。下面说明怎么写过滤逻辑。

一、trading_time 是什么

Quote.trading_timeobjs.py)包含该合约的交易时间段配置,由行情服务下发。TargetPosTask 内部也用 _is_in_trading_time 决定是否发单。策略层应主动过滤,而不是假设 task 会替你做日内清仓。

二、收盘前平仓逻辑框架

python 复制代码
from tqsdk.datetime import _is_in_trading_time  # 内部函数,生产可用等价封装

quote = api.get_quote(SYMBOL)
klines = api.get_kline_serial(SYMBOL, 60, data_length=200)

FLAT_MINUTES = 5  # 收盘前 5 分钟清仓

while True:
    api.wait_update()
    if not _is_in_trading_time(quote, quote.datetime):
        continue  # 非交易时段不算信号

    # 判断是否接近收盘(需按 trading_time 解析,或简化为配置表)
    if near_session_end(quote, minutes=FLAT_MINUTES):
        task.set_target_volume(0)
        continue

    # 正常信号...

near_session_end 建议按品种维护配置:日盘结束、夜盘结束各一组时刻,或用 trading_time 段落的末时刻减偏移。不要全国同一时刻一刀切。

三、与信号层的关系

  • 收盘前窗口:禁止任何扩大敞口的 set_target_volume,只允许减仓或清零。
  • 已触发强平后,设 session_flat=True 标志,下一交易小节再允许开仓。
  • 长假前最后一个交易日,可叠加更保守规则(与节后跳空专题衔接)。

四、夜盘与白盘衔接

夜盘结束到日盘开盘之间,quote.datetime 可能不走,_is_in_trading_time 为假。此时不应因「没清仓」误报警------要区分「交易时段结束已平仓」与「该平未平」。日志记 postrading_time 状态便于次日核对。

五、TargetPosTask 非交易时段行为

非交易时段调用 set_target_volume,task 可能排队到下一时段才发单;日内策略应在时段结束前主动清零,而不是卡在 14:59 才第一次调 target。

六、品种收盘时刻配置表示例

品种 日盘结束 夜盘结束 FLAT_MINUTES
rb 15:00 23:00 5
IF 15:00 无夜盘 3
au 15:00 02:30 5

用配置驱动 near_session_end,不要全国同一 datetime

七、小节休息与午休

国内商品日盘 10:15~10:30 等小节,trading_time 为假,不应误触发「尾盘平仓」。near_session_end 只应对日盘最后一段与夜盘最后一段。

八、平仓失败兜底

收盘前 set_target_volume(0) 后若 pos 仍非零,记 L2 告警并人工处理;次日开盘前禁止自动加仓直到 pos 归零或人工确认。

总结

尾盘没清仓,根因常是策略只用 K 线信号、没有交易时段意识。天勤 quote.trading_time 与交易时间判断函数提供了合约级时段信息,应用收盘前固定分钟强制 set_target_volume(0),并在非交易时段跳过开仓逻辑。按品种配置日盘、夜盘结束时刻,比用本机时钟或统一 15:00 更贴近国内期货实际,也减少隔夜敞口失控。

FAQ

1)能否用 cron 定时平仓?

可以作兜底,但仍以 trading_time 为准,避免节假日误触发。

2)股指国债收盘不同怎么办?

各 symbol 独立配置 FLAT_MINUTES 与结束时刻。

3)只平今还是全平?

看策略;日内通常净仓清零,用 TargetPosTask 设 0 即可。

4)模拟盘时段一致吗?

TqSim/TqKq 沿用同样 trading_time 数据,适合演练尾盘规则。


本文基于天勤 TqSdk 公开 API 整理,不构成投资建议。

相关推荐
leisoo80977 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20227 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
金銀銅鐵10 小时前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
Python大数据分析@12 小时前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫
quantdash_cc12 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
65岁退休Coder12 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境13 小时前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python
半亩码田13 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
Wzx19801213 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
Python私教14 小时前
签名 URL 刷新导致审批失效?别急着删掉所有 query
python·安全