当前位置:首页>python>Python量化实战:用AKShare计算MACD金叉死叉,精准捕捉买卖点!

Python量化实战:用AKShare计算MACD金叉死叉,精准捕捉买卖点!

  • 2026-03-26 14:23:20
Python量化实战:用AKShare计算MACD金叉死叉,精准捕捉买卖点!

💡 导语:MACD是技术分析中最经典的指标之一,但手动计算太麻烦?今天教你用Python + AKShare自动计算MACD,识别金叉死叉,让量化交易变得简单!


一、MACD指标原理详解

MACD(Moving Average Convergence Divergence,指数平滑异同移动平均线)由Gerald Appel于1970年代提出,是判断趋势强度和买卖时机的重要工具。

1.1 MACD三大组成部分

       
                                           
指标全称计算方法作用
DIF快线(差离值)EMA(12) - EMA(26)反映短期趋势变化
DEA慢线(信号线)EMA(DIF, 9)平滑DIF,提供交易信号
MACD柱柱状图2 × (DIF - DEA)直观显示多空力量对比
       
     

1.2 金叉与死叉

📈 金叉(买入信号):DIF 上穿 DEA
   - 发生在零轴上方:强势金叉,买入信号更强
   - 发生在零轴下方:弱势金叉,可能是反弹

📉 死叉(卖出信号):DIF 下穿 DEA
   - 发生在零轴上方:高位死叉,警惕回调
   - 发生在零轴下方:弱势死叉,下跌趋势延续

二、环境准备与数据获取

2.1 安装依赖

pip install akshare pandas numpy matplotlib

2.2 使用AKShare获取股票数据

AKShare是开源的Python财经数据接口库,完全免费,无需注册API Key。

import akshare as ak
import
 pandas as pd
import
 numpy as np
import
 matplotlib.pyplot as plt
from
 datetime import datetime, timedelta

# 设置中文显示

plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

# 获取股票数据(以贵州茅台为例)

stock_code = "600519"  # 贵州茅台
start_date = (datetime.now() - timedelta(days=365)).strftime("%Y%m%d")
end_date = datetime.now().strftime("%Y%m%d")

# 使用AKShare获取日线数据

df = ak.stock_zh_a_hist(
    symbol=stock_code,
    period="daily",
    start_date=start_date,
    end_date=end_date,
    adjust="qfq"  # 前复权
)

df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
df.rename(columns={
    '开盘'
: 'open',
    '收盘'
: 'close',
    '最高'
: 'high',
    '最低'
: 'low',
    '成交量'
: 'volume'
}, inplace=True)

print
(f"获取到 {len(df)} 条数据")
print
(df.head())

三、MACD计算实战

3.1 手动计算MACD

def calculate_macd(df, fast=12, slow=26, signal=9):
    """
    计算MACD指标
    
    参数:
        df: DataFrame,包含收盘价
        fast: 快线周期,默认12
        slow: 慢线周期,默认26
        signal: 信号线周期,默认9
    """

    df = df.copy()
    
    # 计算EMA

    df['ema_fast'] = df['close'].ewm(span=fast, adjust=False).mean()
    df['ema_slow'] = df['close'].ewm(span=slow, adjust=False).mean()
    
    # 计算DIF(快线)

    df['DIF'] = df['ema_fast'] - df['ema_slow']
    
    # 计算DEA(慢线/信号线)

    df['DEA'] = df['DIF'].ewm(span=signal, adjust=False).mean()
    
    # 计算MACD柱状图

    df['MACD'] = 2 * (df['DIF'] - df['DEA'])
    
    return
 df

# 计算MACD

df = calculate_macd(df)
print
(df[['close', 'DIF', 'DEA', 'MACD']].tail(10))

3.2 使用TA-Lib快速计算(可选)

如果你安装了TA-Lib库,可以更简洁地计算:

import talib

# 使用TA-Lib计算MACD

dif, dea, macd = talib.MACD(
    df['close'].values,
    fastperiod=12,
    slowperiod=26,
    signalperiod=9
)

df['DIF_talib'] = dif
df['DEA_talib'] = dea
df['MACD_talib'] = macd * 2  # TA-Lib的MACD是(DIF-DEA),需要乘以2

四、识别金叉死叉信号

4.1 信号检测逻辑

def find_signals(df):
    """
    识别金叉和死叉信号
    """

    df = df.copy()
    
    # 金叉:DIF上穿DEA(今日DIF>DEA,昨日DIF<=DEA)

    df['golden_cross'] = (
        (df['DIF'] > df['DEA']) & 
        (df['DIF'].shift(1) <= df['DEA'].shift(1))
    )
    
    # 死叉:DIF下穿DEA(今日DIF<DEA,昨日DIF>=DEA)

    df['death_cross'] = (
        (df['DIF'] < df['DEA']) & 
        (df['DIF'].shift(1) >= df['DEA'].shift(1))
    )
    
    # 判断金叉位置(零轴上方还是下方)

    df['gc_above_zero'] = df['golden_cross'] & (df['DIF'] > 0)
    df['gc_below_zero'] = df['golden_cross'] & (df['DIF'] <= 0)
    
    # 判断死叉位置

    df['dc_above_zero'] = df['death_cross'] & (df['DIF'] > 0)
    df['dc_below_zero'] = df['death_cross'] & (df['DIF'] <= 0)
    
    return
 df

# 识别信号

df = find_signals(df)

# 查看最近的信号

recent_signals = df[df['golden_cross'] | df['death_cross']].tail(10)
print
("\n最近的交易信号:")
print
(recent_signals[['close', 'DIF', 'DEA', 'golden_cross', 'death_cross']])

4.2 统计信号效果

def analyze_signals(df, hold_days=5):
    """
    分析金叉死叉信号的后续收益
    """

    results = []
    
    # 分析金叉

    for
 idx in df[df['golden_cross']].index:
        entry_price = df.loc[idx, 'close']
        future_idx = df.index.get_loc(idx) + hold_days
        
        if
 future_idx < len(df):
            exit_price = df.iloc[future_idx]['close']
            return_pct = (exit_price - entry_price) / entry_price * 100
            results.append({
                'date'
: idx,
                'signal'
: '金叉',
                'entry_price'
: entry_price,
                'exit_price'
: exit_price,
                'return_pct'
: return_pct
            })
    
    # 分析死叉

    for
 idx in df[df['death_cross']].index:
        entry_price = df.loc[idx, 'close']
        future_idx = df.index.get_loc(idx) + hold_days
        
        if
 future_idx < len(df):
            exit_price = df.iloc[future_idx]['close']
            return_pct = (exit_price - entry_price) / entry_price * 100
            results.append({
                'date'
: idx,
                'signal'
: '死叉',
                'entry_price'
: entry_price,
                'exit_price'
: exit_price,
                'return_pct'
: return_pct
            })
    
    results_df = pd.DataFrame(results)
    
    if
 len(results_df) > 0:
        print
(f"\n信号统计(持有{hold_days}天):")
        print
(f"金叉平均收益: {results_df[results_df['signal']=='金叉']['return_pct'].mean():.2f}%")
        print
(f"死叉平均收益: {results_df[results_df['signal']=='死叉']['return_pct'].mean():.2f}%")
        print
(f"金叉胜率: {(results_df[results_df['signal']=='金叉']['return_pct'] > 0).mean()*100:.1f}%")
        print
(f"死叉胜率: {(results_df[results_df['signal']=='死叉']['return_pct'] > 0).mean()*100:.1f}%")
    
    return
 results_df

# 分析信号效果

signal_analysis = analyze_signals(df, hold_days=5)

五、可视化:绘制MACD图表

5.1 完整可视化代码

def plot_macd(df, stock_name="股票", save_path=None):
    """
    绘制股票价格和MACD指标
    """

    fig, axes = plt.subplots(3, 1, figsize=(14, 12), 
                             gridspec_kw={'height_ratios': [3, 1, 1]})
    
    # 获取最近120天的数据用于展示

    plot_df = df.tail(120).copy()
    
    # ========== 子图1:K线 + 买卖点 ==========

    ax1 = axes[0]
    
    # 绘制收盘价

    ax1.plot(plot_df.index, plot_df['close'], 
             label='收盘价', color='black', linewidth=1.5)
    
    # 标注金叉(买入点)

    golden_crosses = plot_df[plot_df['golden_cross']]
    if
 len(golden_crosses) > 0:
        ax1.scatter(golden_crosses.index, golden_crosses['close'], 
                   color='red', marker='^', s=150, label='金叉买入', zorder=5)
        # 添加价格标签

        for
 idx, row in golden_crosses.iterrows():
            ax1.annotate(f'买入\n{row["close"]:.1f}'
                        xy=(idx, row['close']),
                        xytext=(0, 20), textcoords='offset points',
                        ha='center', fontsize=8, color='red',
                        arrowprops=dict(arrowstyle='->', color='red', lw=1))
    
    # 标注死叉(卖出点)

    death_crosses = plot_df[plot_df['death_cross']]
    if
 len(death_crosses) > 0:
        ax1.scatter(death_crosses.index, death_crosses['close'], 
                   color='green', marker='v', s=150, label='死叉卖出', zorder=5)
        # 添加价格标签

        for
 idx, row in death_crosses.iterrows():
            ax1.annotate(f'卖出\n{row["close"]:.1f}'
                        xy=(idx, row['close']),
                        xytext=(0, -35), textcoords='offset points',
                        ha='center', fontsize=8, color='green',
                        arrowprops=dict(arrowstyle='->', color='green', lw=1))
    
    ax1.set_title(f'{stock_name} - MACD金叉死叉买卖点分析', fontsize=14, fontweight='bold')
    ax1.set_ylabel('价格(元)', fontsize=11)
    ax1.legend(loc='upper left')
    ax1.grid(True, alpha=0.3)
    
    # ========== 子图2:DIF和DEA线 ==========

    ax2 = axes[1]
    ax2.plot(plot_df.index, plot_df['DIF'], 
             label='DIF(快线)', color='blue', linewidth=1.5)
    ax2.plot(plot_df.index, plot_df['DEA'], 
             label='DEA(慢线)', color='orange', linewidth=1.5)
    ax2.axhline(y=0, color='gray', linestyle='--', alpha=0.5)
    
    # 标注金叉死叉位置

    for
 idx in plot_df[plot_df['golden_cross']].index:
        ax2.axvline(x=idx, color='red', linestyle=':', alpha=0.5)
    for
 idx in plot_df[plot_df['death_cross']].index:
        ax2.axvline(x=idx, color='green', linestyle=':', alpha=0.5)
    
    ax2.set_ylabel('DIF/DEA', fontsize=11)
    ax2.legend(loc='upper left')
    ax2.grid(True, alpha=0.3)
    
    # ========== 子图3:MACD柱状图 ==========

    ax3 = axes[2]
    
    # 绘制MACD柱状图(红色表示正值,绿色表示负值)

    positive = plot_df['MACD'] >= 0
    negative = plot_df['MACD'] < 0
    
    ax3.bar(plot_df[positive].index, plot_df[positive]['MACD'], 
            color='red', alpha=0.7, label='MACD>0')
    ax3.bar(plot_df[negative].index, plot_df[negative]['MACD'], 
            color='green', alpha=0.7, label='MACD<0')
    ax3.axhline(y=0, color='black', linewidth=0.5)
    
    # 标注金叉死叉位置

    for
 idx in plot_df[plot_df['golden_cross']].index:
        ax3.axvline(x=idx, color='red', linestyle=':', alpha=0.5)
    for
 idx in plot_df[plot_df['death_cross']].index:
        ax3.axvline(x=idx, color='green', linestyle=':', alpha=0.5)
    
    ax3.set_ylabel('MACD柱状图', fontsize=11)
    ax3.set_xlabel('日期', fontsize=11)
    ax3.legend(loc='upper left')
    ax3.grid(True, alpha=0.3)
    
    plt.tight_layout()
    
    if
 save_path:
        plt.savefig(save_path, dpi=150, bbox_inches='tight', facecolor='white')
        print
(f"图表已保存至: {save_path}")
    
    plt.show()
    return
 fig

# 绘制图表

plot_macd(df, stock_name="贵州茅台(600519)"
          save_path="macd_analysis.png")

六、完整可运行代码

以下是整合所有功能的完整代码,复制即可运行:

"""
MACD金叉死叉实战 - 完整代码
作者: AI成长
功能: 使用AKShare获取股票数据,计算MACD,识别买卖信号
"""


import
 akshare as ak
import
 pandas as pd
import
 numpy as np
import
 matplotlib.pyplot as plt
from
 datetime import datetime, timedelta

# 设置中文显示

plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False


def
 get_stock_data(stock_code, days=365):
    """获取股票历史数据"""

    end_date = datetime.now().strftime("%Y%m%d")
    start_date = (datetime.now() - timedelta(days=days)).strftime("%Y%m%d")
    
    df = ak.stock_zh_a_hist(
        symbol=stock_code,
        period="daily",
        start_date=start_date,
        end_date=end_date,
        adjust="qfq"
    )
    
    df['日期'] = pd.to_datetime(df['日期'])
    df.set_index('日期', inplace=True)
    df.rename(columns={
        '开盘'
: 'open',
        '收盘'
: 'close',
        '最高'
: 'high',
        '最低'
: 'low',
        '成交量'
: 'volume'
    }, inplace=True)
    
    return
 df


def
 calculate_macd(df, fast=12, slow=26, signal=9):
    """计算MACD指标"""

    df = df.copy()
    df['ema_fast'] = df['close'].ewm(span=fast, adjust=False).mean()
    df['ema_slow'] = df['close'].ewm(span=slow, adjust=False).mean()
    df['DIF'] = df['ema_fast'] - df['ema_slow']
    df['DEA'] = df['DIF'].ewm(span=signal, adjust=False).mean()
    df['MACD'] = 2 * (df['DIF'] - df['DEA'])
    return
 df


def
 find_signals(df):
    """识别金叉和死叉信号"""

    df = df.copy()
    df['golden_cross'] = (df['DIF'] > df['DEA']) & (df['DIF'].shift(1) <= df['DEA'].shift(1))
    df['death_cross'] = (df['DIF'] < df['DEA']) & (df['DIF'].shift(1) >= df['DEA'].shift(1))
    return
 df


def
 plot_macd(df, stock_name="股票", save_path=None):
    """绘制MACD分析图表"""

    fig, axes = plt.subplots(3, 1, figsize=(14, 12), 
                             gridspec_kw={'height_ratios': [3, 1, 1]})
    
    plot_df = df.tail(120).copy()
    
    # 价格图 + 买卖点

    ax1 = axes[0]
    ax1.plot(plot_df.index, plot_df['close'], label='收盘价', color='black', linewidth=1.5)
    
    golden_crosses = plot_df[plot_df['golden_cross']]
    if
 len(golden_crosses) > 0:
        ax1.scatter(golden_crosses.index, golden_crosses['close'], 
                   color='red', marker='^', s=150, label='金叉买入', zorder=5)
    
    death_crosses = plot_df[plot_df['death_cross']]
    if
 len(death_crosses) > 0:
        ax1.scatter(death_crosses.index, death_crosses['close'], 
                   color='green', marker='v', s=150, label='死叉卖出', zorder=5)
    
    ax1.set_title(f'{stock_name} - MACD金叉死叉分析', fontsize=14, fontweight='bold')
    ax1.set_ylabel('价格(元)')
    ax1.legend(loc='upper left')
    ax1.grid(True, alpha=0.3)
    
    # DIF/DEA图

    ax2 = axes[1]
    ax2.plot(plot_df.index, plot_df['DIF'], label='DIF(快线)', color='blue', linewidth=1.5)
    ax2.plot(plot_df.index, plot_df['DEA'], label='DEA(慢线)', color='orange', linewidth=1.5)
    ax2.axhline(y=0, color='gray', linestyle='--', alpha=0.5)
    ax2.set_ylabel('DIF/DEA')
    ax2.legend(loc='upper left')
    ax2.grid(True, alpha=0.3)
    
    # MACD柱状图

    ax3 = axes[2]
    positive = plot_df['MACD'] >= 0
    negative = plot_df['MACD'] < 0
    ax3.bar(plot_df[positive].index, plot_df[positive]['MACD'], color='red', alpha=0.7)
    ax3.bar(plot_df[negative].index, plot_df[negative]['MACD'], color='green', alpha=0.7)
    ax3.axhline(y=0, color='black', linewidth=0.5)
    ax3.set_ylabel('MACD')
    ax3.set_xlabel('日期')
    ax3.grid(True, alpha=0.3)
    
    plt.tight_layout()
    
    if
 save_path:
        plt.savefig(save_path, dpi=150, bbox_inches='tight', facecolor='white')
        print
(f"图表已保存至: {save_path}")
    
    plt.show()
    return
 fig


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

if
 __name__ == "__main__":
    # 设置股票代码

    stock_code = "600519"  # 贵州茅台,可修改为你关注的股票
    stock_name = "贵州茅台"
    
    print
(f"正在获取 {stock_name}({stock_code}) 的数据...")
    
    # 1. 获取数据

    df = get_stock_data(stock_code, days=365)
    print
(f"✓ 获取到 {len(df)} 条数据")
    
    # 2. 计算MACD

    df = calculate_macd(df)
    print
("✓ MACD计算完成")
    
    # 3. 识别信号

    df = find_signals(df)
    
    # 4. 输出最近信号

    recent_gc = df[df['golden_cross']].tail(3)
    recent_dc = df[df['death_cross']].tail(3)
    
    print
(f"\n📈 最近3次金叉:")
    for
 idx, row in recent_gc.iterrows():
        print
(f"   {idx.strftime('%Y-%m-%d')}: 价格 {row['close']:.2f}, DIF={row['DIF']:.3f}")
    
    print
(f"\n📉 最近3次死叉:")
    for
 idx, row in recent_dc.iterrows():
        print
(f"   {idx.strftime('%Y-%m-%d')}: 价格 {row['close']:.2f}, DIF={row['DIF']:.3f}")
    
    # 5. 绘制图表

    print
("\n正在生成图表...")
    plot_macd(df, stock_name=f"{stock_name}({stock_code})", save_path="macd_analysis.png")
    
    print
("\n✅ 分析完成!")

七、实战技巧与注意事项

7.1 使用技巧

  1. 1. 多周期验证:结合日线、周线MACD信号,提高准确性
  2. 2. 背离判断:价格创新高但MACD未创新高,可能是顶背离
  3. 3. 零轴意义:零轴上方为多头市场,下方为空头市场
  4. 4. 结合成交量:金叉时放量更可靠

7.2 常见误区

⚠️ 不要盲目跟单:MACD是滞后指标,单独使用胜率有限
⚠️ 震荡市失效:横盘震荡时会产生大量假信号
⚠️ 参数优化:不同股票可能需要调整12/26/9的参数

7.3 进阶应用

# 多周期MACD策略
def
 multi_timeframe_macd(df_daily, df_weekly):
    """
    多周期验证:周线MACD向上时,只做多日线金叉
    """

    # 实现你的多周期策略...

    pass


# MACD背离检测

def
 detect_divergence(df, window=20):
    """
    检测价格与MACD的背离
    """

    # 实现背离检测逻辑...

    pass

八、总结

今天我们一起学习了:

MACD指标原理:DIF、DEA、MACD柱的计算方法
金叉死叉识别:用Python自动检测买卖信号
AKShare数据获取:免费获取A股历史数据
可视化分析:绘制专业级MACD分析图表
完整可运行代码:复制即可使用

💪 下一步:尝试修改代码分析你关注的股票,或者将MACD与其他指标(如RSI、KDJ)结合使用!


参考资料

  • • AKShare官方文档[1]
  • • Gerald Appel. Technical Analysis: Power Tools for Active Investors

本文代码已在Python 3.9+、AKShare 1.10+环境下测试通过。如有问题欢迎留言交流!

关注「AI成长」,每天一个Python量化技巧! 🚀

引用链接

[1] AKShare官方文档: https://www.akshare.xyz/

                 

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:55:30 HTTP/2.0 GET : https://f.mffb.com.cn/a/483024.html
  2. 运行时间 : 0.244119s [ 吞吐率:4.10req/s ] 内存消耗:4,705.31kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1c8410b54caf337135a5c6b6428280e0
  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.001192s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001812s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000866s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000828s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001815s ]
  6. SELECT * FROM `set` [ RunTime:0.000600s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001494s ]
  8. SELECT * FROM `article` WHERE `id` = 483024 LIMIT 1 [ RunTime:0.001126s ]
  9. UPDATE `article` SET `lasttime` = 1774576531 WHERE `id` = 483024 [ RunTime:0.025899s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.003972s ]
  11. SELECT * FROM `article` WHERE `id` < 483024 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001573s ]
  12. SELECT * FROM `article` WHERE `id` > 483024 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001604s ]
  13. SELECT * FROM `article` WHERE `id` < 483024 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003268s ]
  14. SELECT * FROM `article` WHERE `id` < 483024 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004809s ]
  15. SELECT * FROM `article` WHERE `id` < 483024 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003120s ]
0.249562s