当前位置:首页>python>使用Python进行事件驱动型量化回测(续7)

使用Python进行事件驱动型量化回测(续7)

  • 2026-02-27 20:04:10
使用Python进行事件驱动型量化回测(续7)

距离我们上次讨论事件驱动回测系统已有一段时间,该话题始于本系列前文。在之前的文章中,我介绍了如何编写一个适用于历史回测场景的ExecutionHandler替代实现。本文将完成对应的Interactive Brokers API处理器开发,以推动系统向实盘交易迈进。

 在本文中,我也会将一些基础接口完整封装进事件驱动系统中,待与实时行情对接后,即可构成自动化执行系统的基础框架。

IBExecutionHandler类的核心设计思路如下:从事件队列中获取OrderEvent实例,通过IbPy库调用Interactive Brokers的订单API直接执行指令。同时,该类还负责处理经由API返回的“服务器响应”消息——目前,系统的主要处理逻辑是生成对应的FillEvent实例并将其重新推送至事件队列。

从功能完备性角度,该类本可加入执行优化逻辑与复杂错误处理机制,从而变得相当复杂。但为便于大家快速把握核心设计思路,并在此基础上根据自身交易风格灵活扩展,我选择保持其架构相对简洁。

Python 实现      按照惯例,首先创建 Python 文件并导入所需库。该文件命名为ib_execution.py,与其他事件驱动模块置于同一目录下。

我们将导入必要的日期时间处理库、IbPy 模块对象,以及IBExecutionHandler 所处理的具体事件类型。

# ib_execution.pyimport datetimeimport timefrom ib.ext.Contract import Contractfrom ib.ext.Order import Orderfrom ib.opt import ibConnection, messagefrom event import FillEvent, OrderEventfrom execution import ExecutionHandler

接下来我们来定义 IBExecutionHandler 类。构造函数__init__首先需要传入events事件队列参数,同时还需指定order_routing订单路由策略,默认设为 "SMART"。若有特定交易所需求,可在此处进行相应配置。默认currency币种设置为美元。

在方法内部,我们初始化了一个 fill_dict 字典,用于后续生成 FillEvent 实例。同时创建tws_conn 连接对象,用于管理与 Interactive Brokers API 的连接状态。此外还需要设定一个初始order_id,用以跟踪后续所有订单、避免重复。最后一步是注册各类消息处理器(具体实现将在后文详述)。

# ib_execution.pyclass IBExecutionHandler(ExecutionHandler):    """    Handles order execution via the Interactive Brokers    API, for use against accounts when trading live    directly.    """    def __init__(self, events,                  order_routing="SMART"                 currency="USD"):        """        Initialises the IBExecutionHandler instance.        """        self.events = events        self.order_routing = order_routing        self.currency = currency        self.fill_dict = {}        self.tws_conn = self.create_tws_connection()        self.order_id = self.create_initial_order_id()        self.register_handlers()

IB API 基于消息驱动的事件系统,其工作方式与我们的事件驱动回测引擎类似,允许类对特定消息做出自定义响应。为保持代码简洁,本文未引入完善的错误处理机制,仅通过 _error_handler 方法将错误信息输出至终端。

_reply_handler方法则用于判断是否需要生成 FillEvent 实例。它会检查接收到的消息是否为 "openOrder" 类型,并核实当前 orderId 是否已在 fill_dict中建立记录,若尚未创建则进行初始化。

当捕获到 "orderStatus" 消息且状态为订单已成交通知时,该方法会调用 create_fill来生成FillEvent 实例,同时将消息内容输出至终端,以便记录日志和调试。

# ib_execution.py    def _error_handler(self, msg):        """        Handles the capturing of error messages        """        # Currently no error handling.        print "Server Error: %s" % msg    def _reply_handler(self, msg):        """        Handles of server replies        """        # Handle open order orderId processing        if msg.typeName == "openOrder" and \            msg.orderId == self.order_id and \            not self.fill_dict.has_key(msg.orderId):            self.create_fill_dict_entry(msg)        # Handle Fills        if msg.typeName == "orderStatus" and \            msg.status == "Filled" and \            self.fill_dict[msg.orderId]["filled"] == False:            self.create_fill(msg)              print "Server Response: %s, %s\n" % (msg.typeName, msg)

以下定义的 create_tws_connection 方法用于建立与 IB API 的连接,内部调用 IbPy 提供的 ibConnection 对象实现。默认端口设为 7496,客户端 ID 默认为 10。连接对象创建完成后,即调用 connect 执行实际连接操作。

# ib_execution.py    def create_tws_connection(self):        """        Connect to the Trader Workstation (TWS) running on the        usual port of 7496, with a clientId of 10.        The clientId is chosen by us and we will need         separate IDs for both the execution connection and        market data connection, if the latter is used elsewhere.        """        tws_conn = ibConnection()        tws_conn.connect()        return tws_conn
为确保订单可追溯(特别是为准确匹配成交回报),我们使用以下 create_initial_order_id 方法来维护订单标识。当前示例中默认设初始值为 "1",但在实际应用中,更严谨的做法是通过接口查询 IB 当前可用的最新订单 ID 并进行设置。如需手动重置当前 API 订单编号,可通过 Trader Workstation 界面操作:进入“全局配置” > “API 设置”面板进行调整。
# ib_execution.py    def create_initial_order_id(self):        """        Creates the initial order ID used for Interactive        Brokers to keep track of submitted orders.        """        # There is scope for more logic here, but we        # will use "1" as the default for now.        return 1
以下 register_handlers方法的作用是将前面定义的错误处理与消息回复处理方法注册至 TWS 连接:
# ib_execution.py    def register_handlers(self):        """        Register the error and server reply         message handling functions.        """        # Assign the error handling function defined above        # to the TWS connection        self.tws_conn.register(self._error_handler, 'Error')        # Assign all of the server reply messages to the        # reply_handler function defined above        self.tws_conn.registerAll(self._reply_handler)
接着,我们需要先创建Contract实例,再将其与Order实例配对后发送至IB API。以下是创建配对前半部分的create_contract:该方法接收代码名称、证券类型(如股票或期货)、(主)交易所及币种作为参数,最终返回一个完整的Contract实例。
# ib_execution.py    def create_contract(self, symbol, sec_type, exch, prim_exch, curr):        """        Create a Contract object defining what will        be purchased, at which exchange and in which currency.        symbol - The ticker symbol for the contract        sec_type - The security type for the contract ('STK' is 'stock')        exch - The exchange to carry out the contract on        prim_exch - The primary exchange to carry out the contract on        curr - The currency in which to purchase the contract        """        contract = Contract()        contract.m_symbol = symbol        contract.m_secType = sec_type        contract.m_exchange = exch        contract.m_primaryExch = prim_exch        contract.m_currency = curr        return contract
以下定义的 create_order 方法用于生成配对的第二部分,即 Order 实例。该方法接收订单类型(如市价单或限价单)、交易数量以及交易方向(买入或卖出)作为参数,最终返回一个完整的 Order实例。
# ib_execution.py    def create_order(self, order_type, quantity, action):        """        Create an Order object (Market/Limit) to go long/short.        order_type - 'MKT', 'LMT' for Market or Limit orders        quantity - Integral number of assets to order        action - 'BUY' or 'SELL'        """        order = Order()        order.m_orderType = order_type        order.m_totalQuantity = quantity        order.m_action = action        return order 
为避免同一订单 ID 重复生成FillEvent 实例,我们借助 fill_dict 字典来记录各订单 ID 的填充状态。当某订单的成交回报已生成时,该订单 ID 对应的 "filled" 键值将被置为 True。若之后再次收到 IB 下发的同笔订单成交状态消息(即便为重复推送),系统也不会重复生成成交事件。以下定义的 create_fill_dict_entry 方法即用于实现此逻辑:
# ib_execution.py    def create_fill_dict_entry(self, msg):        """        Creates an entry in the Fill Dictionary that lists         orderIds and provides security information. This is        needed for the event-driven behaviour of the IB        server message behaviour.        """        self.fill_dict[msg.orderId] = {            "symbol": msg.contract.m_symbol,            "exchange": msg.contract.m_exchange,            "direction": msg.order.m_action,            "filled"False        }
以下定义的 create_fill 方法负责实际创建FillEvent实例,并将其推送至事件队列:
# ib_execution.py    def create_fill(self, msg):        """        Handles the creation of the FillEvent that will be        placed onto the events queue subsequent to an order        being filled.        """        fd = self.fill_dict[msg.orderId]        # Prepare the fill data        symbol = fd["symbol"]        exchange = fd["exchange"]        filled = msg.filled        direction = fd["direction"]        fill_cost = msg.avgFillPrice        # Create a fill event object        fill = FillEvent(            datetime.datetime.utcnow(), symbol,             exchange, filled, direction, fill_cost        )        # Make sure that multiple messages don't create        # additional fills.        self.fill_dict[msg.orderId]["filled"] = True        # Place the fill event onto the event queue        self.events.put(fill_event)

前置方法均已实现后,接下来需要重写 ExecutionHandler 抽象基类中的 execute_order 。该方法的核心职责是通过 IB API 实际执行订单委托。

首先需验证接收的事件确为 OrderEvent类型,随后分别构造 Contract与 Order 对象并完成参数配置。两者准备就绪后,调用连接对象的placeOrder方法,同时传入对应的order_id 进行委托。

此处有一个极易被忽视但至关重要的细节:务必调用 time.sleep(1),以确保订单指令真正送达 IB。在我个人的测试环境中,若缺失此行代码,API 将表现出明显不稳定的行为。

最后,对当前订单 ID 进行自增处理,以防止产生重复订单。

# ib_execution.py    def execute_order(self, event):        """        Creates the necessary InteractiveBrokers order object        and submits it to IB via their API.        The results are then queried in order to generate a        corresponding Fill object, which is placed back on        the event queue.        Parameters:        event - Contains an Event object with order information.        """        if event.type == 'ORDER':            # Prepare the parameters for the asset order            asset = event.symbol            asset_type = "STK"            order_type = event.order_type            quantity = event.quantity            direction = event.direction            # Create the Interactive Brokers contract via the             # passed Order event            ib_contract = self.create_contract(                asset, asset_type, self.order_routing,                self.order_routing, self.currency            )            # Create the Interactive Brokers order via the             # passed Order event            ib_order = self.create_order(                order_type, quantity, direction            )            # Use the connection to the send the order to IB            self.tws_conn.placeOrder(                self.order_id, ib_contract, ib_order            )            NOTE: This following line is crucial.            # It ensures the order goes through!            time.sleep(1)            # Increment the order ID for this session            self.order_id += 1

该类构成了Interactive Brokers执行处理程序的基础,可用于替代仅适用于回测的模拟执行模块。不过,要启用IB执行处理器,还需进一步构建实时行情接口处理器,以取代回测系统中的历史数据模块——这部分内容将在后续文章中展开。

由此可见,我们正在最大限度地复用回测与实盘系统的代码,使得组件“替换面”尽可能小,从而确保两者在行为上高度一致,甚至几乎无异。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 18:03:29 HTTP/2.0 GET : https://f.mffb.com.cn/a/475546.html
  2. 运行时间 : 0.140010s [ 吞吐率:7.14req/s ] 内存消耗:5,047.27kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=433c0402182789703215e6d5f6cbb0e7
  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.000935s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001471s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000656s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000690s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001340s ]
  6. SELECT * FROM `set` [ RunTime:0.007963s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001585s ]
  8. SELECT * FROM `article` WHERE `id` = 475546 LIMIT 1 [ RunTime:0.003025s ]
  9. UPDATE `article` SET `lasttime` = 1772273009 WHERE `id` = 475546 [ RunTime:0.006795s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.009806s ]
  11. SELECT * FROM `article` WHERE `id` < 475546 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001116s ]
  12. SELECT * FROM `article` WHERE `id` > 475546 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009729s ]
  13. SELECT * FROM `article` WHERE `id` < 475546 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003539s ]
  14. SELECT * FROM `article` WHERE `id` < 475546 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004897s ]
  15. SELECT * FROM `article` WHERE `id` < 475546 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011319s ]
0.141546s