当前位置:首页>python>投资组合优化实战:用Python实现智能资产配置

投资组合优化实战:用Python实现智能资产配置

  • 2026-02-23 10:25:13
投资组合优化实战:用Python实现智能资产配置

从单一股票到多元组合,让你的收益更稳健

在掌握了单个股票的择时策略后,你是否想过:如何将这些策略应用到多只股票上?如何分配资金才能获得更好的风险收益比?今天,我们就来深入探讨投资组合优化的实战技巧。

一、为什么需要投资组合?

真实案例的启示:2023年上半年,某投资者全仓押注某新能源股票,虽然一度获得30%的收益,但随后股价大幅回调,最终全年亏损15%。而另一位投资者将资金分散到5只不同行业的股票中,虽然单只股票最高收益只有20%,但全年整体收益达到18%。

这告诉我们一个核心道理:不要把所有鸡蛋放在一个篮子里。通过科学的资产配置,我们可以在控制风险的同时,获得更稳定的收益。

二、现代投资组合理论基础

1. 马科维茨均值-方差模型

现代投资组合理论的核心思想是:在给定的风险水平下,寻找预期收益最高的组合;或在给定的收益水平下,寻找风险最小的组合。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom scipy.optimize import minimizeimport tushare as tsfrom datetime import datetime, timedelta# 设置样式plt.style.use('seaborn-v0_8-darkgrid')plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 初始化tusharets.set_token('你的token')pro = ts.pro_api()# 获取多只股票数据(代表不同行业)def get_portfolio_data(tickers, start_date='20230101', end_date='20240601'):    """    获取投资组合数据    """    portfolio_data = {}    for ticker in tickers:        df = pro.daily(ts_code=ticker, start_date=start_date, end_date=end_date)        df['trade_date'] = pd.to_datetime(df['trade_date'])        df = df.sort_values('trade_date')        df.set_index('trade_date', inplace=True)        portfolio_data[ticker] = df['close']    # 合并数据    portfolio_df = pd.DataFrame(portfolio_data)    # 对齐数据(确保所有股票有相同的交易日期)    portfolio_df = portfolio_df.dropna()    return portfolio_df# 选择6只不同行业的代表性股票tickers = [    '600519.SH',  # 贵州茅台 - 消费    '601318.SH',  # 中国平安 - 金融    '300750.SZ',  # 宁德时代 - 新能源    '600036.SH',  # 招商银行 - 银行    '000858.SZ',  # 五粮液 - 消费    '601888.SH',  # 中国中免 - 消费]portfolio_prices = get_portfolio_data(tickers)print(f"投资组合包含{len(tickers)}只股票")print(f"数据时间范围: {portfolio_prices.index[0]} 到 {portfolio_prices.index[-1]}")print(f"数据维度: {portfolio_prices.shape}")

三、投资组合绩效分析

1. 计算收益率与协方差矩阵

def calculate_portfolio_metrics(prices_df):    """    计算投资组合基础指标    """    # 计算日收益率    returns = prices_df.pct_change().dropna()    # 计算年化收益率(假设252个交易日)    annual_returns = (1 + returns.mean()) ** 252 - 1    # 计算年化波动率    annual_volatility = returns.std() * np.sqrt(252)    # 计算协方差矩阵    cov_matrix = returns.cov() * 252    # 计算相关系数矩阵    corr_matrix = returns.corr()    metrics = {        'returns': returns,        'annual_returns': annual_returns,        'annual_volatility': annual_volatility,        'cov_matrix': cov_matrix,        'corr_matrix': corr_matrix    }    return metrics# 计算投资组合指标metrics = calculate_portfolio_metrics(portfolio_prices)# 可视化相关系数矩阵plt.figure(figsize=(108))sns.heatmap(metrics['corr_matrix'], annot=True, cmap='coolwarm'            center=0, fmt='.2f', square=True)plt.title('股票收益率相关系数矩阵', fontsize=15, pad=20)plt.tight_layout()plt.show()# 打印各股票表现print("各股票年化表现:")for ticker in tickers:    name = ticker[:6]    print(f"{name}: 年化收益={metrics['annual_returns'][ticker]:.2%}, "          f"年化波动={metrics['annual_volatility'][ticker]:.2%}")

2. 随机投资组合模拟

def simulate_random_portfolios(num_portfolios=10000):    """    模拟随机投资组合    """    returns = metrics['returns']    cov_matrix = metrics['cov_matrix']    results = np.zeros((3, num_portfolios))    weights_record = []    for i in range(num_portfolios):        # 生成随机权重        weights = np.random.random(len(tickers))        weights /= np.sum(weights)        weights_record.append(weights)        # 计算组合收益        portfolio_return = np.sum(weights * metrics['annual_returns'])        # 计算组合波动率        portfolio_volatility = np.sqrt(np.dot(weights.T,                                              np.dot(cov_matrix, weights)))        # 计算夏普比率(假设无风险利率3%)        sharpe_ratio = (portfolio_return - 0.03) / portfolio_volatility        results[0, i] = portfolio_return        results[1, i] = portfolio_volatility        results[2, i] = sharpe_ratio    return results, weights_record# 模拟10000个随机组合results, weights_record = simulate_random_portfolios(10000)# 找到最优组合max_sharpe_idx = np.argmax(results[2])min_vol_idx = np.argmin(results[1])print(f"\n最优夏普比率组合:")print(f"年化收益: {results[0, max_sharpe_idx]:.2%}")print(f"年化波动: {results[1, max_sharpe_idx]:.2%}")print(f"夏普比率: {results[2, max_sharpe_idx]:.2f}")print(f"\n最小波动组合:")print(f"年化收益: {results[0, min_vol_idx]:.2%}")print(f"年化波动: {results[1, min_vol_idx]:.2%}")print(f"夏普比率: {results[2, min_vol_idx]:.2f}")# 可视化有效前沿plt.figure(figsize=(128))plt.scatter(results[1], results[0], c=results[2],            cmap='viridis', alpha=0.6, s=10)plt.colorbar(label='夏普比率')plt.scatter(results[1, max_sharpe_idx], results[0, max_sharpe_idx],            c='red', s=200, marker='*', label='最大夏普比率组合')plt.scatter(results[1, min_vol_idx], results[0, min_vol_idx],            c='blue', s=200, marker='*', label='最小波动组合')plt.xlabel('年化波动率', fontsize=12)plt.ylabel('年化收益率', fontsize=12)plt.title('投资组合有效前沿', fontsize=15, pad=20)plt.legend()plt.grid(True, alpha=0.3)plt.tight_layout()plt.show()

四、优化投资组合权重

1. 最大化夏普比率

def optimize_portfolio_sharpe(metrics, risk_free_rate=0.03):    """    优化投资组合以最大化夏普比率    """    returns = metrics['returns']    cov_matrix = metrics['cov_matrix']    n_assets = len(tickers)    # 约束条件:权重和为1    constraints = ({'type''eq''fun'lambda x: np.sum(x) - 1})    # 边界条件:允许做空(权重可以为负),但限制在[-0.5, 0.5]    bounds = tuple((-0.50.5for _ in range(n_assets))    # 初始权重(等权重)    init_weights = n_assets * [1.0 / n_assets]    # 目标函数:最小化负夏普比率    def negative_sharpe(weights):        portfolio_return = np.sum(weights * metrics['annual_returns'])        portfolio_volatility = np.sqrt(np.dot(weights.T,                                              np.dot(cov_matrix, weights)))        sharpe = (portfolio_return - risk_free_rate) / portfolio_volatility        return -sharpe    # 优化    optimized = minimize(negative_sharpe, init_weights,                        method='SLSQP', bounds=bounds,                        constraints=constraints)    return optimized.x# 优化权重optimal_weights = optimize_portfolio_sharpe(metrics)print("\n最优权重分配:")for ticker, weight in zip(tickers, optimal_weights):    name = ticker[:6]    print(f"{name}{weight:.2%}")# 计算最优组合表现optimal_return = np.sum(optimal_weights * metrics['annual_returns'])optimal_volatility = np.sqrt(np.dot(optimal_weights.T,                                    np.dot(metrics['cov_matrix'], optimal_weights)))optimal_sharpe = (optimal_return - 0.03) / optimal_volatilityprint(f"\n最优组合表现:")print(f"年化收益: {optimal_return:.2%}")print(f"年化波动: {optimal_volatility:.2%}")print(f"夏普比率: {optimal_sharpe:.2f}")# 可视化权重分配plt.figure(figsize=(106))colors = plt.cm.Set3(np.linspace(01len(tickers)))plt.pie(optimal_weights, labels=[t[:6for t in tickers],         autopct='%1.1f%%', colors=colors, startangle=90)plt.title('最优投资组合权重分配', fontsize=15, pad=20)plt.tight_layout()plt.show()

2. 风险平价模型

def risk_parity_portfolio(cov_matrix, max_iter=1000, tolerance=1e-8):    """    风险平价模型:每个资产对组合风险的贡献相等    """    n = cov_matrix.shape[0]    weights = np.ones(n) / n  # 初始等权重    def risk_contribution(weights):        portfolio_volatility = np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights)))        marginal_risk = np.dot(cov_matrix, weights) / portfolio_volatility        risk_contrib = weights * marginal_risk        return risk_contrib    def objective(weights):        rc = risk_contribution(weights)        # 目标:使风险贡献尽可能相等        return np.sum((rc - rc.mean()) ** 2)    # 约束条件    constraints = ({'type''eq''fun'lambda x: np.sum(x) - 1})    bounds = tuple((01for _ in range(n))  # 不允许做空    # 优化    result = minimize(objective, weights,                      method='SLSQP', bounds=bounds,                     constraints=constraints,                     options={'maxiter': max_iter})    return result.x# 计算风险平价权重rp_weights = risk_parity_portfolio(metrics['cov_matrix'])print("\n风险平价权重分配:")for ticker, weight in zip(tickers, rp_weights):    name = ticker[:6]    print(f"{name}{weight:.2%}")# 计算风险贡献def calculate_risk_contribution(weights, cov_matrix):    """计算各资产的风险贡献"""    portfolio_volatility = np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights)))    marginal_risk = np.dot(cov_matrix, weights) / portfolio_volatility    risk_contrib = weights * marginal_risk    risk_contrib_pct = risk_contrib / portfolio_volatility    return risk_contrib_pct# 计算并比较风险贡献print("\n风险贡献分析:")rc = calculate_risk_contribution(rp_weights, metrics['cov_matrix'])for ticker, weight, contrib in zip(tickers, rp_weights, rc):    name = ticker[:6]    print(f"{name}: 权重={weight:.2%}, 风险贡献={contrib:.2%}")# 可视化风险贡献fig, (ax1, ax2) = plt.subplots(12, figsize=(146))# 权重对比x = range(len(tickers))width = 0.35ax1.bar([i - width/2 for i in x], optimal_weights, width,         label='最大夏普', alpha=0.8)ax1.bar([i + width/2 for i in x], rp_weights, width,         label='风险平价', alpha=0.8)ax1.set_xticks(x)ax1.set_xticklabels([t[:6for t in tickers], rotation=45)ax1.set_ylabel('权重')ax1.set_title('权重分配对比')ax1.legend()ax1.grid(True, alpha=0.3)# 风险贡献ax2.bar([t[:6for t in tickers], rc * 100)ax2.set_ylabel('风险贡献 (%)')ax2.set_title('风险平价模型 - 各资产风险贡献')ax2.grid(True, alpha=0.3)plt.tight_layout()plt.show()

五、动态资产配置策略

1. 基于波动率的动态调整

def dynamic_volatility_adjustment(prices_df, lookback=60, target_volatility=0.15):    """    基于波动率的动态资产配置    """    returns = prices_df.pct_change().dropna()    n_assets = len(tickers)    # 初始化    weights_history = []    portfolio_values = [100000]  # 初始资金10万    for i in range(lookback, len(returns)):        # 计算过去lookback天的波动率        recent_returns = returns.iloc[i-lookback:i]        recent_cov = recent_returns.cov() * 252        # 优化权重(最小化波动率)        def portfolio_volatility(weights):            return np.sqrt(np.dot(weights.T, np.dot(recent_cov, weights)))        constraints = ({'type''eq''fun'lambda x: np.sum(x) - 1})        bounds = tuple((01for _ in range(n_assets))        init_weights = n_assets * [1.0 / n_assets]        # 优化:在波动率不超过目标的前提下最大化收益        def objective(weights):            return -np.sum(weights * recent_returns.mean() * 252)        # 添加波动率约束        vol_constraint = {'type''ineq'                         'fun'lambda x: target_volatility - portfolio_volatility(x)}        try:            result = minimize(objective, init_weights,                            method='SLSQP', bounds=bounds,                            constraints=[constraints, vol_constraint])            current_weights = result.x        except:            # 如果优化失败,使用等权重            current_weights = init_weights        weights_history.append(current_weights)        # 计算当日组合收益        daily_return = np.sum(current_weights * returns.iloc[i])        portfolio_values.append(portfolio_values[-1] * (1 + daily_return))    return weights_history, portfolio_values# 运行动态资产配置weights_history, portfolio_values = dynamic_volatility_adjustment(portfolio_prices)# 分析结果dynamic_portfolio_returns = pd.Series(portfolio_values).pct_change().dropna()annual_return_dynamic = (1 + dynamic_portfolio_returns.mean()) ** 252 - 1annual_volatility_dynamic = dynamic_portfolio_returns.std() * np.sqrt(252)sharpe_dynamic = (annual_return_dynamic - 0.03) / annual_volatility_dynamicprint(f"\n动态资产配置表现:")print(f"年化收益: {annual_return_dynamic:.2%}")print(f"年化波动: {annual_volatility_dynamic:.2%}")print(f"夏普比率: {sharpe_dynamic:.2f}")# 可视化权重变化weights_df = pd.DataFrame(weights_history, columns=[t[:6for t in tickers])weights_df.index = portfolio_prices.index[60:]  # 从第61天开始plt.figure(figsize=(148))for column in weights_df.columns:    plt.plot(weights_df.index, weights_df[column], label=column, linewidth=2)plt.xlabel('日期')plt.ylabel('权重')plt.title('动态资产配置 - 权重变化', fontsize=15, pad=20)plt.legend(bbox_to_anchor=(1.051), loc='upper left')plt.grid(True, alpha=0.3)plt.tight_layout()plt.show()

2. 与基准对比

def compare_with_benchmarks(portfolio_values, tickers):    """    与基准对比    """    # 计算等权重组合    returns = portfolio_prices.pct_change().dropna()    equal_weights = np.ones(len(tickers)) / len(tickers)    equal_portfolio_returns = returns.dot(equal_weights)    equal_portfolio_value = 100000 * (1 + equal_portfolio_returns).cumprod()    # 计算沪深300表现(作为市场基准)    # 这里简化处理,使用等权重组合的85% + 现金15%作为基准    benchmark_returns = equal_portfolio_returns * 0.85 + 0.03/252 * 0.15    benchmark_value = 100000 * (1 + benchmark_returns).cumprod()    # 创建对比DataFrame    comparison = pd.DataFrame({        '动态配置': portfolio_values,        '等权重': equal_portfolio_value.values[:len(portfolio_values)],        '市场基准': benchmark_value.values[:len(portfolio_values)]    }, index=portfolio_prices.index[60:60+len(portfolio_values)])    # 计算绩效指标    performance_metrics = pd.DataFrame()    for strategy in comparison.columns:        strategy_returns = comparison[strategy].pct_change().dropna()        ann_return = (1 + strategy_returns.mean()) ** 252 - 1        ann_vol = strategy_returns.std() * np.sqrt(252)        sharpe = (ann_return - 0.03) / ann_vol        # 最大回撤        cumulative = (1 + strategy_returns).cumprod()        peak = cumulative.expanding().max()        drawdown = (cumulative - peak) / peak        max_dd = drawdown.min()        performance_metrics[strategy] = [            f"{ann_return:.2%}",            f"{ann_vol:.2%}",            f"{sharpe:.2f}",            f"{max_dd:.2%}"        ]    performance_metrics.index = ['年化收益''年化波动''夏普比率''最大回撤']    return comparison, performance_metrics# 执行对比comparison_df, metrics_df = compare_with_benchmarks(portfolio_values, tickers)# 可视化对比fig, (ax1, ax2) = plt.subplots(21, figsize=(1410))# 净值曲线对比for column in comparison_df.columns:    ax1.plot(comparison_df.index, comparison_df[column] / 100000            label=column, linewidth=2)ax1.set_ylabel('净值 (起始=1)')ax1.set_title('策略净值对比', fontsize=15, pad=20)ax1.legend()ax1.grid(True, alpha=0.3)# 回撤对比for column in comparison_df.columns:    returns = comparison_df[column].pct_change().dropna()    cumulative = (1 + returns).cumprod()    peak = cumulative.expanding().max()    drawdown = (cumulative - peak) / peak    ax2.plot(comparison_df.index[1:], drawdown, label=column, linewidth=2)ax2.set_ylabel('回撤')ax2.set_title('最大回撤对比', fontsize=15, pad=20)ax2.legend()ax2.grid(True, alpha=0.3)ax2.axhline(y=0, color='black', linestyle='-', alpha=0.3)plt.tight_layout()plt.show()print("\n绩效指标对比:")print(metrics_df)

六、实战建议与风险提示

1. 投资组合构建要点

def portfolio_construction_checklist():    """    投资组合构建检查清单    """    checklist = {        '分散化': {            '行业分散''至少覆盖3-5个不同行业',            '相关性''选择相关系数较低的资产',            '数量''建议5-10只股票,避免过度分散'        },        '风险管理': {            '单只股票上限''建议不超过20%',            '行业集中度''单一行业不超过30%',            '止损机制''设置动态止损线'        },        '再平衡规则': {            '时间触发''每季度或每半年再平衡',            '阈值触发''权重偏离目标超过5%时再平衡',            '市场触发''市场大幅波动时检查再平衡'        }    }    return checklist# 打印检查清单checklist = portfolio_construction_checklist()for category, items in checklist.items():    print(f"\n{category}:")    for item, suggestion in items.items():        print(f"  • {item}{suggestion}")

2. 常见误区与避免方法

def common_mistakes_and_solutions():    """    常见投资组合管理误区及解决方案    """    mistakes = [        {            '误区''过度分散,持有太多股票',            '问题''增加管理难度,稀释优秀股票的贡献',            '解决方案''精选5-10只核心股票,其他通过ETF配置'        },        {            '误区''只看历史收益,忽略风险',            '问题''高收益往往伴随高风险',            '解决方案''使用夏普比率等风险调整后收益指标'        },        {            '误区''频繁调仓,交易成本过高',            '问题''侵蚀组合收益',            '解决方案''制定明确的再平衡规则,避免情绪化交易'        },        {            '误区''忽略相关性变化',            '问题''危机时期相关性上升,分散效果降低',            '解决方案''定期检查相关性矩阵,加入低相关资产'        }    ]    return pd.DataFrame(mistakes)# 显示常见误区mistakes_df = common_mistakes_and_solutions()print("\n常见误区及解决方案:")print(mistakes_df.to_string(index=False))

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 19:42:43 HTTP/2.0 GET : https://f.mffb.com.cn/a/475494.html
  2. 运行时间 : 0.072028s [ 吞吐率:13.88req/s ] 内存消耗:5,013.11kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=46e5d383a03aab592d8dc5ba7e78c54e
  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.000410s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000578s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000239s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000231s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000469s ]
  6. SELECT * FROM `set` [ RunTime:0.000189s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000528s ]
  8. SELECT * FROM `article` WHERE `id` = 475494 LIMIT 1 [ RunTime:0.000459s ]
  9. UPDATE `article` SET `lasttime` = 1772278963 WHERE `id` = 475494 [ RunTime:0.000637s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000208s ]
  11. SELECT * FROM `article` WHERE `id` < 475494 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000440s ]
  12. SELECT * FROM `article` WHERE `id` > 475494 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000387s ]
  13. SELECT * FROM `article` WHERE `id` < 475494 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000761s ]
  14. SELECT * FROM `article` WHERE `id` < 475494 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000675s ]
  15. SELECT * FROM `article` WHERE `id` < 475494 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000891s ]
0.073576s