4. 逻辑回归与分类策略:从概率到交易信号

逻辑回归,这个名字其实挺有迷惑性的。它名字里带个「回归」,干的却是分类的活。说白了,就是用来回答「是或否」的问题——比如明天股价是涨还是跌?

我个人习惯把逻辑回归看作线性回归的「升级版」。线性回归输出的是一个连续值,比如预测股价是10.5元。但很多时候,我们只需要知道「涨」还是「跌」,这时候就需要把连续值映射到0和1之间。嗯,这就是Sigmoid函数登场的地方。

4.1 Sigmoid函数:把数值压成概率

Sigmoid函数的数学表达式很简单:

σ(z) = 1 / (1 + e^(-z))

它的输出范围是(0, 1)。当z趋近正无穷时,输出趋近1;当z趋近负无穷时,输出趋近0。z=0时,输出正好是0.5。

我在项目中遇到过一个问题:直接用线性回归预测涨跌,结果经常出现大于1或小于0的「概率」,这显然不合理。Sigmoid函数完美解决了这个问题——它把任何实数输入都压缩到0到1之间,天然适合做概率输出。

核心理解:逻辑回归 = 线性回归 + Sigmoid激活函数。线性部分负责「打分」,Sigmoid负责把分数转成概率。

你想想看,如果线性回归的输出是z = w·x + b,那么逻辑回归的输出就是:

P(y=1|x) = 1 / (1 + e^(-(w·x + b)))

这个P值就是模型预测的「上涨概率」。我们通常设定一个阈值,比如0.5,大于阈值就预测上涨,小于阈值就预测下跌。

4.2 二分类交易信号生成

有了概率,怎么生成交易信号?这里有个常见的坑——我曾经以为概率大于0.5就买入,小于0.5就卖出,结果回测亏得一塌糊涂。

为什么?因为市场不是非黑即白的。概率0.51和0.49其实差别不大,但按0.5阈值一刀切,交易信号会非常频繁,手续费都能吃掉大部分收益。

避坑指南:我曾经用0.5作为阈值,回测结果惨不忍睹。后来改用双阈值策略——概率大于0.7才买入,小于0.3才卖出,中间区域不操作。效果好了很多。

信号生成逻辑可以这样设计:

if prob > upper_threshold:
    signal = 1  # 买入
elif prob < lower_threshold:
    signal = -1 # 卖出
else:
    signal = 0  # 持仓不动

阈值怎么选?我建议用滚动窗口的分位数。比如取过去60天预测概率的70%分位数作为上阈值,30%分位数作为下阈值。这样阈值会自适应市场状态的变化。

4.3 回测框架搭建

搭建回测框架,说白了就是模拟真实交易。我习惯用事件驱动的方式,按时间顺序逐根K线处理。

一个最小可用的回测框架需要这几个组件:

  • 数据模块:加载历史行情数据,包括开盘价、收盘价、最高价、最低价、成交量等
  • 信号模块:用训练好的逻辑回归模型生成交易信号
  • 执行模块:模拟下单,考虑滑点和手续费
  • 风控模块:控制仓位、设置止损止盈
  • 绩效模块:计算收益率、夏普比率、最大回撤等指标

我给大家看一个简化版的回测代码框架:

class BacktestEngine:
    def __init__(self, data, model, initial_capital=100000):
        self.data = data
        self.model = model
        self.capital = initial_capital
        self.position = 0
        self.trades = []
    
    def run(self):
        for i in range(len(self.data)):
            # 生成特征
            features = self._extract_features(i)
            # 预测概率
            prob = self.model.predict_proba(features)[:, 1]
            # 生成信号
            signal = self._generate_signal(prob)
            # 执行交易
            self._execute(signal, i)
            # 每日风控检查
            self._risk_control(i)
        # 计算绩效
        return self._calculate_performance()

个人经验:回测框架一定要考虑「未来函数」。我刚开始做回测时,不小心用到了未来数据,回测曲线漂亮得像假的一样。后来养成了习惯——每次生成特征时,只用当前时刻之前的数据。

4.4 知识体系总览

下面这张图展示了本章的核心逻辑:

逻辑回归分类策略知识体系 历史行情数据 特征提取 技术指标/量价特征 逻辑回归模型 线性部分 + Sigmoid 输出上涨概率 双阈值信号生成 上阈值买入 / 下阈值卖出 / 中间持仓 回测框架 数据模块 → 信号模块 → 执行模块 风控模块 → 绩效模块 输入层 特征层 模型层 策略层 评估层

4.5 实战中的注意事项

逻辑回归虽然简单,但用好了威力不小。我总结了几点经验:

环节 常见问题 我的解决方案
特征选择 特征太多导致过拟合 用L1正则化做特征筛选,保留最重要的5-10个特征
样本不平衡 上涨和下跌样本数量悬殊 使用SMOTE过采样,或者调整类别权重
阈值设定 固定阈值不适应市场变化 用滚动分位数动态调整阈值
过拟合 回测漂亮,实盘拉胯 做交叉验证,用样本外数据验证

核心要点:逻辑回归不是万能的,但它胜在可解释性强。你能清楚地知道每个特征对预测结果的影响权重。这在量化交易中非常重要——你总得知道模型为什么做出某个决策。

嗯,逻辑回归这部分就讲到这里。记住一点:模型再复杂,最终都要落到「能不能赚钱」这个核心问题上。回测框架就是验证这个问题的工具,一定要搭建得扎实。

专注资料整理