当前位置:首页>python>用 Python 玩转量化交易:从线性回归到逻辑回归实战

用 Python 玩转量化交易:从线性回归到逻辑回归实战

  • 2026-06-30 00:57:00
用 Python 玩转量化交易:从线性回归到逻辑回归实战

用 Python 揭秘均值回归策略:你的收益从何而来?

引言

如果你正在学习 Python,又对金融数据分析、量化交易感兴趣,那么「回归模型」几乎是绕不开的第一课。它既是统计学的经典工具,也是机器学习的入门基石。很多人一听到「线性回归」就觉得简单,但当它被用来预测股票收益、构建因子模型、评估交易信号时,背后其实藏着不少值得细细品味的工程细节。

本文将带你用 Python 走一遍量化场景下的回归建模全流程:从最基础的一元线性回归,到多元回归、SGD 回归,再到因子模型、特征工程、时间序列交叉验证、Ridge/Lasso 正则化,最后落到用逻辑回归预测股价涨跌。所有代码都配有中文注释,力求让你「看得懂、跑得起、用得上」。


一、线性回归:从一条直线说起

线性回归的核心思想很朴素:用一个连续的输出(响应变量 / 因变量)去对应一个或多个输入(特征 / 自变量),并假设它们之间是「线性」关系。换句话说,在其他特征固定时,某个特征对响应的影响是一条直线,且每个特征的影响是「相加」组合起来的。

数学上,一元线性模型可以写成:

其中  是截距, 是斜率, 是误差项,代表观测值与「完美直线」之间的偏差。模型拟合到真实数据后,这些偏差就被称为「残差」。

我们先造一批带噪声的模拟数据,再用 statsmodels 来拟合:

import numpy as np
import
 pandas as pd
import
 statsmodels.api as sm

# 生成 100 个均匀分布的 x 值,范围从 -5 到 50

x = np.linspace(-5, 50, 100)
# 按 y = 50 + 2x 的关系生成 y,并叠加均值为 0、标准差为 20 的正态噪声

y = 50 + 2 * x + np.random.normal(0, 20, size=len(x))
data = pd.DataFrame({'X': x, 'Y': y})

# add_constant 会给特征矩阵加上一列常数 1,用来估计截距项

# 如果不加这一列,回归会被强制过原点

X = sm.add_constant(data['X'])

# OLS 即普通最小二乘法,fit() 会找到使残差平方和最小的参数

model = sm.OLS(data['Y'], X).fit()
print
(model.summary())

运行后,你会看到一份完整的统计报告。在我们的例子里,截距约为 49.54、斜率约为 1.99,几乎完美还原了数据生成时用的 50 和 2。R-squared 约为 0.739,意味着这条直线解释了大约 74% 的 Y 变化;两个系数的 p 值都非常小,说明它们在统计上显著。

小贴士:OLS 其实有闭式解(解析解),你完全可以用矩阵运算手动求出系数,结果会和 fit() 一模一样:

# OLS 闭式解公式:beta = (X^T X)^(-1) X^T y
beta = np.linalg.inv(X.T.dot(X)).dot(X.T.dot(y))
pd.Series(beta, index=X.columns)
# 输出:const ≈ 49.54, X ≈ 1.99

二、多元线性回归:多个特征一起上

当有两个(或更多)相互独立的特征时,模型就扩展为:

拟合方式和一元几乎一样,只是特征矩阵多了几列:

# 构造两个特征的网格数据
size = 25
X_1, X_2 = np.meshgrid(np.linspace(-50, 50, size),
                       np.linspace(-50, 50, size), indexing='ij')
data = pd.DataFrame({'X_1': X_1.ravel(), 'X_2': X_2.ravel()})
# 真实关系:y = 50 + 1*X_1 + 3*X_2 + 噪声

data['Y'] = 50 + data.X_1 + 3 * data.X_2 + np.random.normal(0, 50, size=size**2)

X = data[['X_1', 'X_2']]
y = data['Y']

# 同样先加常数项,再拟合

X_ols = sm.add_constant(X)
model = sm.OLS(y, X_ols).fit()
print
(model.summary())

结果中截距约 52.28、X_1 系数约 0.95、X_2 系数约 2.86,与真实的 50、1、3 非常接近。

这里要特别关注报告底部的几个诊断指标,它们是回归质量的「体检报告」:

  • • Durbin-Watson:检验残差是否存在自相关,数值接近 2 表示基本没问题。
  • • Omnibus / Jarque-Bera:检验残差是否服从正态分布。
  • • Cond. No.(条件数):判断是否存在多重共线性。它由设计矩阵最大特征值与最小特征值的平方根之比算出,当这个值大于 30 时,就要警惕多重共线性可能比较严重

三、用 SGD 训练回归模型:别忘了标准化

除了直接求解析解,我们还能用随机梯度下降(SGD)来「迭代逼近」最优参数。scikit-learn 提供了 SGDRegressor。但有一个关键易错点:梯度优化对特征的量纲非常敏感,所以训练前必须先标准化特征,否则量纲大的特征会主导整个优化过程。

from sklearn.preprocessing import StandardScaler
from
 sklearn.linear_model import SGDRegressor

# StandardScaler 会在 fit 阶段计算每个特征的均值和标准差

# 在 transform 阶段做「减均值、除标准差」的中心化与缩放

scaler = StandardScaler()
X_ = scaler.fit_transform(X)

# 配置 SGD 回归器

sgd = SGDRegressor(loss='squared_loss',   # 用平方损失,对应最小二乘
                   fit_intercept=True,    # 估计截距
                   shuffle=True,          # 每轮训练前打乱样本顺序
                   random_state=42,       # 固定随机种子,结果可复现
                   learning_rate='invscaling',  # 学习率随迭代逐渐减小
                   eta0=0.01,
                   power_t=0.25)

sgd.fit(X=X_, y=y)  # 训练模型

在数据规模合适的情况下,SGD 与 OLS 会得到几乎一致的结果。比如对比两者的均方根误差(RMSE),往往是同一个数值,这从侧面印证了它们在拟合同一个底层关系。


四、因子模型与 Fama-MacBeth 回归

在量化领域,线性因子模型用来衡量一只资产的收益与背后风险因子之间的关系。每个风险因子都有自己的「风险溢价」,资产的整体收益可以看成这些溢价的加权组合。

经典的 Fama-French 五因子包括:

  • • Mkt-RF:市场超额收益(市场组合收益减无风险利率)
  • • SMB(Small Minus Big):小市值股票与大市值股票的收益差
  • • HML(High Minus Low):价值股与成长股的收益差
  • • RMW(Robust Minus Weak):高盈利能力与低盈利能力组合的收益差
  • • CMA(Conservative Minus Aggressive):保守投资与激进投资组合的收益差

为了解决残差相关带来的推断难题,Fama 与 MacBeth 提出了一个两步法:

  1. 1. 第一步(时间序列回归):对每只资产 / 组合,用其超额收益对因子做回归,得到「因子暴露」(即 betas)。
  2. 2. 第二步(横截面回归):在每个时间点上,用当期收益对第一步算出的 betas 做回归,得到当期的「风险溢价」(即 lambdas)。

下面是两步法的核心代码骨架:

from statsmodels.api import OLS, add_constant

# 第一步:估计每个行业组合的因子暴露

betas = []
for
 industry in ff_portfolio_data:
    step1 = OLS(endog=ff_portfolio_data.loc[ff_factor_data.index, industry],
                exog=add_constant(ff_factor_data)).fit()
    betas.append(step1.params.drop('const'))  # 去掉常数项,只保留因子系数

betas = pd.DataFrame(betas,
                     columns=ff_factor_data.columns,
                     index=ff_portfolio_data.columns)

# 第二步:在每个时间点做横截面回归,估计风险溢价

lambdas = []
for
 period in ff_portfolio_data.index:
    step2 = OLS(endog=ff_portfolio_data.loc[period, betas.index],
                exog=betas).fit()
    lambdas.append(step2.params)

lambdas = pd.DataFrame(lambdas,
                       index=ff_portfolio_data.index,
                       columns=betas.columns.tolist())

# 把每个因子的溢价在时间上取平均,作为最终估计

lambdas.mean()

在 2010 至 2017 年的样本里,市场因子(Mkt-RF)的平均溢价显著为正(约 1.22),而其他几个风格因子的平均溢价偏小甚至略为负。值得一提的是,linearmodels 库提供了现成的 LinearFactorModel,可以一行搞定这套两步法,结果与手写版本一致。


五、给股票预测准备特征:特征工程

要让模型预测未来收益,光有价格还不够,需要构造一批有信息量的「特征」。常见做法是基于 OHLCV(开高低收量)数据,借助 TA-Lib 计算技术指标。

from talib import RSI, BBANDS, MACD, ATR

# RSI(相对强弱指标):衡量近期涨跌动量,按股票分组分别计算

prices['rsi'] = prices.groupby(level='ticker').close.apply(RSI)

# MACD:由两条移动平均线构造的动量指标,这里做了标准化处理

def
 compute_macd(close):
    macd = MACD(close)[0]                    # 取 MACD 主线
    return
 (macd - np.mean(macd)) / np.std(macd)  # 中心化 + 缩放

prices['macd'] = prices.groupby('ticker', group_keys=False).close.apply(compute_macd)

除了技术指标,还会构造多周期的历史收益特征,并对极端值做「缩尾」处理(winsorize),避免个别异常值或数据错误主导模型:

lags = [1, 5, 10, 21, 42, 63]  # 1 天到约 3 个月的多个回看窗口
q = 0.0001  # 极端分位数阈值

for
 lag in lags:
    prices[f'return_{lag}d'] = (
        prices.groupby(level='ticker').close
        .pct_change(lag)  # 计算 lag 天的收益率
        # 对最极端的 0.01% 做裁剪(缩尾),减小离群值影响

        .pipe(lambda x: x.clip(lower=x.quantile(q), upper=x.quantile(1 - q)))
        # 把多日收益换算成「日均」收益,便于不同周期间比较

        .add(1).pow(1 / lag).sub(1)
    )

# 构造未来收益作为预测目标(注意 shift 用负数表示「向未来看」)

for
 t in [1, 5, 10, 21]:
    prices[f'target_{t}d'] = prices.groupby(level='ticker')[f'return_{t}d'].shift(-t)

易错点提醒:滚动指标(如 RSU、MACD)和滞后特征在每只股票序列开头会产生缺失值,未来收益目标在序列末尾也会缺失,这是正常现象,建模前记得妥善处理。


六、时间序列交叉验证:千万别「偷看未来」

普通的随机交叉验证在金融数据上是「致命」的,因为它会把未来的信息泄露到训练集里。正确做法是按时间顺序划分训练集和测试集,并留出一个「前瞻间隔」来防止标签重叠泄露。

下面是一个自定义的多资产时间序列交叉验证器的思路:

class MultipleTimeSeriesCV:
    """生成 (训练索引, 测试索引) 对,假设 MultiIndex 含有 'symbol' 和 'date' 两级,
    并会清除重叠的结果,避免未来信息泄露"""


    def
 __init__(self, n_splits=3, train_period_length=126,
                 test_period_length=21, lookahead=None, shuffle=False
):
        self
.n_splits = n_splits
        self
.lookahead = lookahead
        self
.test_length = test_period_length
        self
.train_length = train_period_length
        self
.shuffle = shuffle

    def
 split(self, X, y=None, groups=None):
        # 取出所有不重复的日期,并按时间倒序排列

        unique_dates = X.index.get_level_values('date').unique()
        days = sorted(unique_dates, reverse=True)

        split_idx = []
        for
 i in range(self.n_splits):
            # 测试窗口在前,训练窗口在更早的时间,中间留出 lookahead 间隔

            test_end_idx = i * self.test_length
            test_start_idx = test_end_idx + self.test_length
            train_end_idx = test_start_idx + self.lookahead - 1
            train_start_idx = train_end_idx + self.train_length + self.lookahead - 1
            split_idx.append([train_start_idx, train_end_idx,
                              test_start_idx, test_end_idx])

        dates = X.reset_index()[['date']]
        for
 train_start, train_end, test_start, test_end in split_idx:
            train_idx = dates[(dates.date > days[train_start])
                              & (dates.date <= days[train_end])].index
            test_idx = dates[(dates.date > days[test_start])
                             & (dates.date <= days[test_end])].index
            yield
 train_idx, test_idx

这套机制保证了:测试期始终紧跟在训练期之后,且二者之间因为 lookahead 而被「净化」,互不重叠。


七、Ridge 与 Lasso:给模型套上「缰绳」

当特征很多时,普通线性回归容易过拟合。Ridge(L2 正则)和 Lasso(L1 正则)通过给系数加惩罚来缓解这个问题:

  • • Ridge 会把系数平滑地「拉向零」,但通常不会让它们恰好等于零。
  • • Lasso 则更激进,会把一部分系数直接压成零,从而起到「特征筛选」的作用。

在量化里,我们常用「信息系数」(IC,即预测值与真实收益的 Spearman 秩相关)来评估模型,因为我们更关心排序对不对,而非数值精度。

from sklearn.linear_model import Ridge, Lasso
from
 sklearn.pipeline import Pipeline
from
 sklearn.preprocessing import StandardScaler
from
 scipy.stats import spearmanr
from
 sklearn.metrics import mean_squared_error

# 注意:正则化模型对量纲敏感,所以用 Pipeline 把标准化和模型串起来

model = Ridge(alpha=1.0, fit_intercept=False, random_state=42)
pipe = Pipeline([
    ('scaler', StandardScaler()),  # 先标准化
    ('model', model)               # 再拟合 Ridge
])

# 在每个时间切分上训练并预测

for
 train_idx, test_idx in cv.split(X):
    X_train, y_train = X.iloc[train_idx], y[target].iloc[train_idx]
    X_test, y_test = X.iloc[test_idx], y[target].iloc[test_idx]
    pipe.fit(X=X_train, y=y_train)
    y_pred = pipe.predict(X_test)

    # 按天计算信息系数(IC)和均方根误差(RMSE)

    preds = y_test.to_frame('actuals').assign(predicted=y_pred)
    preds_by_day = preds.groupby(level='date')
    ic = preds_by_day.apply(lambda s: spearmanr(s.predicted, s.actuals)[0] * 100)
    rmse = preds_by_day.apply(
        lambda
 s: np.sqrt(mean_squared_error(s.actuals, s.predicted)))

实战对比中,三种模型的整体 IC 都不高(普通线性回归约 1.5%,Ridge 约 1.55%,Lasso 在合适的正则强度下能达到约 3.6%)。这其实非常符合金融数据的特性:信号弱、噪声大,能稳定地「跑赢随机」就已经不容易。同时也说明 Lasso 的特征筛选在这里带来了额外收益。


八、逻辑回归:把「涨多少」变成「涨还是跌」

如果我们不关心收益的具体数值,只想预测「涨」还是「跌」,那就该逻辑回归出场了。它把回归输出通过 logistic 函数映射成 0 到 1 之间的概率,非常适合二分类。

先把连续的未来收益转成 0/1 标签:

from sklearn.linear_model import LogisticRegression
from
 sklearn.metrics import roc_auc_score

# 未来收益 > 0 标记为 1(涨),否则为 0

y.loc[:, 'label'] = (y[target] > 0).astype(int)

# 同样用 Pipeline 串起标准化和逻辑回归

model = LogisticRegression(C=1.0, fit_intercept=True,
                           random_state=42, n_jobs=-1)
pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('model', model)
])

for
 train_idx, test_idx in cv.split(X):
    X_train, y_train = X.iloc[train_idx], y.label.iloc[train_idx]
    pipe.fit(X=X_train, y=y_train)
    X_test, y_test = X.iloc[test_idx], y.label.iloc[test_idx]

    # 取预测为正类(涨)的概率

    y_score = pipe.predict_proba(X_test)[:, 1]
    # 用 AUC 评估分类质量(0.5 表示与随机猜测无异)

    auc = roc_auc_score(y_score=y_score, y_true=y_test)

逻辑回归同样可以用 statsmodels 做统计推断。在宏观经济数据的例子里(用 GDP 增长率构造涨跌标签),模型的伪 (Pseudo R-squared)能达到约 0.50,似然比检验 p 值极小,说明这些宏观变量整体上确实有解释力。

关键概念解释

  • • 伪 (Pseudo R-squared):逻辑回归里类似 OLS 中  的指标,通过对比「只含常数的空模型」与「完整模型」的对数似然值得到。取值在 0 到 1 之间,越大表示拟合越好。
  • • AUC:衡量模型区分正负样本的能力,与具体阈值无关。在股价涨跌预测中,AUC 往往只略高于 0.5(如 0.52),这说明信号微弱——这正是金融预测的真实难度所在。

总结

走完这一整套流程,希望你对量化场景下的回归建模有了系统的认识。我们从一元线性回归出发,逐步深入到多元回归、SGD 优化、因子模型、特征工程、时间序列交叉验证、正则化模型,最后落到逻辑回归分类。

几条值得反复回味的要点:

  1. 1. 理解原理胜过会调包:OLS 的解析解、残差诊断、条件数判断多重共线性,这些「为什么」比「怎么写」更重要。
  2. 2. 量纲与标准化不可忽视:凡是基于梯度优化或带正则的模型(SGD、Ridge、Lasso、逻辑回归),训练前都应先标准化特征。
  3. 3. 金融数据里,防止信息泄露是生命线:必须用按时间顺序、带前瞻间隔的交叉验证,绝不能随机打乱。
  4. 4. 接受「弱信号」的现实:金融预测的 IC 和 AUC 通常都不高,能稳定地、显著地优于随机就已经很有价值,切忌追求虚高的指标。
  5. 5. 评估要多维度:IC、RMSE、AUC、换手率、因子自相关,每个指标都从不同侧面刻画模型质量。

对于学习 Python 的你来说,这些代码不仅是量化的入门砖,更是把 NumPy、pandas、statsmodels、scikit-learn 串联起来的绝佳练习。建议动手把每段代码跑一遍,再尝试换数据、调参数,慢慢就能体会到「数据分析」与「工程实现」结合的乐趣。


参考文章

加入专注于财经数据与量化投研的知识星球【数据科学实战】,获取本文完整研究解析、代码实现细节。

财经数据与量化投研知识社区

2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:

  1. 1. 双典系统赋能:获赠《财经数据宝典》与《量化投研宝典》完整文档,凝练多年实战经验,构建系统化知识框架;
  2. 2. 量化因子日更教程(2026重磅新增):每日更新「量化因子专题教程」,配套完整可运行代码与实战案例,深度拆解因子构建、回测与优化全流程;
  3. 3. 量化文章专题教程库:500+篇星球独有高质量教程式文章,系统覆盖策略开发、因子研究、风险管理等核心领域,内容基本每日更新,并配套精选学习资料与实战参考;
  4. 4. 量化投研实战课程:赠送《AKQuant-入门及实战》《PyBroker-入门及实战》视频课程,手把手教学,快速掌握量化策略开发技能;
  5. 5. 财经数据支持:定期更新国内外财经数据,为策略研发提供精准、可靠的数据基础;
  6. 6. 顶尖学者与行业专家分享:年度邀请学术界博士与业界资深专家开展前沿论文精讲与实战案例分享,不少于4场,直击研究前沿与产业实践;
    专家直连答疑:与核心开发者及领域专家实时互动,高效解决投研实战难题;
  7. 7. 专业社群与专属福利:加入高质量交流社群,获取课程折扣及更多独家资源。

星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!

好文推荐

1. 用 Python 打造股票预测系统:Transformer 模型教程(一)

2. 用 Python 打造股票预测系统:Transformer 模型教程(二)

3. 用 Python 打造股票预测系统:Transformer 模型教程(三)

4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)

5. 揭秘隐马尔可夫模型:因子投资的制胜武器

6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用

7. 金融 AI 助手:FinGPT 让你轻松掌握市场分析

8. 量化交易秘籍:为什么专业交易员都在用对数收益率?

9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解

10. 掌握金融波动率模型:完整 Python 实现指南

好书推荐

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-02 23:25:33 HTTP/2.0 GET : https://f.mffb.com.cn/a/501574.html
  2. 运行时间 : 0.127981s [ 吞吐率:7.81req/s ] 内存消耗:4,564.08kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=94cf5b1988798c8ccbd6f9e6315887b1
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000580s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000751s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000364s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000314s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000641s ]
  6. SELECT * FROM `set` [ RunTime:0.000277s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000531s ]
  8. SELECT * FROM `article` WHERE `id` = 501574 LIMIT 1 [ RunTime:0.000476s ]
  9. UPDATE `article` SET `lasttime` = 1783005933 WHERE `id` = 501574 [ RunTime:0.009572s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000314s ]
  11. SELECT * FROM `article` WHERE `id` < 501574 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000507s ]
  12. SELECT * FROM `article` WHERE `id` > 501574 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000493s ]
  13. SELECT * FROM `article` WHERE `id` < 501574 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.014675s ]
  14. SELECT * FROM `article` WHERE `id` < 501574 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.024214s ]
  15. SELECT * FROM `article` WHERE `id` < 501574 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003897s ]
0.130543s