当前位置:首页>python>别再用 GBM 了!用 Python 实现 Merton 跳跃扩散模型,揭示 24% 隐藏风险

别再用 GBM 了!用 Python 实现 Merton 跳跃扩散模型,揭示 24% 隐藏风险

  • 2026-02-27 03:04:55
别再用 GBM 了!用 Python 实现 Merton 跳跃扩散模型,揭示 24% 隐藏风险

2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含300篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!

引言

如果你还在用传统的几何布朗运动(GBM)模型来分析商品期货的风险,那你可能正在严重低估市场的真实危险。

原油、天然气这类大宗商品,从来不会"温柔地"波动——它们充满了供应冲击、地缘政治事件和突发的流动性危机。这些剧烈的价格跳跃,是标准正态分布根本无法捕捉的"肥尾"风险。

本文将带你实现一个完整的 Merton 跳跃扩散(MJD)模型 校准引擎,包括:

  1. 1. 数据清洗:识别并处理期货合约换月造成的"假跳跃"
  2. 2. 参数校准:使用最大似然估计(MLE)拟合跳跃扩散过程
  3. 3. 蒙特卡洛模拟:向量化生成上千条价格路径
  4. 4. 风险对比:量化 GBM 与 MJD 模型在尾部风险上的差距

最终结论令人震惊:标准 GBM 模型低估了约 24% 的尾部风险

一、为什么需要跳跃扩散模型?

1.1 传统 GBM 模型的缺陷

几何布朗运动假设价格变化是连续、平滑的,遵循正态分布。但现实中的商品市场:

  • • 存在突发的供应中断(如 OPEC 减产)
  • • 地缘政治事件导致价格瞬间暴涨暴跌
  • • 收益率分布呈现明显的"肥尾"特征

1.2 两个常见错误

错误一:忽视肥尾风险,导致预期损失(CVaR)被严重低估。

错误二:直接使用拼接的期货数据,把合约换月产生的价差当成真实的市场跳跃。

二、数据清洗:识别并屏蔽换月噪声

当你从 yfinance 获取 CL=F(原油期货)数据时,看到的是多个月份合约拼接而成的连续序列。合约换月时的价差是确定性的,而非随机跳跃。

2.1 5-Sigma 窗口检测器

我们的策略是:在每月最后 3 个交易日内,将超过 5 倍标准差的收益率标记为换月噪声,并将其置零。

import numpy as np
import
 pandas as pd
import
 yfinance as yf

class
 Config:
    """全局配置参数"""

    PRIMARY_TICKER = 'CL=F'  # 原油期货
    START_DATE = "2020-01-01"
    END_DATE = "2025-12-18"
    ROLL_WINDOW_DAYS = 3      # 换月窗口天数
    OUTLIER_SIGMA = 5.0       # 异常值阈值
    DT = 1 / 252.0            # 日时间步长

def
 fetch_and_clean_data(ticker: str) -> pd.DataFrame:
    """
    获取期货数据并清洗换月噪声

    参数:
        ticker: 期货代码
    返回:
        清洗后的 DataFrame
    """

    # 下载原始数据

    df = yf.download(
        ticker,
        start=Config.START_DATE,
        end=Config.END_DATE,
        auto_adjust=False,
        progress=False
    )

    # 计算对数收益率

    df['Log_Returns'] = np.log(df['Close'] / df['Close'].shift(1))
    std_returns = df['Log_Returns'].std()

    # 标记换月窗口:每月最后 3 个交易日

    df['Is_Roll_Window'] = False
    month_ends = df.index.to_series().groupby(pd.Grouper(freq='ME')).max()

    for
 me in month_ends:
        # 获取该月末前 3 天的索引

        window_indices = df.index[df.index <= me][-Config.ROLL_WINDOW_DAYS:]
        df.loc[window_indices, 'Is_Roll_Window'] = True

    # 在换月窗口内,屏蔽超过 5 倍标准差的收益率

    mask_condition = (
        (df['Is_Roll_Window']) & 
        (np.abs(df['Log_Returns']) > Config.OUTLIER_SIGMA * std_returns)
    )

    outlier_count = mask_condition.sum()
    print
(f"检测到 {outlier_count} 个换月噪声点,已屏蔽")

    # 将噪声收益率置零(而非删除,保持时间连续性)

    df.loc[mask_condition, 'Log_Returns'] = 0.0

    return
 df.dropna(subset=['Log_Returns'])

# 执行数据清洗

clean_df = fetch_and_clean_data(Config.PRIMARY_TICKER)
print
(f"清洗后数据点数: {len(clean_df)}")

运行结果:

检测到 2 个换月噪声点,已屏蔽
清洗后数据点数: 1500

三、Merton 跳跃扩散模型详解

3.1 模型核心思想

MJD 模型将价格过程分解为两部分:

  • • 连续扩散:常规的随机波动(与 GBM 相同)
  • • 离散跳跃:由泊松过程驱动的随机冲击

关键参数包括:

参数
含义
漂移率
扩散波动率
跳跃强度(年化跳跃次数)
跳跃幅度均值
跳跃幅度标准差

3.2 补偿项的重要性

为确保模型的期望收益与漂移参数一致,必须引入补偿项


四、最大似然估计(MLE)校准

MJD 的概率密度函数是一个混合分布:多个正态分布按泊松权重加权求和。我们使用 logsumexp 技巧保证数值稳定性。

import math
from
 scipy.stats import norm
from
 scipy.special import logsumexp
from
 statsmodels.base.model import GenericLikelihoodModel

class
 MertonMLE(GenericLikelihoodModel):
    """
    Merton 跳跃扩散模型的最大似然估计器

    参数向量: [mu, sigma, lambda, mu_j, sigma_j]
    """


    def
 __init__(self, endog, dt=1/252, max_jumps=10):
        super
().__init__(endog)
        self
.dt = dt              # 时间步长
        self
.max_jumps = max_jumps  # 泊松求和截断项数

    def
 nloglikeobs(self, params):
        """计算每个观测点的负对数似然"""

        mu, sigma, lamb, mu_j, sigma_j = params
        y = self.endog  # 对数收益率序列
        dt = self.dt

        # 参数有效性检查

        if
 sigma <= 1e-6 or lamb < 0 or sigma_j <= 1e-6:
            return
 np.ones_like(y) * 1e10

        log_probs = []

        # 对跳跃次数 k 从 0 到 max_jumps 求和

        for
 k in range(self.max_jumps):
            # 泊松权重(对数形式)

            log_weight = (
                -lamb * dt + 
                k * np.log(np.maximum(lamb * dt, 1e-12)) - 
                np.log(float(math.factorial(k)))
            )

            # 给定 k 次跳跃时的正态分布参数

            mean_k = (mu - 0.5 * sigma**2) * dt + k * mu_j
            var_k = sigma**2 * dt + k * sigma_j**2

            # 正态分布的对数概率密度

            lp = log_weight + norm.logpdf(y, loc=mean_k, scale=np.sqrt(var_k))
            log_probs.append(lp)

        # 使用 logsumexp 合并(保证数值稳定)

        total_log_ll = logsumexp(np.vstack(log_probs), axis=0)

        return
 -total_log_ll  # 返回负对数似然

def
 calibrate_mjd(returns: np.ndarray) -> np.ndarray:
    """
    使用 MLE 校准 Merton 跳跃扩散模型

    参数:
        returns: 对数收益率数组
    返回:
        校准后的参数数组 [mu, sigma, lambda, mu_j, sigma_j]
    """

    dt = Config.DT

    # 初始参数猜测

    start_params = [
        np.mean(returns) / dt,      # mu: 年化漂移
        np.std(returns) / np.sqrt(dt),  # sigma: 年化波动率
        5.0
,                         # lambda: 初始跳跃强度
        0.0
,                         # mu_j: 跳跃均值
        np.std(returns)              # sigma_j: 跳跃波动率
    ]

    # 创建模型并拟合

    model = MertonMLE(returns, dt=dt)
    result = model.fit(
        start_params=start_params,
        method='nm',       # Nelder-Mead 算法,对非凸优化更稳健
        maxiter=1000,
        disp=0
    )

    return
 result.params

# 校准模型

returns = clean_df['Log_Returns'].values
mle_params = calibrate_mjd(returns)

# 打印校准结果

param_names = ['漂移率 (μ)', '扩散波动率 (σ)', '跳跃强度 (λ)',
               '跳跃均值 (μ_j)'
, '跳跃波动率 (σ_j)']
print
("\n========== 校准结果 ==========")
for
 name, value in zip(param_names, mle_params):
    print
(f"{name}: {value:.4f}")

校准结果示例:

========== 校准结果 ==========
漂移率 (μ): 0.3275
扩散波动率 (σ): 0.3212
跳跃强度 (λ): 17.5882
跳跃均值 (μ_j): -0.0148
跳跃波动率 (σ_j): 0.0859

解读:模型识别出原油期货平均每年发生约 17.6 次跳跃,且跳跃均值为负,说明下行冲击略多于上行。

五、向量化蒙特卡洛模拟

为了高效生成数千条价格路径,我们采用 NumPy 的向量化操作,避免低效的循环。

def simulate_mjd_paths(
    S0: float,
    params: np.ndarray,
    steps: int = 252,
    paths: int = 1000
) -> np.ndarray:
    """
    向量化生成 MJD 价格路径

    参数:
        S0: 初始价格
        params: 模型参数 [mu, sigma, lambda, mu_j, sigma_j]
        steps: 模拟步数(天数)
        paths: 路径数量
    返回:
        价格矩阵,形状为 (steps+1, paths)
    """

    mu, sigma, lamb, mu_j, sigma_j = params
    dt = Config.DT

    # 计算补偿项 k

    k = np.exp(mu_j + 0.5 * sigma_j**2) - 1

    # 补偿后的漂移

    drift = (mu - 0.5 * sigma**2 - lamb * k) * dt

    # 生成扩散部分(标准正态)

    Z = np.random.standard_normal((steps, paths))
    diffusion = sigma * np.sqrt(dt) * Z

    # 生成跳跃部分

    # 泊松分布决定每个时间步的跳跃次数

    N = np.random.poisson(lamb * dt, (steps, paths))
    # 跳跃幅度 = 次数 × 均值 + 根号(次数) × 标准差 × 正态随机数

    J = N * mu_j + np.sqrt(N) * sigma_j * np.random.standard_normal((steps, paths))

    # 合并对数增量

    log_increments = drift + diffusion + J

    # 累积求和并转换为价格

    path_matrix = S0 * np.exp(np.cumsum(log_increments, axis=0))

    # 在首行添加初始价格

    path_matrix = np.vstack([np.ones(paths) * S0, path_matrix])

    return
 path_matrix

# 获取最新价格

current_price = clean_df['Close'].iloc[-1]

# 模拟 MJD 路径

mjd_paths = simulate_mjd_paths(current_price, mle_params, steps=252, paths=1000)
print
(f"生成 {mjd_paths.shape[1]} 条路径,每条 {mjd_paths.shape[0]} 个时间点")

六、风险度量与模型对比

6.1 VaR 与 CVaR 计算

def calculate_risk_metrics(paths: np.ndarray, confidence: float = 0.99):
    """
    计算 VaR 和 CVaR(预期损失)

    参数:
        paths: 价格路径矩阵
        confidence: 置信水平
    返回:
        (VaR, CVaR) 元组
    """

    # 计算终端收益率

    final_returns = (paths[-1] / paths[0]) - 1

    # VaR: 给定置信水平下的最大损失分位点

    alpha = 1 - confidence
    var = np.percentile(final_returns, alpha * 100)

    # CVaR: 超过 VaR 损失的平均值

    cvar = final_returns[final_returns <= var].mean()

    return
 var, cvar

# 计算 MJD 模型的风险

mjd_var, mjd_cvar = calculate_risk_metrics(mjd_paths)

# 生成 GBM 基准路径(跳跃参数设为 0)

gbm_params = np.array([mle_params[0], mle_params[1], 0.0, 0.0, 0.0])
gbm_paths = simulate_mjd_paths(current_price, gbm_params, steps=252, paths=1000)
gbm_var, gbm_cvar = calculate_risk_metrics(gbm_paths)

# 结果对比

print
("\n========== 风险度量对比 (99% 置信水平) ==========")
print
(f"{'模型':<20} {'VaR':<15} {'CVaR (预期损失)':<15}")
print
("-" * 50)
print
(f"{'MJD (跳跃扩散)':<20} {mjd_var:.2%}      {mjd_cvar:.2%}")
print
(f"{'GBM (标准模型)':<20} {gbm_var:.2%}      {gbm_cvar:.2%}")
print
("-" * 50)
print
(f"风险低估差距: {abs(mjd_cvar - gbm_cvar):.2%}")

输出结果:

========== 风险度量对比 (99% 置信水平) ==========
模型                  VaR            CVaR (预期损失)
--------------------------------------------------
MJD (跳跃扩散)        -56.23%        -66.75%
GBM (标准模型)        -35.12%        -42.41%
--------------------------------------------------
风险低估差距: 24.34%

6.2 结果解读

指标
GBM 模型
MJD 模型
差距
CVaR
-42.41%
-66.75%
24.34%

这意味着:如果你用 GBM 模型设置风险限额,一次真实的跳跃事件可能导致的损失会超出你预期的 24 个百分点

七、完整代码示例

"""
Merton 跳跃扩散模型完整实现
用于商品期货的风险分析
"""


import
 numpy as np
import
 pandas as pd
import
 yfinance as yf
import
 math
from
 scipy.stats import norm
from
 scipy.special import logsumexp
from
 statsmodels.base.model import GenericLikelihoodModel

# ==================== 配置 ====================

class
 Config:
    PRIMARY_TICKER = 'CL=F'
    START_DATE = "2020-01-01"
    END_DATE = "2025-12-18"
    ROLL_WINDOW_DAYS = 3
    OUTLIER_SIGMA = 5.0
    DT = 1 / 252.0
    SIM_PATHS = 1000
    SIM_STEPS = 252
    CONFIDENCE = 0.99

# ==================== 数据处理 ====================

def
 fetch_and_clean_data(ticker: str) -> pd.DataFrame:
    """获取并清洗期货数据"""

    df = yf.download(ticker, start=Config.START_DATE, 
                     end=Config.END_DATE, auto_adjust=False, progress=False)
    df['Log_Returns'] = np.log(df['Close'] / df['Close'].shift(1))
    std_returns = df['Log_Returns'].std()

    # 标记换月窗口

    df['Is_Roll_Window'] = False
    month_ends = df.index.to_series().groupby(pd.Grouper(freq='ME')).max()
    for
 me in month_ends:
        window_indices = df.index[df.index <= me][-Config.ROLL_WINDOW_DAYS:]
        df.loc[window_indices, 'Is_Roll_Window'] = True

    # 屏蔽换月噪声

    mask = (df['Is_Roll_Window']) & (np.abs(df['Log_Returns']) > Config.OUTLIER_SIGMA * std_returns)
    df.loc[mask, 'Log_Returns'] = 0.0

    return
 df.dropna(subset=['Log_Returns'])

# ==================== MLE 校准 ====================

class
 MertonMLE(GenericLikelihoodModel):
    def
 __init__(self, endog, dt=1/252, max_jumps=10):
        super
().__init__(endog)
        self
.dt = dt
        self
.max_jumps = max_jumps

    def
 nloglikeobs(self, params):
        mu, sigma, lamb, mu_j, sigma_j = params
        y = self.endog
        dt = self.dt

        if
 sigma <= 1e-6 or lamb < 0 or sigma_j <= 1e-6:
            return
 np.ones_like(y) * 1e10

        log_probs = []
        for
 k in range(self.max_jumps):
            log_weight = -lamb * dt + k * np.log(np.maximum(lamb * dt, 1e-12)) - np.log(float(math.factorial(k)))
            mean_k = (mu - 0.5 * sigma**2) * dt + k * mu_j
            var_k = sigma**2 * dt + k * sigma_j**2
            lp = log_weight + norm.logpdf(y, loc=mean_k, scale=np.sqrt(var_k))
            log_probs.append(lp)

        return
 -logsumexp(np.vstack(log_probs), axis=0)

def
 calibrate_mjd(returns):
    start_params = [np.mean(returns)/Config.DT, np.std(returns)/np.sqrt(Config.DT), 5.0, 0.0, np.std(returns)]
    model = MertonMLE(returns, dt=Config.DT)
    result = model.fit(start_params=start_params, method='nm', maxiter=1000, disp=0)
    return
 result.params

# ==================== 模拟与风险计算 ====================

def
 simulate_paths(S0, params, steps, paths):
    mu, sigma, lamb, mu_j, sigma_j = params
    dt = Config.DT
    k = np.exp(mu_j + 0.5 * sigma_j**2) - 1
    drift = (mu - 0.5 * sigma**2 - lamb * k) * dt

    Z = np.random.standard_normal((steps, paths))
    diffusion = sigma * np.sqrt(dt) * Z
    N = np.random.poisson(lamb * dt, (steps, paths))
    J = N * mu_j + np.sqrt(N) * sigma_j * np.random.standard_normal((steps, paths))

    log_increments = drift + diffusion + J
    path_matrix = S0 * np.exp(np.cumsum(log_increments, axis=0))
    return
 np.vstack([np.ones(paths) * S0, path_matrix])

def
 calculate_cvar(paths):
    final_returns = (paths[-1] / paths[0]) - 1
    var = np.percentile(final_returns, (1 - Config.CONFIDENCE) * 100)
    return
 final_returns[final_returns <= var].mean()

# ==================== 主程序 ====================

if
 __name__ == "__main__":
    # 1. 数据准备

    df = fetch_and_clean_data(Config.PRIMARY_TICKER)
    returns = df['Log_Returns'].values
    S0 = df['Close'].iloc[-1]

    # 2. 模型校准

    params = calibrate_mjd(returns)
    print
(f"跳跃强度: {params[2]:.2f} 次/年")

    # 3. 风险对比

    mjd_cvar = calculate_cvar(simulate_paths(S0, params, Config.SIM_STEPS, Config.SIM_PATHS))
    gbm_cvar = calculate_cvar(simulate_paths(S0, np.array([params[0], params[1], 0, 0, 0]), Config.SIM_STEPS, Config.SIM_PATHS))

    print
(f"\nMJD CVaR: {mjd_cvar:.2%}")
    print
(f"GBM CVaR: {gbm_cvar:.2%}")
    print
(f"风险低估: {abs(mjd_cvar - gbm_cvar):.2%}")

总结

本文实现了一个完整的 Merton 跳跃扩散模型校准与风险分析流程,核心要点包括:

数据清洗层面:使用 5-Sigma 窗口检测器识别期货换月造成的伪跳跃,避免污染模型校准。

模型校准层面:通过最大似然估计(MLE)拟合五个参数,其中跳跃强度 λ 是区分 MJD 与 GBM 的关键指标。

风险度量层面:向量化蒙特卡洛模拟高效生成价格路径,CVaR(预期损失)比 VaR 更能反映尾部风险的严重程度。

核心发现:在原油期货数据上,标准 GBM 模型低估了约 24% 的尾部风险——这足以让一个按常规模型设置风险限额的交易者在极端行情中爆仓。

对于生产环境,建议采用滚动窗口校准以捕捉市场状态变化,并考虑使用交易所公布的换月价差进行更精确的数据调整。

参考文章

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

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

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

  1. 1. 双典系统赋能:获赠《财经数据宝典》与《量化投研宝典》完整文档,凝练多年实战经验,构建系统化知识框架;
  2. 2. 量化因子日更教程(2026重磅新增):每日更新「量化因子专题教程」,配套完整可运行代码与实战案例,深度拆解因子构建、回测与优化全流程;
  3. 3. 量化文章专题教程库:300+篇星球独有高质量教程式文章,系统覆盖策略开发、因子研究、风险管理等核心领域,内容基本每日更新,并配套精选学习资料与实战参考;
  4. 4. PyBroker实战课程:赠送《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-02-28 09:04:02 HTTP/2.0 GET : https://f.mffb.com.cn/a/475891.html
  2. 运行时间 : 0.125623s [ 吞吐率:7.96req/s ] 内存消耗:4,508.27kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1683b498d87e975f7c5cd07c03406deb
  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.000442s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000861s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000328s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000278s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000653s ]
  6. SELECT * FROM `set` [ RunTime:0.000228s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000676s ]
  8. SELECT * FROM `article` WHERE `id` = 475891 LIMIT 1 [ RunTime:0.007772s ]
  9. UPDATE `article` SET `lasttime` = 1772240642 WHERE `id` = 475891 [ RunTime:0.017192s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000324s ]
  11. SELECT * FROM `article` WHERE `id` < 475891 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000627s ]
  12. SELECT * FROM `article` WHERE `id` > 475891 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000433s ]
  13. SELECT * FROM `article` WHERE `id` < 475891 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001159s ]
  14. SELECT * FROM `article` WHERE `id` < 475891 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009733s ]
  15. SELECT * FROM `article` WHERE `id` < 475891 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.014921s ]
0.127193s