一、交易信号基础:什么是交易信号、信号类型与生成流程

各位同学,今天我们来聊聊交易信号。说实话,这玩意儿是量化交易的起点,也是很多新手容易踩坑的地方。我刚开始做量化的时候,以为信号就是“金叉买入、死叉卖出”这么简单,结果亏得挺惨。后来才明白,信号背后藏着不少门道。

1.1 什么是交易信号

交易信号,说白了就是一个“指令”。它告诉你:现在该买,还是该卖,或者该空仓。信号不是凭空产生的,它基于市场数据——价格、成交量、时间等——经过一套规则计算出来的。

举个例子。你看到股价突破了过去20天的最高点,你觉得“嗯,可能要涨了”,于是买入。这个“突破20日高点”就是你的信号。只不过在量化交易里,我们把这个过程写成代码,让机器自动执行。

核心定义:交易信号 = 市场数据 + 规则引擎 + 决策输出

输入:价格、成交量、时间序列等

输出:买入、卖出、持有、空仓

我在项目中遇到过一种情况:信号本身没问题,但执行的时候延迟了3秒,结果价格已经变了。所以信号不仅要准,还要快。嗯,这个后面讲执行的时候再细说。

1.2 信号类型:趋势、反转、突破

信号类型有很多,但最常用的就三类。我建议你先把这三类吃透,其他的都是变种。

1.2.1 趋势信号

趋势信号的核心逻辑是:顺势而为。市场在涨,我就做多;市场在跌,我就做空。典型的指标有移动平均线(MA)、MACD、趋势线等。

举个例子,双均线策略:

  • 短期均线上穿长期均线 → 买入信号(金叉)
  • 短期均线下穿长期均线 → 卖出信号(死叉)

你想想看,这个逻辑其实很朴素。但问题在于,趋势信号在震荡行情里会频繁出错。我曾经在2018年的横盘市场里用趋势策略,连续止损了8次,那感觉……嗯,不说了。

我的经验:趋势信号适合有明确方向的市场。如果行情在震荡,建议先观望,或者配合其他信号一起用。

1.2.2 反转信号

反转信号,也叫均值回归信号。它的逻辑是:涨多了会跌,跌多了会涨。典型的指标有RSI(相对强弱指数)、布林带、KDJ等。

比如RSI超过70,说明超买,可能回调;低于30,说明超卖,可能反弹。这就是反转信号。

我记得有一次做期货,RSI到了85,我果断做空。结果行情继续涨了3天,差点爆仓。后来我学乖了——反转信号一定要等确认,不能看到指标到极限就冲进去。

避坑指南:我曾经在强趋势行情里用反转信号,结果被反复打脸。趋势行情里,反转信号会失效。一定要先判断市场状态,再选信号类型。

1.2.3 突破信号

突破信号,就是价格突破了某个关键位置——比如前高、前低、通道上轨、支撑阻力位等。突破信号的核心是:价格突破后,往往会延续这个方向

举个例子:

  • 价格突破前高 → 买入信号
  • 价格跌破前低 → 卖出信号

突破信号在趋势启动时特别好用。但问题在于,假突破太多了。价格刚突破就掉头,这种情况我见过无数次。怎么解决?加一个确认条件,比如突破后连续3根K线站稳,或者成交量放大配合。

1.3 信号生成的基本流程

信号生成不是拍脑袋,它有一套标准流程。我把它总结成5步,你照着做就行。

  1. 数据获取:拿到原始行情数据,比如OHLCV(开盘价、最高价、最低价、收盘价、成交量)。
  2. 数据清洗:处理缺失值、异常值、复权等。这一步很多人忽略,但很重要。脏数据会生成假信号。
  3. 计算指标:根据信号类型,计算对应的技术指标,比如均线、RSI、布林带等。
  4. 规则判断:把指标值代入规则,判断是否触发信号。比如“MA5上穿MA10”就是一条规则。
  5. 信号输出:生成信号记录,包括时间、方向(买/卖)、强度(可选)、止损止盈等。

下面我用Python代码演示一个最简单的信号生成流程:

import pandas as pd
import numpy as np

# 1. 获取数据(示例用随机数据)
data = pd.DataFrame({
    'close': np.random.randn(100).cumsum() + 100
})

# 2. 计算指标:5日均线和20日均线
data['ma5'] = data['close'].rolling(5).mean()
data['ma20'] = data['close'].rolling(20).mean()

# 3. 规则判断:金叉买入,死叉卖出
data['signal'] = 0
data.loc[data['ma5'] > data['ma20'], 'signal'] = 1   # 持仓
data.loc[data['ma5'] < data['ma20'], 'signal'] = -1  # 空仓

# 4. 生成交易信号(只记录变化点)
data['position'] = data['signal'].diff()
buy_signals = data[data['position'] == 2]   # 从-1到1,买入
sell_signals = data[data['position'] == -2] # 从1到-1,卖出

print("买入信号时间:", buy_signals.index.tolist())
print("卖出信号时间:", sell_signals.index.tolist())

这段代码很简单,但已经包含了信号生成的核心逻辑。你想想看,实际项目中无非就是在这个基础上加更多指标、更复杂的规则、更精细的风控。

1.4 知识体系总览

下面这张图是我画的信号生成知识体系,你可以把它当作本章的思维导图:

交易信号 信号类型 生成流程 注意事项 趋势信号 反转信号 突破信号 数据获取 数据清洗 计算指标 规则判断 信号输出 假突破 震荡陷阱 延迟执行 核心:数据 → 指标 → 规则 → 信号

1.5 几个实用建议

最后,我分享几个实战中的小经验:

  • 信号要简单:别搞太复杂的规则。我见过有人用20个指标组合,结果信号一年都出不来几次。简单的东西往往更可靠。
  • 一定要回测:信号好不好,回测说了算。别凭感觉,拿历史数据跑一遍。
  • 注意过拟合:你调参数调得越精细,在实盘里死得越惨。留一部分数据做验证,别全用来优化。
  • 信号要可执行:有些信号在理论上是完美的,但实际交易中根本买不到那个价格。考虑滑点和手续费。

一个小技巧:我习惯在信号生成时加一个“置信度”字段。比如RSI超卖信号,如果同时有成交量放大,置信度就高一些。这样在实盘里可以按置信度分配仓位。

好了,关于交易信号的基础就讲到这里。记住,信号是量化交易的起点,但绝不是终点。后面我们会一步步深入,把信号变成真正的交易策略。


专注资料整理