一、量化信号基础
什么是量化信号
量化信号,说白了就是一组数字。这组数字告诉你:现在该买,还是该卖,或者该观望。
我刚开始做量化交易那会儿,总觉得信号这东西很玄乎。后来踩过几次坑才明白——信号就是数学模型对市场状态的判断结果。比如一个简单的均线金叉信号:
# 一个最简单的量化信号示例
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的作用,就是把这些非结构化的文本,变成结构化的信号。我个人习惯把这个过程分成三步:
- 文本理解:LLM读懂文本在说什么
- 情绪提取:判断文本是利好还是利空
- 信号生成:把情绪量化为具体的交易指令
举个例子,我去年做过一个项目,用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量化信号生成流程。注意看那个反馈回路——信号不是一次性生成的,需要不断用回测结果来优化LLM的prompt和参数。
好了,关于量化信号的基础就聊这么多。记住一句话:信号是量化交易的起点,但不是终点。后面我们会深入聊怎么用LLM生成高质量信号,以及怎么避免那些常见的坑。