当前位置:首页>python>一个 Python 量化策略的「回测陷阱」全记录

一个 Python 量化策略的「回测陷阱」全记录

  • 2026-09-02 16:10:35
一个 Python 量化策略的「回测陷阱」全记录

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

量化交易的生死线:用 Python 算出你的最优下注比例

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

引言

很多刚接触量化交易的 Python 学习者,第一次跑出漂亮的回测曲线时都会心跳加速:胜率 73%、盈利因子 2.14、最大回撤只有 13%,看起来简直是「印钞机」。但真相往往藏在代码的细节里——一个参数写错,整份报告的结论就可能被推翻。

本文以一个经典的「RSI(2) 超卖回归 + 200 日均线趋势过滤」策略为案例,完整复盘它在 SPY(标普 500 ETF)上跨越 33.5 年的回测过程。我们不只看它赚了多少,更要拆解那些新手极易踩坑的地方:年化口径写错、闲置现金收益被忽略、成交价与估值价错位、交易成本假设失真……这些正是把一个「看似能打」的策略打回原形的关键。读完你会明白:在量化里,能正确地怀疑自己的回测,比跑出高收益更重要。


一、策略是怎么设计的

这是一个「顺大势、抄小底」的均值回归系统:只在长期上涨趋势里,抓住短期超卖的瞬间买入,等价格一反弹就卖出。它只有三条规则,没有任何拟合参数。

组件
规则
趋势过滤(Regime)
收盘价 > SMA(200)
入场(Entry)
RSI(2) < 15(Wilder 平滑),且趋势过滤为真
出场(Exit)
收盘价 > 前一根 K 线的最高价(Qs 出场)
仓位
100% 满仓,无杠杆,无止损

背后的经济学假设很朴素:在一个已经确立的上涨趋势中,短期的超卖极值往往是「流动性事件」而非「信息事件」——也就是恐慌性抛售,而不是基本面变坏。当被迫卖出的筹码清理完毕,价格就会回归。而 200 日均线这个趋势过滤器的作用,是防止系统在真正熊市的初期就急着抄底。

核心信号代码如下:

# 趋势过滤:收盘价站上 200 日均线,视为多头环境df["Bull_Regime"] = df["Close"] > df["SMA200"]# 超卖信号:2 周期 RSI 跌破 15df["Oversold"] = df["RSI"] < 15.0# Qs 出场:今日收盘价突破昨日最高价,视为「转强」df["Qs_Exit"] = df["Close"] > df["High"].shift(1)# 入场需同时满足「多头环境」与「超卖」df["entry_signal"] = df[["Bull_Regime", "Oversold"]].all(axis=1)# 出场只看是否转强df["exit_signal"] = df[["Qs_Exit"]].all(axis=1)

知识补充:RSI(2) 是 Larry Connors 提出的短周期均值回归经典参数。周期越短,RSI 越敏感,对「短期极端」的捕捉越强。传统 RSI 常用 14 周期,而这里用 2 是刻意为之。


二、三个决定「回测是否可信」的实现细节

一份回测报告是否可信,往往不取决于策略逻辑,而取决于工程实现。这里有三个关键控制点,每一个都是新手高发的坑。

1. 信号滞后(避免未来函数)。 所有条件都在第 t 根 K 线上计算,然后向后平移一根,再交给引擎。这样,t 收盘时才确认的信号,最早只能在 t+1 执行:

def shift_bool(s):    # 信号整体后移一格,首值填 False,避免用到「当下还不知道」的信息    return s.shift(1).fillna(False).astype(bool).to_numpy()entries = shift_bool(df["entry_signal"])exits = shift_bool(df["exit_signal"])

2. 成交价的选择。 引擎被传入了 close=df["Open"],意味着 t 收盘确认的信号,会在 t+1 的开盘价成交。这一点对本策略至关重要——因为它的平均持仓只有 3.6 根 K 线。如果贪图省事,用「同一根 K 线的收盘价」去成交 2 周期 RSI 信号,就会机械地「吃掉」大部分反弹收益,制造出根本无法真实交易的虚假利润。

3. 交易摩擦。 单边 1bp 手续费 + 2bp 滑点,往返共 6bp。

4. RSI 的算法。 使用 Wilder 平滑(通过 ewm(alpha=1/period, adjust=False) 实现),并对「平均亏损为 0」的情况做了返回 100 的保护。这一步很关键:如果错用简单滚动均值,在周期为 2 时算出来的 RSI 会与正确值有实质差异。

易错点提醒:这里有一个隐藏的口径不一致——因为开盘价序列被当成 close 传进引擎,所以整个组合的估值和回撤衡量都变成了「开盘价对开盘价」。也就是说,估值时点和信号评估时点在盘中不是同一个位置。这是一种「为了避免未来函数」而引入的次要瑕疵。


三、回测结果一览

跑完 8438 根 K 线(约 33.5 年)后,主要指标如下:

指标
数值
期末净值
$543,153
总回报
443.15%
基准(买入持有)回报
3,095.22%
累计手续费
$21,383
最大回撤
13.44%
最大回撤持续
870 天
总交易数
381(全部平仓)
胜率
73.75%
最佳 / 最差单笔
+6.74% / −9.40%
平均盈利 / 平均亏损
+1.093% / −1.332%
盈利因子
2.14

单看数字很漂亮:胜率 73.75%,盈利因子超过 2,最大回撤只有 13%。但请记住这一句——它的总回报 443%,远远跑输了大盘的 3095%。 接下来的分析,就是要搞清楚这个差距到底意味着什么。


四、最致命的坑:年化口径写错了

这是全文最值得每个 Python 量化新手记住的教训。

引擎在初始化时传入了 freq="1D",却用了默认的 365 天/年。于是它把 8438 个交易日当成了 8438 个自然日,硬生生把 33.5 年的测试压缩成了 23.1 年来复利计算——所有年化指标全部被高估。

这个错误甚至可以从报告自身反推出来:Calmar 0.5652 × 最大回撤 13.436% ≈ 7.59% 的 CAGR;而 443.15% 复利到 7.59%,需要 23.1 年;8438 ÷ 23.1 ≈ 365,正好对上「365 天/年」的错误假设。

修复只需一行:

# 关键修正:明确告诉引擎一年有 252 个交易日pf = vbt.Portfolio.from_signals(..., freq="1D", year_freq="252 days")

修正前后对比,差距触目惊心:

统计量
修正前(错误)
修正后(252 天/年)
CAGR
7.59%
5.18%
Sharpe
0.881
0.732
Sortino
1.326
1.102
Calmar
0.565
0.386

一个参数,年化收益虚高了近 2.4 个百分点,夏普比率虚高了 0.15。所有后续对比,都必须用修正后的数字。 同期 SPY 买入持有的真实年化约为 10.89%。

知识补充year_freq 决定了「一年有多少个 bar」,是所有年化指标(CAGR、Sharpe、Sortino、Calmar)的分母基础。日线策略务必显式设置为 252(美股交易日),A 股约为 242,切勿使用默认的 365。这是回测框架里最常见、也最隐蔽的错误之一。


五、跑输大盘,就一定是差策略吗?

表面看,5.18% 对阵 10.89%,策略被完败。但这个比较并不公平——因为两者承担的风险量根本不在一个量级。

这个策略在 8438 根 K 线里,只有 1387 根持有仓位,也就是说它有 83.56% 的时间是空仓的。如果我们按「单位市场暴露的回报」来归一化:

单位暴露回报
Calmar
策略
~31.5%
0.386
SPY 买入持有
10.89%
~0.21

按单位「资金-时间」暴露算,策略的效率大约是被动持有的 3 倍;按单位回撤算,大约是 2 倍。

它的产品是「风险特征」,而不是「绝对收益」。 用四分之一的回撤,换取了同一趋势里更高的资金使用效率。

不过要注意:这种效率并不能简单地通过加杠杆「变现」。回撤会随杠杆近似线性放大——3 倍杠杆下最大回撤约 40%,而那笔 −9.40% 的最差交易会变成 −28%(记住它没有止损)。在 2 倍杠杆、扣除融资成本后,收益趋近于买入持有,却要承受约 27% 的回撤和 762 次额外的交易执行。效率是真实的,但并不容易被直接收割。


六、被忽略的「现金腿」:空仓的钱去哪了?

这是整个模型里最大的单项遗漏,也是新手最容易忽视的一环。

模型假设闲置资金利息为零。由于仓位是二元的(要么 100% 满仓,要么 100% 现金),总回报可以拆解成两条腿相乘:

# 总回报 = 权益腿 × 现金腿# 当前模型:现金腿 = 1.00(空仓不产生任何收益)Total = Equity_leg × Cash_leg = 5.43x × 1.00x

前面说过,策略有 83.56% 的时间空仓,相当于有 28 年的资金躺着吃 0 利息。如果给这条现金腿补上一个短期国债收益:

假设现金收益
现金腿
期末净值
CAGR
0%(当前测试)
1.00x
$543,000
5.18%
2%
1.74x
$946,000
6.94%
3%
2.29x
$1,243,000
7.81%
4%
3.00x
$1,629,000
8.70%

考虑到 1993—2026 年间 3 个月期国债平均收益率约为 3%,在这个水平下,策略实际复利约 7.8%,对阵大盘的 10.9%,但峰值回撤只有 13.4%,而大盘曾超过 50%。

这意味着真正公平的基准,不该是 100% 股票,而应该是「现金 + 股票」的混合配置。 空仓时的机会成本,必须被计入模型。


七、交易分布与结构性风险

交易记录是自洽的。 每笔交易的期望值为 +0.4566%,理论复利 381 × 0.4566% ≈ 5.69 倍,实际观测到 5.43 倍,差额恰好与手续费和滑点的损耗吻合。

这个分布是短周期均值回归的教科书式特征:高胜率(73.75%)、负偏度(平均亏损是平均盈利的 1.22 倍)、亏损单持有时间几乎是盈利单的两倍。为什么亏损单拿得更久?因为出场条件是「收盘突破前高」——当仓位处于浮亏时,这个条件在机制上就更难满足。

但它有一个结构性风险:趋势过滤只管入场,不管出场。 一旦开仓,系统会一直持有到「转强」为止,哪怕 200 日趋势早已破位。如果在趋势破位前夕的 RSI 洗盘中入场,就会被一路持有到深跌之中,直到某根强势 K 线出现——而那时价格可能已经低了很多。那笔 −9.40% 的最差交易和 870 天的最大回撤持续期,都与这个暴露一致。

最小可行的修复:

# 在原出场条件上,叠加「趋势破位则离场」# ~df["Bull_Regime"] 表示收盘价跌破 200 日均线df["exit_signal"] = df["Qs_Exit"] | (~df["Bull_Regime"])

考虑到盈利单的中位持仓只有 2.9 根 K 线,「持有 N 根 K 线后强制离场」的时间止损,也是一个自然的替代方案。


八、成本假设与统计稳健性

成本会随时代变化。 6bp 的往返成本对 2010 年后的 SPY 是合理的,但对测试的前三分之一完全站不住脚。SPY 在 2001 年小数化改革前是以 1/16 报价的:45 美元股价上的 1/16 价差,单边约 14bp。也就是说,2001 年前的真实摩擦,可能是模型假设的 4—8 倍。

这一点影响巨大,因为平均盈利单只有 +1.093%,多出 20bp 的往返成本就吃掉了它的约 18%。对约 150 笔 2001 年前的交易施加真实成本后,期末净值会向 $420,000 靠拢(20%—25% 的折损)——而偏偏,权益曲线最陡峭的上涨正好发生在 1995—2000 年,恰恰是成本模型最不可靠的区间。

建议采用分时段的成本表:2001 年前 25bp 往返,2001—2010 年 10bp,之后 6bp。

统计上还有三条硬约束需要牢记:

第一,单一标的,N = 1。全部 381 个观测都来自同一条价格序列,宏观状态高度重叠,真正「独立」的市场事件其实只有几十个。

第二,规则来源。RSI(2) + 200 日过滤 + 转强出场是广为流传的公开逻辑,源自对 1993—2007 窗口的研究。因此测试的前半段对规则的「发现过程」而言其实是样本内的——哪怕这里没有拟合任何参数。真正的样本外大约从 2008 年开始,这段期间净值从约 21 万涨到 54.3 万,年化约 4.9%,仍不到基准的一半。

第三,暴露指标的口径。报告里的 16.44% 是由一个独立循环算出的,它对「同一根 K 线上入场与出场冲突」的处理方式和引擎并不一致,数值大致正确,但并非 P&L 所依据的那条序列。更严谨的做法是直接从持仓记录里推导。


九、完整 Python 代码(含中文注释)

下面是可运行的完整实现,方便对照学习:

import numpy as npimport pandas as pdimport vectorbt as vbtimport yfinance as yf# ========== 参数配置 ==========SYMBOL = "SPY"START, END = "1993-01-01", "2030-01-01"SMA_PERIOD = 200          # 趋势过滤均线周期RSI_PERIOD = 2            # RSI 周期(短周期,捕捉极端超卖)RSI_ENTRY = 15.0          # RSI 入场阈值INIT_CASH = 100_000       # 初始资金FEES, SLIPPAGE = 0.0001, 0.0002   # 单边 1bp 手续费 + 2bp 滑点# 下载日线数据(多级列压平)df = yf.download(SYMBOL, start=START, end=END, interval="1d",                 multi_level_index=False)def wilder_rsi(close: pd.Series, period: int) -> pd.Series:    """Wilder 平滑版 RSI,短周期下与简单均值差异显著"""    delta = close.diff()    gain = delta.clip(lower=0.0)              # 上涨幅度    loss = -delta.clip(upper=0.0)             # 下跌幅度(取正)    # 用指数加权实现 Wilder 平滑,adjust=False 才是标准 Wilder 递推    avg_gain = gain.ewm(alpha=1 / period, min_periods=period, adjust=False).mean()    avg_loss = loss.ewm(alpha=1 / period, min_periods=period, adjust=False).mean()    rsi = 100.0 - 100.0 / (1.0 + avg_gain / avg_loss)    # 平均亏损为 0 时,RSI 定义为 100,避免除零    return rsi.where(avg_loss != 0, 100.0)# ========== 计算指标与条件 ==========df["SMA200"] = df["Close"].rolling(SMA_PERIOD).mean()df["RSI"] = wilder_rsi(df["Close"], RSI_PERIOD)df["Bull_Regime"] = df["Close"] > df["SMA200"]        # 多头环境df["Oversold"] = df["RSI"] < RSI_ENTRY                # 超卖df["Qs_Exit"] = df["Close"] > df["High"].shift(1)     # 转强出场entry_conditions = ["Bull_Regime", "Oversold"]exit_conditions = ["Qs_Exit"]df["entry_signal"] = df[entry_conditions].all(axis=1)df["exit_signal"] = df[exit_conditions].all(axis=1)def shift_bool(s: pd.Series) -> np.ndarray:    """信号后移一格,杜绝未来函数"""    return s.shift(1).fillna(False).astype(bool).to_numpy()entries = shift_bool(df["entry_signal"])exits = shift_bool(df["exit_signal"])# ========== 构建组合 ==========# 注意:这里把 Open 传入 close,使信号在次日开盘成交# 更严谨的写法见文末「修订建议」:close=df["Close"], price=df["Open"]pf = vbt.Portfolio.from_signals(    close=df["Open"],    entries=entries,    exits=exits,    init_cash=INIT_CASH,    fees=FEES,    slippage=SLIPPAGE,    freq="1D",    # 生产环境务必补上:year_freq="252 days")# ========== 统计市场暴露时间 ==========mask = np.zeros(len(df), dtype=bool)state = Falsefor i in range(len(df)):    if entries[i]:        state = True      # 入场,持仓    if exits[i]:        state = False     # 出场,空仓    mask[i] = stateprint(f"\n=== {SYMBOL} | Pullback + SMA{SMA_PERIOD} filter ===")print(f"Time in market: {mask.mean() * 100:.2f}% ({mask.sum()} of {len(df)} bars)\n")print(pf.stats())# ========== 可视化 ==========fig = pf.plot(    subplots=["value", "underwater", "orders", "trade_pnl"],    title=f"{SYMBOL}",)fig.update_layout(height=1200)fig.show()

总结

这个 RSI(2) + 200 日趋势过滤策略,确实如设计般运作:一个高胜率、短持仓的均值回归系统,用四分之一的回撤,换来了约 3 倍于被动持有的资金使用效率。但在原始复利口径下,它大幅跑输买入持有;即便正确计入现金腿收益后,仍然落后——只是差距小了很多。它的产品是风险特征,而不是绝对收益。

对正在学 Python 量化的你,本文更大的价值在于那份「回测踩坑清单」:

  1. 1. 务必设置 year_freq="252 days",否则所有年化指标都是错的;
  2. 2. 对现金腿计入短期利率收益,这是模型里最大的缺失项;
  3. 3. 估值用收盘价、成交用开盘价close=df["Close"], price=df["Open"]),而不是把开盘价当收盘价塞进引擎;
  4. 4. 使用分时段的交易成本表,尊重不同年代的真实摩擦;
  5. 5. 加入趋势离场或时间止损,再重新衡量盈利因子;
  6. 6. 对出场阈值做前推检验,因为 RSI 入场是众所周知的参数,出场规则才是未经检验的那一个;
  7. 7. 换到 QQQ、IWM、等权标普上复跑,验证效应究竟是普适的还是 SPY 特有的。

记住一句话:在量化世界里,一个能被自己怀疑并逐条修正的回测,远比一条陡峭上扬的净值曲线更值钱。 本文所有内容仅用于学习交流,不构成任何投资建议,实盘务必独立研究、谨慎决策。


参考文章

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

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

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