只会用 K 线算期货信号下一步怎么接到交易

前言

很多读者学期货量化 的路径是:先在 Excel 或 Python 里读历史 K 线 CSV,算出均线、突破、胜率,觉得"策略有了"。下一步想接到真实或模拟交易时,不知道程序还要接哪些环节------不是再写一个指标公式,而是:谁提供实时 K 线、什么时候算一次信号、怎么下单、怎么确认持仓真的变了。

本文面向只会用 K 线算信号、还没跑通自动下单 的国内期货 Python 学习者,用天勤 TqSdk 把"研究脚本"接到"模拟盘可交易"的最小路径写清楚。会解释 TqApiget_kline_serialwait_updatedatetimeTargetPosTask 各是什么角色,不默认你已开户或懂 CTP。

一、期货自动交易比"算信号"多哪几步

可以记成五条,缺一条就会出现"能打印价格但从不下单"或"乱下单":

  1. 账户与环境TqApi + 认证 + 模拟账户(如 TqSimTqKq)。
  2. 实时 K 线get_kline_serial(合约, 周期秒数, data_length=...)
  3. 事件循环while Trueapi.wait_update(),等待行情服务推送并更新内存表。
  4. 触发时机 :用 K 线表最后一行的 datetime 是否变化 判断新 bar(见专题),在 iloc[-2] 上算你原来的信号。
  5. 执行与核对TargetPosTask.set_target_volumeinsert_order,再用 get_position / get_trade 核对。

你原来的 ma5 > ma20 可以几乎原样搬进第 4 步,变的是数据来源和触发条件。

二、把 CSV 研究换成实时 K 线表

python 复制代码
from tqsdk import TqApi, TqAuth, TqSim, tafunc

api = TqApi(TqSim(), auth=TqAuth("快期账户", "密码"))
symbol = "SHFE.rb2510"  # 上期所螺纹钢,换成你可交易的合约
kl = api.get_kline_serial(symbol, 60, data_length=200)  # 60 秒=1 分钟线

kl 是一张随市场更新的表;datetime 列由行情服务写入 ,表示每根 K 线的时间。研究里 df.iloc[-1] 若在实盘里直接用于"收盘价突破",往往用的是未收盘 的最后一根,会导致一分钟内信号闪多次;实盘应改为在 iloc[-2] 上判断,并用下一节的 datetime 触发。

三、触发:何时算一次信号

python 复制代码
while True:
    api.wait_update()
    if not api.is_changing(kl.iloc[-1], "datetime"):
        continue
    ma5 = tafunc.ma(kl.close, 5)
    ma20 = tafunc.ma(kl.close, 20)
    long_sig = ma5.iloc[-2] > ma20.iloc[-2] and ma5.iloc[-3] <= ma20.iloc[-3]

含义:只有在新 1 分钟 K 线(此处 duration=60)开始时,才用刚收盘那根 的金叉逻辑。wait_update 必须放在循环里,否则表不更新。

四、执行:TargetPosTask 表达"目标几手"

国内期货程序化里,用 目标净持仓 比逐笔手写报单更不易乱(尤其有平今平昨时)。天勤 TargetPosTask 在后续 wait_update 里撤单、报单:

python 复制代码
from tqsdk.lib import TargetPosTask

task = TargetPosTask(api, symbol)
if long_sig:
    task.set_target_volume(1)
# 循环必须继续 wait_update,task 才会动作

文档要求:同一合约不要与 insert_order 混用。

五、核对:持仓是否真的变了

python 复制代码
pos = api.get_position(symbol)
if api.is_changing(pos, "pos_long") or api.is_changing(pos, "pos_short"):
    print(symbol, "净仓", pos.pos)

模拟阶段建议下一笔极小仓位,对照成交与持仓;团队模拟可用 TqKq() 在快期 APP 里看仓。

六、再往后:模拟与实盘

跑通 TqSim 后,通常只改 TqApi 构造(如 TqKq()TqAccount(期货公司,...)),信号函数一行不改 。退出时 api.close(),避免连接残留。

总结

只会 K 线算信号 的读者,接入国内期货交易的下一步是:用天勤订实时 serial、用 datetime 变化 控制算信号频率、用 [-2] 做收盘决策、用 TargetPosTask 表达目标手数、用 position/trade 核对。这五步与指标公式无关,却是从研究到程序化的分水岭。

建议先在模拟环境跑通一周日志,再考虑实盘小仓位;勿在未核对成交的情况下加大手数。

FAQ

1)想先理解每一笔报单?

可短期用 insert_order 学习,再加交易时段、资金检查,再切 task。

2)没有快期账户?

按天勤文档注册;模拟也需要 TqAuth

3)信号一天只有一次,循环会空转吗?

过滤后 CPU 很低,空转正常。

4)回测怎么接?

TqBacktest 参数,捕获 BacktestFinishedclose()

风险提示

本文用于技术入门,不构成投资建议。

相关推荐
lizhihai_991 小时前
股市学习心得-六月的股市怎么应对
大数据·人工智能·科技·学习·区块链
叫我:松哥1 小时前
基于卷积神经网络的静态手势语识别算法,在测试集上的识别准确率达到97.5%
人工智能·python·深度学习·神经网络·算法·cnn
不考研当牛马1 小时前
Django 框架 深度学习 第二课程
后端·python·django
Dust-Chasing1 小时前
Claude Code源码剖析 - ShellTool与真实动作
人工智能·python·ai
仙俊红1 小时前
Java JUC:CompletableFuture 详解,多个任务并行执行并等待全部完成
java·python·spring
学习3人组1 小时前
Python 评论朴素贝叶斯文本情感分析示例
人工智能·python·机器学习
用户337922545681 小时前
A2A Python SDK 源码架构解读:一个请求是如何被处理的
python
2401_885665191 小时前
从零搭建卷积神经网络:基于PyTorch实现MNIST手写数字分类
pytorch·python·神经网络·算法·机器学习·分类·cnn
SilentSamsara2 小时前
MLflow 实验追踪与模型注册:从实验到生产的可复现工作流
开发语言·人工智能·pytorch·python·青少年编程