当前位置:首页>python>用 Python 实现布林带 + ADX 量化交易策略:从压力测试到前向验证

用 Python 实现布林带 + ADX 量化交易策略:从压力测试到前向验证

  • 2026-01-20 18:36:49
用 Python 实现布林带 + ADX 量化交易策略:从压力测试到前向验证

欢迎加入专注于财经数据与量化投研的【数据科学实战】知识星球!在这里,您将获取持续更新的《财经数据宝典》和《量化投研宝典》,这两部宝典相辅相成,为您在量化投研道路上提供明确指引。 我们提供了精选的国内外量化投研的 250+ 篇高质量文章,并每日更新最新研究成果,涵盖策略开发、因子分析、风险管理等核心领域。 无论您是量化投资新手还是经验丰富的研究者,星球社区都能帮您少走弯路,事半功倍,共同探索数据驱动的投资世界!

引言

你是否曾想过,如何用 Python 构建一个真正稳健的量化交易策略?很多初学者在学习量化交易时,往往只关注单一参数的优化,却忽略了策略的稳定性和适应性。

今天这篇文章将带你深入了解一个基于布林带(Bollinger Bands)扩张和 ADX 衰减的交易策略。更重要的是,我们将学习如何通过压力测试(Stress Test)和前向优化(Walk-Forward Optimization)来验证策略的稳健性,而不是简单地追求历史回测中的最佳参数。

策略核心逻辑

这个策略的思路非常直观:

  • 入场条件:当布林带宽度扩张时(波动率突破信号),表明市场可能进入趋势行情
  • 出场条件:当 ADX 指标下穿某个阈值时(趋势强度减弱信号),及时止盈离场

简单来说,就是在波动率扩大时进场,在趋势减弱时离场。

压力测试:验证策略稳健性

与其寻找一个"最优"参数组合,不如测试策略在大量参数组合下的整体表现。以下代码展示了如何进行压力测试:

import pandas as pdimport numpy as npimport yfinance as yfimport itertoolsimport vectorbt as vbtimport matplotlib.pyplot as plt# -------------------------# 下载历史数据# -------------------------symbol = "BALL"# 股票代码start_date = "2000-01-01"# 起始日期end_date = "2026-01-01"# 结束日期interval = "1d"# 日线数据# 从 Yahoo Finance 下载数据df_raw = yf.download(    symbol,    start=start_date,    end=end_date,    interval=interval,    multi_level_index=False)# -------------------------# 定义参数网格(用于压力测试)# -------------------------ADX_LEVELS = list(range(16252))  # ADX 阈值范围:16, 18, 20, 22, 24ADX_PERIODS = list(range(10212))  # ADX 周期范围:10, 12, 14, 16, 18, 20BB_PERIODS = list(range(16252))  # 布林带周期范围BB_SHIFTS = list(range(1102))  # 布林带宽度对比的偏移量BB_STDS = [1.522.53]  # 布林带标准差倍数# 生成所有参数组合param_sets = list(itertools.product(    ADX_LEVELS,    ADX_PERIODS,    BB_PERIODS,    BB_SHIFTS,    BB_STDS))print(f"总共需要测试 {len(param_sets)} 个参数组合")

指标计算函数

接下来定义布林带和 ADX 指标的计算函数:

defcalculate_bollinger_bands(df, period, std):"""    计算布林带指标    参数:        df: 包含价格数据的 DataFrame        period: 移动平均周期        std: 标准差倍数    返回:        中轨、上轨、下轨    """    ma = df['Close'].rolling(period).mean()  # 计算移动平均线(中轨)    sd = df['Close'].rolling(period).std()   # 计算标准差return ma, ma + std * sd, ma - std * sd  # 返回中轨、上轨、下轨defbb_expansion(df, period, std, shift):"""    判断布林带是否扩张    参数:        df: 价格数据        period: 布林带周期        std: 标准差倍数        shift: 对比的偏移周期数    返回:        布尔序列,True 表示布林带正在扩张    """    ma, upper, lower = calculate_bollinger_bands(df, period, std)    bandwidth = upper - lower  # 计算带宽return bandwidth > bandwidth.shift(shift)  # 当前带宽大于 shift 天前的带宽defcalculate_adx(df, period):"""    计算 ADX(平均趋向指标)    参数:        df: 包含 High、Low、Close 的 DataFrame        period: ADX 计算周期    返回:        ADX 序列    """    high, low, close = df['High'], df['Low'], df['Close']# 计算真实波幅(True Range)    tr = pd.concat([        high - low,        (high - close.shift()).abs(),        (low - close.shift()).abs()    ], axis=1).max(axis=1)# 计算方向移动(Directional Movement)    plus_dm = np.where(        (high - high.shift()) > (low.shift() - low),        np.maximum(high - high.shift(), 0), 0    )    minus_dm = np.where(        (low.shift() - low) > (high - high.shift()),        np.maximum(low.shift() - low, 0), 0    )# 计算方向指标    tr_n = tr.rolling(period).sum()    plus_di = 100 * pd.Series(plus_dm).rolling(period).sum() / tr_n    minus_di = 100 * pd.Series(minus_dm).rolling(period).sum() / tr_n# 计算 DX 和 ADX    dx = 100 * (plus_di - minus_di).abs() / (plus_di + minus_di)    adx = dx.rolling(period).mean()return adxdefadx_cross_below(df, period, level):"""    判断 ADX 是否下穿指定阈值    参数:        df: 价格数据        period: ADX 周期        level: 阈值    返回:        布尔序列,True 表示 ADX 下穿阈值    """    adx = calculate_adx(df, period)return (adx.shift(1) >= level) & (adx < level)

执行压力测试

# -------------------------# 压力测试主循环# -------------------------equity_curves = {}  # 存储所有参数组合的权益曲线for adx_level, adx_period, bb_period, bb_shift, bb_std in param_sets:    df = df_raw.copy()# 计算入场和出场信号    df['BB_Expansion'] = bb_expansion(df, period=bb_period, std=bb_std, shift=bb_shift)    df['ADX_Exit'] = adx_cross_below(df, period=adx_period, level=adx_level)# 生成交易信号(延迟一天执行,避免未来函数)    entries = df['BB_Expansion'].shift(1).astype(bool).fillna(False).to_numpy()    exits = df['ADX_Exit'].shift(1).astype(bool).fillna(False).to_numpy()# 使用 vectorbt 进行回测    pf = vbt.Portfolio.from_signals(        close=df['Open'],     # 使用开盘价成交        entries=entries,       # 入场信号        exits=exits,          # 出场信号        init_cash=100,        # 初始资金        fees=0.001,           # 手续费 0.1%        slippage=0.002,       # 滑点 0.2%        freq='1d'    )# 保存权益曲线    label = f"ADX({adx_period},{adx_level}) BB({bb_period},{bb_std}) S({bb_shift})"    equity_curves[label] = pf.value()# -------------------------# 绘制所有权益曲线# -------------------------plt.figure(figsize=(147))for label, curve in equity_curves.items():    plt.plot(curve.index, curve.values, alpha=0.35, linewidth=1)plt.title("权益曲线 - BALL 策略压力测试")plt.xlabel("日期")plt.ylabel("组合价值")plt.grid(True)plt.show()

与买入持有策略对比

压力测试的一个重要环节是将策略与简单的买入持有进行对比:

# -------------------------# 构建买入持有基准# -------------------------df_holding = df_raw['Open']pf_holding = vbt.Portfolio.from_holding(df_holding, init_cash=100, freq='1d')buy_hold_curve = pf_holding.value()# 计算所有策略的平均权益曲线equity_df = pd.DataFrame(equity_curves)average_equity = equity_df.mean(axis=1)# -------------------------# 绘制对比图# -------------------------plt.figure(figsize=(147))# 绘制所有压力测试曲线(浅灰色)for label, curve in equity_curves.items():    plt.plot(curve.index, curve.values, alpha=0.25, linewidth=1, color='gray')# 绘制平均权益曲线(蓝色粗线)plt.plot(average_equity.index, average_equity.values,          color='blue', linewidth=2, label='策略平均表现')# 绘制买入持有曲线(红色虚线)plt.plot(buy_hold_curve.index, buy_hold_curve.values,          color='red', linewidth=2, linestyle='--', label='买入持有')plt.title(f"权益曲线对比 - {symbol}")plt.xlabel("日期")plt.ylabel("组合价值 (%)")plt.legend()plt.grid(True, alpha=0.3)plt.tight_layout()plt.show()

压力测试的关键发现是:平均权益曲线持续高于买入持有曲线。这表明策略的优势是结构性的,而非来自某个特定的参数组合。

前向优化:更严格的验证

前向优化(Walk-Forward Optimization)是量化交易中验证策略稳健性的黄金标准。其核心思想是:

  1. 将数据分成训练窗口和测试窗口
  2. 在训练窗口中寻找最优参数
  3. 将找到的参数应用于测试窗口
  4. 滚动前进,重复以上步骤
defrun_walk_forward(df, train_years=4, test_years=1,                     ADX_LEVEL=[20], ADX_PERIOD=[14],                     BB_PERIOD=[20], BB_SHIFT=[2], BB_STD=[2]):"""    执行前向优化    参数:        df: 价格数据        train_years: 训练窗口年数        test_years: 测试窗口年数        其他参数: 各指标的参数范围    返回:        包含每个窗口优化结果的列表    """    results = []    max_lookback = max(max(ADX_PERIOD), max(BB_PERIOD)) + 10    start_year = df.index[0].year    end_year = df.index[-1].year# 滚动窗口遍历for train_start in range(start_year, end_year - train_years - test_years + 1):        train_end = train_start + train_years - 1        test_start = train_end + 1        test_end = test_start + test_years - 1# 获取训练和测试数据的索引        train_start_idx = df.index.get_loc(df[df.index.year == train_start].index[0])        train_end_idx = df.index.get_loc(df[df.index.year == train_end].index[-1])        test_start_idx = df.index.get_loc(df[df.index.year == test_start].index[0])        test_end_idx = df.index.get_loc(df[df.index.year == test_end].index[-1])# 切分数据(包含足够的回溯期)        train_slice = df.iloc[max(0, train_start_idx - max_lookback): train_end_idx + 1]        test_slice = df.iloc[max(0, test_start_idx - max_lookback): test_end_idx + 1]# 在训练窗口中寻找最优参数        best_perf = -np.inf        best_params = Nonefor al, ap, bp, sh, st in product(ADX_LEVEL, ADX_PERIOD, BB_PERIOD, BB_SHIFT, BB_STD):# 计算信号            entry_raw = bb_expansion(train_slice.copy(), bp, st, sh).fillna(False)            exit_raw = adx_cross_below(train_slice.copy(), ap, al).fillna(False)# 回测            pf_train = vbt.Portfolio.from_signals(                close=df['Open'].iloc[train_start_idx:train_end_idx+1],                entries=entry_raw.shift(1).astype(bool).fillna(False).to_numpy()[-len(df['Open'].iloc[train_start_idx:train_end_idx+1]):],                exits=exit_raw.shift(1).astype(bool).fillna(False).to_numpy()[-len(df['Open'].iloc[train_start_idx:train_end_idx+1]):],                init_cash=100_000,                fees=0.001,                slippage=0.002,                freq='1d'            )# 记录最佳参数if pf_train.total_return() > best_perf:                best_perf = pf_train.total_return()                best_params = (al, ap, bp, sh, st)        results.append({"train_period"f"{train_start}-{train_end}","test_period"f"{test_start}-{test_end}","params": best_params,"test_slice": test_slice        })return results

前向优化结果

根据文章中的前向优化结果,该策略在 2004 年至 2025 年期间的表现如下:

指标
策略表现
买入持有
总收益率
1010%
711%
最大回撤
49%
55%
总交易次数
68 次
-
胜率
63%
-
盈亏比
2.11
-

这个结果非常亮眼:策略不仅在收益上超越了买入持有,而且在风险控制上也更优秀(最大回撤更低)。

总结

本文介绍了一个基于布林带扩张和 ADX 衰减的量化交易策略,并重点讲解了两种验证策略稳健性的方法。

策略的核心思想非常简洁:在波动率扩张时入场捕捉趋势,在趋势强度减弱时离场保护利润。相比单一参数优化,压力测试通过测试大量参数组合来验证策略的普适性,而前向优化则通过模拟真实的参数调整过程来消除未来函数偏差。

对于 Python 学习者来说,这个案例展示了如何将 pandas、numpy 和 vectorbt 等工具结合起来进行量化策略开发。更重要的是,它教会我们一个核心理念:好的量化策略不是追求历史回测中的最优表现,而是寻找在各种参数和市场条件下都能稳定盈利的结构性优势。

需要注意的是,历史回测结果并不代表未来表现,任何策略在实盘使用前都需要进行充分的研究和测试。

参考文章

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

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

核心权益如下:

  1. 赠送《财经数据宝典》完整文档,汇集多年财经数据维护经验
  2. 赠送《量化投研宝典》完整文档,汇集多年量化投研领域经验
  3. 赠送《PyBroker-入门及实战》视频课程,手把手学习量化策略开发
  4. 每日分享高质量量化投研文章(已更新 180+篇)、代码和相关资料
  5. 定期更新高频财经数据
  6. 参与年度不少于 10 次专属直播与录播课程
  7. 与核心开发者直接交流,解决实际问题
  8. 获取专业微信群交流机会和课程折扣

星球已有丰富内容积累,包括量化投研论文、财经高频数据、 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-08 11:03:19 HTTP/2.0 GET : https://f.mffb.com.cn/a/464757.html
  2. 运行时间 : 0.230107s [ 吞吐率:4.35req/s ] 内存消耗:4,843.83kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=3df181d0b9ec5678f137964d6195a5ca
  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.000717s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000815s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000292s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000394s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000478s ]
  6. SELECT * FROM `set` [ RunTime:0.002500s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000568s ]
  8. SELECT * FROM `article` WHERE `id` = 464757 LIMIT 1 [ RunTime:0.000968s ]
  9. UPDATE `article` SET `lasttime` = 1770519800 WHERE `id` = 464757 [ RunTime:0.001112s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000210s ]
  11. SELECT * FROM `article` WHERE `id` < 464757 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000965s ]
  12. SELECT * FROM `article` WHERE `id` > 464757 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.007594s ]
  13. SELECT * FROM `article` WHERE `id` < 464757 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.022979s ]
  14. SELECT * FROM `article` WHERE `id` < 464757 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.013128s ]
  15. SELECT * FROM `article` WHERE `id` < 464757 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.021656s ]
0.233766s