一、量化信号基础

什么是量化信号

量化信号,说白了就是一组数字。这组数字告诉你:现在该买,还是该卖,或者该观望。

我刚开始做量化交易那会儿,总觉得信号这东西很玄乎。后来踩过几次坑才明白——信号就是数学模型对市场状态的判断结果。比如一个简单的均线金叉信号:

# 一个最简单的量化信号示例
def moving_average_signal(prices, short_window=5, long_window=20):
    short_ma = prices.rolling(short_window).mean()
    long_ma = prices.rolling(long_window).mean()
    
    # 生成信号:1表示买入,-1表示卖出,0表示持有
    signal = np.where(short_ma > long_ma, 1, -1)
    return signal

你看,这个函数输出的就是一组信号。每个时间点对应一个值,告诉你市场状态。

但要注意,信号不是预测。它只是告诉你当前的状态,而不是未来一定会怎样。嗯,这个区别很重要,我见过太多人把信号当预言用了。

信号在LLM量化中的作用

LLM(大语言模型)做量化,本质上是在做一件事:把文本信息转化成交易信号。

为什么会这样?因为市场里除了价格数据,还有海量的文本信息——新闻、公告、社交媒体、研报……这些信息里藏着交易机会,但传统量化模型处理不了。

LLM的作用,就是把这些非结构化的文本,变成结构化的信号。我个人习惯把这个过程分成三步:

  1. 文本理解:LLM读懂文本在说什么
  2. 情绪提取:判断文本是利好还是利空
  3. 信号生成:把情绪量化为具体的交易指令

举个例子,我去年做过一个项目,用LLM分析美联储会议纪要。传统做法是等人翻译成数据,但LLM可以直接从原文里提取信号:

# LLM信号生成示例(伪代码)
def llm_signal_from_text(text):
    prompt = f"""
    分析以下文本的货币政策倾向:
    1. 鹰派(紧缩)还是鸽派(宽松)?
    2. 置信度评分(0-1)
    3. 关键信号词
    
    文本:{text}
    """
    
    response = llm_api(prompt)
    signal = parse_llm_response(response)
    return signal

核心观点:LLM不是替代传统量化信号,而是补充。它擅长处理传统模型搞不定的文本信息。

信号与模型性能的关系

这个问题,说白了就是:信号质量决定了模型能赚多少钱。

我做过一个对比实验,用同样的交易策略,只换信号源:

信号类型 年化收益率 最大回撤 夏普比率
纯价格信号 12.3% -18.5% 0.85
纯LLM文本信号 8.7% -22.1% 0.62
混合信号(价格+文本) 16.8% -12.3% 1.24

你看,混合信号的效果最好。为什么?因为不同信号之间可以互补。

这里有个避坑指南:信号不是越多越好。我曾经在一个策略里堆了十几个信号源,结果过拟合得一塌糊涂。回测曲线漂亮得像假的一样,实盘直接崩了。

信号质量有几个关键指标:

  • 信噪比:信号里有用信息占多少。LLM生成的信号,噪声往往比传统信号大
  • 延迟性:信号生成到交易执行的时间差。LLM推理慢,这是个硬伤
  • 稳定性:同样的输入,是不是每次输出都一样。LLM有随机性,需要做一致性处理

我的经验:LLM信号适合做中低频交易(日频以上),别想着用它做高频。推理延迟和随机性这两个问题,目前还解决不了。

最后说一句,信号和模型性能的关系,有点像发动机和汽车。信号再好的模型,如果执行层面出问题,照样白搭。我见过太多人把精力全花在优化信号上,结果忽略了交易成本、滑点这些实际问题。

警告:LLM生成的信号,一定要做回测验证。别信它自己说的「置信度很高」,我吃过这个亏。有一次LLM对某个信号给出了0.95的置信度,结果实盘直接打脸。

LLM量化信号生成流程 文本数据输入 新闻/公告/社交媒体 价格数据输入 OHLCV/成交量 LLM推理引擎 情绪分析/实体识别 信号融合模块 文本信号 + 价格信号 交易信号输出 买入/卖出/持有 回测反馈优化 关键:信号质量决定模型收益 信噪比 / 延迟 / 稳定性

这张图展示了我常用的LLM量化信号生成流程。注意看那个反馈回路——信号不是一次性生成的,需要不断用回测结果来优化LLM的prompt和参数。

好了,关于量化信号的基础就聊这么多。记住一句话:信号是量化交易的起点,但不是终点。后面我们会深入聊怎么用LLM生成高质量信号,以及怎么避免那些常见的坑。

专注资料整理