当前位置:首页>python>二、实战量化策略编写-Python量化交易编程

二、实战量化策略编写-Python量化交易编程

  • 2026-06-15 16:31:25
二、实战量化策略编写-Python量化交易编程

笔记要点一  {图片示例}

笔记要点二  {通达信选股指标}

HZA:=IF(MA(C,7)>MA(C,13) AND MA(C,13)>MA(C,30) AND MA(C,30)>MA(C,60) AND

MA(C,60)>MA(C,250),1,0);

HZAA:=IF(MA(C,30)>REF(MA(C,30),1) AND MA(C,60)>REF(MA(C,60),1) AND MA(C,120)>REF(MA(C,120),1) AND

MA(C,250)>REF(MA(C,250),1),1,0);

HZAB:=IF(MA(C,500)>=REF(MA(C,500),1) AND MA(C,250)>=REF(MA(C,250),1),1,0);

NN:=IF(C>MA(C,250),1,0);

A1A:=COUNT(NN,30);

HM2:=A1A>3 AND NN AND HZAB;

成交额1:= AMO <= 120000*10000;

成交额2:= AMO >= 5000*10000;

HZWB:=EVERY(REF(成交额1,1),1);

HZWC:=EVERY(REF(成交额2,1),1);

HZWD:=HZWB AND HZWC;

{MA黄金箱体}

A1{高}:=REFDATE(REF(HHV(H,96),5),DATE);

B1{低}:=REFDATE(REF(LLV(L,96),5),DATE);

DY{中}:=((A1)+(B1))/2;

{成本价格线}

PC:=(3*HIGH+LOW+OPEN+2*CLOSE)/7;

JJJ:=IF(DYNAINFO(8)>0.01,0.01*DYNAINFO(10)/DYNAINFO(8),DYNAINFO(3));

DDD:=(DYNAINFO(5)<0.01 || DYNAINFO(6)<0.01);

JJJT:=IF(DDD,1,(JJJ<(DYNAINFO(5)+0.01) && JJJ>(DYNAINFO(6)-0.01)));

CYC43:=IF(JJJT,0.01*EXPMA(AMOUNT,43)/EXPMA(AMOUNT/(100*PC),43),EMA((HIGH+LOW+CLOSE)/3,43));

CYC60:=IF(JJJT,0.01*EXPMA(AMOUNT,60)/EXPMA(AMOUNT/(100*PC),60),EMA((HIGH+LOW+CLOSE)/3,60));

CYC500:=IF(JJJT,0.01*EXPMA(AMOUNT,500)/EXPMA(AMOUNT/(100*PC),500),EMA((HIGH+LOW+CLOSE)/3,500));

高1:=REF(HHV(H,150),3);

低1:=REF(LLV(L,150),3);

H3:=高1-(高1-低1)*0.5;

中轴:=REFDATE(H3,DATE);

HCY1:=(CYC500*6+CYC43*2+CYC60*2)/10;

HCY2:=(HCY1+中轴+DY)/3;

HHZXG:=C>HCY2;

HT1:=C>MA(C,5);

HT2:=COUNT(EVERY(HT1, 5)=1,5)=5;

HTA2:=(MA(C,5)+MA(C,10))/2;

HT3:=BETWEEN(L,HTA2,MA(C,10)*0.975);

HWXG:=HT1 AND HT2 AND HT3 ;

HTXG:HZA AND HZAA AND HM2 AND HZWD AND HWXG;

STICKLINE(HTXG,0,100,2.6,0),COLORRED;

⚠️注意
1.本公式已在通达信电脑端测试通过,可直接导入电脑端;
2.复制安装的时候出现错误提示,首先找到错误提示的代码,然后把代码里面出现的“❓️”删除;
3.导入源码出现问题时,大概率是在复制粘贴时格式发生了变化,可以重新试试;

笔记要点三  {量化源码}

import pandas as pd

import matplotlib.pyplot as plt

from pymongo import MongoClient, DESCENDING

import random

# ========== 全局数据库连接(按需修改) ==========

DB_CONN = MongoClient('127.0.0.1', 27017)['stock_db']

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

# ========== 缺失的辅助函数 ==========

def get_trading_dates(start_date, end_date):

    res = DB_CONN['daily'].distinct('date', {

        'code':'000300','index':True,

        'date':{'$gte':start_date,'$lte':end_date}

    })

    res.sort()

    return res

def find_out_stocks(last_codes, curr_codes):

    return list(set(last_codes) - set(curr_codes))

def stock_pool(begin_date, end_date):

    all_trade_dates = get_trading_dates(begin_date, end_date)

    adjust_dates = []

    date_codes_dict = {}

    month_map = {}

    for d in all_trade_dates:

        ym = d[:7]

        if ym not in month_map:

            month_map[ym] = d

    adjust_dates = sorted(list(month_map.values()))

    all_stock_codes = DB_CONN['daily'].distinct('code',{'index':False})

    random.seed(42)

    for adj_date in adjust_dates:

        select_codes = random.sample(all_stock_codes, min(30, len(all_stock_codes)))

        date_codes_dict[adj_date] = select_codes

    return adjust_dates, date_codes_dict

# ========== 原信号函数 ==========

def compare_close_2_ma_10(dailies):

    current_daily = dailies[9]

    close_sum = 0

    for daily in dailies:

        if 'is_trading' not in daily or daily['is_trading'] is False:

            return None

        close_sum += daily['close']

    ma_10 = close_sum / 10

    post_adjusted_close = current_daily['close']

    differ = post_adjusted_close - ma_10

    if differ > 0:

        return 1

    elif differ < 0:

        return -1

    else:

        return 0

def is_k_up_break_ma10(code, _date):

    current_daily = DB_CONN['daily_hfq'].find_one(

        {'code': code, 'date': _date, 'is_trading': True})

    if current_daily is None:

        print('计算信号,K线上穿MA10,当日没有K线,股票 %s,日期:%s' % (code, _date), flush=True)

        return False

    daily_cursor = DB_CONN['daily_hfq'].find(

        {'code': code, 'date': {'$lte': _date}},

        limit=11,

        sort=[('date', DESCENDING)],

        projection={'code': True, 'close': True, 'is_trading': True}

    )

    dailies = [x for x in daily_cursor]

    if len(dailies) < 11:

        print('计算信号,K线上穿MA10,前期K线不足,股票 %s,日期:%s' % (code, _date), flush=True)

        return False

    dailies.reverse()

    last_close_2_last_ma10 = compare_close_2_ma_10(dailies[0:10])

    current_close_2_current_ma10 = compare_close_2_ma_10(dailies[1:])

    print('计算信号,K线上穿MA10,股票:%s,日期:%s, 前一日 %s,当日:%s' %

          (code, _date, str(last_close_2_last_ma10), str(current_close_2_current_ma10)), flush=True)

    if last_close_2_last_ma10 is None or current_close_2_current_ma10 is None:

        return False

    is_break = (last_close_2_last_ma10 <= 0) & (current_close_2_current_ma10 == 1)

    print('计算信号,K线上穿MA10,股票:%s,日期:%s, 前一日 %s,当日:%s,突破:%s' %

          (code, _date, str(last_close_2_last_ma10), str(current_close_2_current_ma10), str(is_break)), flush=True)

    return is_break

def is_k_down_break_ma10(code, _date):

    # 修复bug:统一查询daily_hfq

    current_daily = DB_CONN['daily_hfq'].find_one(

        {'code': code, 'date': _date, 'is_trading': True})

    if current_daily is None:

        print('计算信号,K线下穿MA10,当日没有K线,股票 %s,日期:%s' % (code, _date), flush=True)

        return False

    daily_cursor = DB_CONN['daily_hfq'].find(

        {'code': code, 'date': {'$lte': _date}},

        limit=11,

        sort=[('date', DESCENDING)],

        projection={'code': True, 'close': True, 'is_trading': True}

    )

    dailies = [x for x in daily_cursor]

    if len(dailies) < 11:

        print('计算信号,K线下穿MA10,前期K线不足,股票 %s,日期:%s' % (code, _date), flush=True)

        return False

    dailies.reverse()

    last_close_2_last_ma10 = compare_close_2_ma_10(dailies[0:10])

    current_close_2_current_ma10 = compare_close_2_ma_10(dailies[1:])

    if last_close_2_last_ma10 is None or current_close_2_current_ma10 is None:

        return False

    is_break = (last_close_2_last_ma10 >= 0) & (current_close_2_current_ma10 == -1)

    print('计算信号,K线下穿MA10,股票:%s,日期:%s, 前一日 %s,当日:%s, 突破:%s' %

          (code, _date, str(last_close_2_last_ma10), str(current_close_2_current_ma10), str(is_break)), flush=True)

    return is_break

# ========== 指标计算函数(优化最大回撤算法) ==========

def compute_drawdown(net_values):

    """优化版最大回撤:滚动历史峰值"""

    net_series = net_values.copy()

    max_so_far = net_series.iloc[0]

    max_dd = 0.0

    for nav in net_series:

        if nav > max_so_far:

            max_so_far = nav

        dd = 1 - nav / max_so_far

        if dd > max_dd:

            max_dd = dd

    return round(max_dd,4)

def compute_annual_profit(trading_days, end_nav):

    annual_profit = 0

    if trading_days > 0:

        year = trading_days / 245

        annual_profit = pow(end_nav, 1/year) - 1

    return round(annual_profit * 100,2)

def compute_sharpe_ratio(net_values):

    trading_days = len(net_values)

    # 日收益率

    daily_ret = net_values.pct_change().dropna()

    ann_return = compute_annual_profit(trading_days, net_values.iloc[-1])

    # 日收益标准差 * sqrt(245) 年化波动

    ret_std = daily_ret.std()

    ann_std = ret_std * (245**0.5)

    rf = 4.75 / 100  # 年化无风险4.75%

    sharpe = ((ann_return/100) - rf) / ann_std if ann_std !=0 else 0

    return ann_return, round(sharpe,2)

# ========== 回测主函数 ==========

def backtest(begin_date, end_date):

    cash = 1E7

    single_position = 2E5

    df_profit = pd.DataFrame(columns=['net_value', 'profit', 'hs300'])

    all_dates = get_trading_dates(begin_date, end_date)

    if not all_dates:

        print('无交易日数据')

        return

    # 沪深300期初点位

    hs300_begin_value = DB_CONN['daily'].find_one(

        {'code': '000300', 'index': True, 'date': all_dates[0]},

        projection={'close': True})['close']

    adjust_dates, date_codes_dict = stock_pool(begin_date, end_date)

    last_phase_codes = None

    this_phase_codes = None

    to_be_sold_codes = set()

    to_be_bought_codes = set()

    holding_code_dict = dict()

    last_date = None

    for _date in all_dates:

        print('Backtest at %s.' % _date)

        before_sell_holding_codes = list(holding_code_dict.keys())

        # 除权除息调整持仓

        if last_date is not None and len(before_sell_holding_codes) > 0:

            last_daily_cursor = DB_CONN['daily'].find(

                {'code': {'$in': before_sell_holding_codes}, 'date': last_date, 'index': False},

                projection={'code': True, 'au_factor': True})

            code_last_aufactor_dict = dict([(d['code'], d['au_factor']) for d in last_daily_cursor])

            current_daily_cursor = DB_CONN['daily'].find(

                {'code': {'$in': before_sell_holding_codes}, 'date': _date, 'index': False},

                projection={'code': True, 'au_factor': True})

            for curr in current_daily_cursor:

                curr_auf = curr['au_factor']

                c = curr['code']

                last_vol = holding_code_dict[c]['volume']

                if c in code_last_aufactor_dict:

                    last_auf = code_last_aufactor_dict[c]

                    new_vol = int(last_vol * (curr_auf / last_auf))

                    holding_code_dict[c]['volume'] = new_vol

                    print('持仓量调整:%s, %6d, %10.6f, %6d, %10.6f' %

                          (c, last_vol, last_auf, new_vol, curr_auf))

        # 开盘卖出

        print('待卖股票池:', to_be_sold_codes, flush=True)

        if len(to_be_sold_codes) >0:

            sell_daily_cursor = DB_CONN['daily'].find(

                {'code':{'$in':list(to_be_sold_codes)},'date':_date,'index':False,'is_trading':True},

                projection={'open':True,'code':True})

            for sd in sell_daily_cursor:

                c = sd['code']

                if c in before_sell_holding_codes:

                    hold = holding_code_dict[c]

                    vol = hold['volume']

                    sell_price = sd['open']

                    sell_amt = vol * sell_price

                    cash += sell_amt

                    cost = hold['cost']

                    pct = (sell_amt-cost)/cost*100

                    print('卖出 %s, %6d, %6.2f, %8.2f, %4.2f' % (c,vol,sell_price,sell_amt,pct))

                    del holding_code_dict[c]

                    to_be_sold_codes.remove(c)

        print('卖出后,现金: %10.2f' % cash)

        # 开盘买入

        print('待买股票池:', to_be_bought_codes, flush=True)

        if len(to_be_bought_codes)>0:

            buy_daily_cursor = DB_CONN['daily'].find(

                {'code':{'$in':list(to_be_bought_codes)},'date':_date,'is_trading':True,'index':False},

                projection={'code':True,'open':True})

            for bd in buy_daily_cursor:

                if cash > single_position:

                    bp = bd['open']

                    c = bd['code']

                    vol = int(int(single_position / bp)/100)*100

                    buy_amt = bp * vol

                    cash -= buy_amt

                    holding_code_dict[c] = {'volume':vol,'cost':buy_amt,'last_value':buy_amt}

                    print('买入 %s, %6d, %6.2f, %8.2f' % (c,vol,bp,buy_amt))

        print('买入后,现金: %10.2f' % cash)

        holding_codes = list(holding_code_dict.keys())

        # 股票池调仓

        if _date in adjust_dates:

            print('股票池调整日:%s,备选股票列表:' % _date, flush=True)

            if this_phase_codes is not None:

                last_phase_codes = this_phase_codes

            this_phase_codes = date_codes_dict[_date]

            print(this_phase_codes, flush=True)

            if last_phase_codes is not None:

                out_codes = find_out_stocks(last_phase_codes, this_phase_codes)

                for oc in out_codes:

                    if oc in holding_code_dict:

                        to_be_sold_codes.add(oc)

        # 生成次日买卖信号

        for hc in holding_codes:

            if is_k_down_break_ma10(hc, _date):

                to_be_sold_codes.add(hc)

        to_be_bought_codes.clear()

        if this_phase_codes is not None:

            for code in this_phase_codes:

                if code not in holding_codes and is_k_up_break_ma10(code, _date):

                    to_be_bought_codes.add(code)

        # 计算当日总资产

        total_mv = 0

        hold_daily = DB_CONN['daily'].find(

            {'code':{'$in':holding_codes},'date':_date},

            projection={'close':True,'code':True})

        for hd in hold_daily:

            c = hd['code']

            hold = holding_code_dict[c]

            mv = hd['close'] * hold['volume']

            total_mv += mv

            profit_all = (mv - hold['cost'])/hold['cost']*100

            day_p = (mv - hold['last_value'])/hold['last_value']*100

            hold['last_value'] = mv

            print('持仓: %s, %10.2f, %4.2f, %4.2f' % (c, mv, profit_all, day_p))

        total_cap = total_mv + cash

        # 沪深300当日点位

        hs300_curr = DB_CONN['daily'].find_one(

            {'code':'000300','index':True,'date':_date},projection={'close':True})['close']

        print('收盘后,现金: %10.2f, 总资产: %10.2f' % (cash, total_cap))

        last_date = _date

        df_profit.loc[_date] = {

            'net_value': round(total_cap/1e7,4),

            'profit': round((total_cap-1e7)/1e7*100,2),

            'hs300': round((hs300_curr-hs300_begin_value)/hs300_begin_value*100,2)

        }

    # 回测结束,指标计算

    nav_series = df_profit['net_value']

    max_dd = compute_drawdown(nav_series)

    ann_ret, sharpe = compute_sharpe_ratio(nav_series)

    print('\n======回测结果汇总======')

    print(f'回测区间:{begin_date} ~ {end_date}')

    print(f'年化收益率:{ann_ret:.2f} %')

    print(f'最大回撤:{max_dd*100:.2f} %')

    print(f'夏普比率:{sharpe:.2f}')

    # 绘图:净值曲线对比+累计收益对比

    fig, (ax1,ax2) = plt.subplots(2,1,figsize=(12,8))

    # 子图1:净值

    ax1.plot(df_profit.index, df_profit['net_value'], label='策略净值', color='red')

    # 构造沪深300净值

    df_profit['hs300_nav'] = 1 + df_profit['hs300']/100

    ax1.plot(df_profit.index, df_profit['hs300_nav'], label='沪深300净值', color='blue')

    ax1.set_title('策略净值 vs 沪深300净值')

    ax1.legend()

    ax1.grid()

    # 子图2:累计收益%

    ax2.plot(df_profit.index, df_profit['profit'], label='策略累计收益%', color='red')

    ax2.plot(df_profit.index, df_profit['hs300'], label='沪深300累计收益%', color='blue')

    ax2.set_title('累计收益对比(%)')

    ax2.legend()

    ax2.grid()

    plt.tight_layout()

    plt.show()

    return df_profit, ann_ret, max_dd, sharpe

if __name__ == "__main__":

    df_result, ann_rate, maxdd, shar = backtest('2015-01-01', '2015-12-31')

⚠️注意
交易规则:

买入:上穿 MA10 次日开盘买入,单只固定 20 万资金

卖出:下穿 MA10 次日开盘卖出 + 股票池调出当日开盘卖出

除权除息:按复权因子动态调整持仓股数

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 05:24:39 HTTP/2.0 GET : https://f.mffb.com.cn/a/497598.html
  2. 运行时间 : 0.084296s [ 吞吐率:11.86req/s ] 内存消耗:4,717.44kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=daaddb9f487475770324e9be0f764146
  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.000733s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000913s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000295s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000280s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000531s ]
  6. SELECT * FROM `set` [ RunTime:0.000200s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000591s ]
  8. SELECT * FROM `article` WHERE `id` = 497598 LIMIT 1 [ RunTime:0.000745s ]
  9. UPDATE `article` SET `lasttime` = 1783027479 WHERE `id` = 497598 [ RunTime:0.002648s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000259s ]
  11. SELECT * FROM `article` WHERE `id` < 497598 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000465s ]
  12. SELECT * FROM `article` WHERE `id` > 497598 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000497s ]
  13. SELECT * FROM `article` WHERE `id` < 497598 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001054s ]
  14. SELECT * FROM `article` WHERE `id` < 497598 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002509s ]
  15. SELECT * FROM `article` WHERE `id` < 497598 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001823s ]
0.085910s