当前位置:首页>python>手搓一个开源项目:让通达信运行 Python 的原理剖析与实现

手搓一个开源项目:让通达信运行 Python 的原理剖析与实现

  • 2026-01-31 14:13:45
手搓一个开源项目:让通达信运行 Python 的原理剖析与实现

作者:码上工坊版本:0.1.0日期:2026年1月许可证:MIT License项目地址1:https://gitee.com/icodewr/tdxpy_formulas项目地址2:https://github.com/ICodeWR/tdxpy_formulas

开源为学,自用为根,编程的终极成长之道

做开源项目,以开源的方式学习编程,是最高效、最具成长性的编程学习方法;为自己写软件、为自己的真实需求写软件,既是一种扎根务实的编程理念,更是一种向内求索、自我赋能的技术格局。

学习编程的目标是解决实际问题——tdxpy_formulas项目的设计目标,就是让我们在掌握编程技能的同时,直接获得一个能投入使用的实用工具。让代码为我们赋能,这也是本号的一个宗旨。

tdxpy_formulas项目完美践行"用中学、边学边用"的理念——以"用Python编写通达信指标公式"这一具体需求为牵引,将C++、Python、跨语言通信、插件开发等知识点融入实际场景。对于编程学习者而言,它既是可直接落地的实用工具,更是一套完整的"问题解决式学习"案例集。

项目的学习特性:

  • 知识点不孤立:学习C++不是死记语法,而是为了实现插件注册与高效数据传输;掌握Python不是单纯写脚本,而是为了开发灵活的量化指标;理解JSON配置不是背格式,而是为了实现公式的动态映射。

  • 反馈闭环快:每完成一个模块开发,就能在通达信中看到实际效果(比如自己写的MA指标在K线图上显示),这种"即时反馈"能极大提升学习动力。

  • 难度梯度合理:从简单的公式编写(Python),到核心的跨语言通信(C++),再到复杂的性能优化与功能扩展,难度逐步提升,符合循序渐进的学习规律。

  • 学开源、做开源:通过做开源软件,学习编程,边做边学、边学边做,学以致用,用中学。

  • 从"学会"到"能用" :从"看懂代码"到"会改代码";从"跑通示例"到"落地场景";从"被动使用"到"主动定制"。

  • 编程学习终极目标:不为学而学,为用而学;不为他人写代码,为自己解问题,为己赋能。

开源的本质是「开放、共建、复盘」,自用的本质是「刚需、务实、深耕」,二者结合,让我们的编程成长,既有方向,又有深度,更有格局。

项目简介(背景)

通达信作为国内主流的证券行情与交易软件,凭借稳定的行情接收、丰富的技术指标体系和便捷的公式编辑功能,成为千万投资者和量化分析师的必备工具。

Python 作为数据科学领域的"瑞士军刀",在数据处理、统计分析、人工智能等方面拥有无可比拟的生态优势。

tdxpy_formulas 项目是一个基于MIT开源协议的通达信Python插件框架,它通过构建C++与Python的混合编程桥梁,让开发者能够直接在通达信中调用Python脚本,实现自定义技术指标。项目采用模块化设计,兼顾性能与易用性,为量化分析提供了更灵活的实现方案。

项目主要特性&学习要点

  1. 无缝集成:遵循通达信DLL插件规范,即插即用,无需修改通达信主程序
  2. 双语言协同:C++负责性能敏感型逻辑(如数据传输、插件注册),Python负责灵活的数据分析与算法实现
  3. 完整生态支持:内置Python 3.14.2运行环境,支持NumPy、Pandas等数据科学库
  4. 热重载机制:支持Python模块实时重载,提升开发调试效率
  5. 灵活配置:通过JSON文件管理公式映射与运行参数,支持多公式并行调用
  6. 完善的日志系统:多级别日志记录,便于问题排查与运行监控

项目技术栈选型

技术领域
选型方案
版本要求
核心作用
开发语言
C++/Python
C++17、Python 3.14.2
C++实现插件框架,Python实现业务算法
构建系统
CMake
3.15+
跨平台构建与配置管理
开发工具
Visual Studio 2022
社区版/专业版
Windows平台编译与调试
JSON解析
jsoncpp
1.9.5+
配置文件解析与数据序列化
测试框架
Google Test
1.10+
C++模块单元测试
操作系统
Windows
10/11
通达信运行环境兼容

2. 项目核心原理:通达信与Python的通信桥梁

要让通达信运行Python代码,核心是解决三个关键问题:通达信插件接口适配、跨语言数据传输、Python解释器嵌入。以下从原理层面拆解实现逻辑。

2.1 通达信插件工作机制

通达信提供了DLL插件接口,允许第三方开发者通过特定规范的函数注册,将自定义功能集成到软件中。其核心工作流程如下:

  1. 插件编译为符合Windows规范的DLL文件,导出指定格式的注册函数
  2. 通达信启动时加载DLL,通过注册函数获取插件提供的功能列表
  3. 当用户在公式中调用插件函数时,通达信将行情数据传入DLL,接收计算结果并展示

关键约束:插件必须导出RegisterTdxFunc函数,函数参数为TdxPluginFunctionInfo**类型,用于向通达信注册功能函数表。每个功能函数需遵循固定签名:

typedefvoid(*TdxPluginFunction)(int dataLength, float* output, float* inputA, float* inputB, float* inputC);

2.2 跨语言通信实现

C++与Python的通信是项目核心,采用"嵌入式Python解释器"方案,而非进程间通信,以保证数据传输效率:

  1. Python解释器嵌入:通过Python C API在C++中初始化Python解释器,实现解释器的启动、停止与状态管理
  2. 数据格式转换:将通达信传入的C风格浮点数组转换为Python列表/NumPy数组,计算完成后再反向转换
  3. 函数调用转发:通过配置文件中的公式映射关系,将通达信的函数调用转发到对应的Python函数
  4. GIL管理:使用RAII机制封装Python全局解释器锁(GIL),确保多线程环境下的线程安全

核心流程示意图:

通达信软件 → 调用DLL函数 → C++插件框架 → 数据格式转换 → Python函数执行                                          ↓通达信展示结果 ← 接收计算结果 ← C++插件框架 ← 结果格式转换 ← Python返回结果

2.3 热重载实现原理

热重载功能允许在不重启通达信的情况下更新Python代码,核心通过以下机制实现:

  1. 为Python模块维护加载状态缓存
  2. 当接收到热重载指令(函数ID=0)时,调用PyImport_ReloadModule重新加载指定模块
  3. 保留模块加载的句柄,确保重载后新代码立即生效
  4. 维护函数ID与Python模块/函数的映射关系,确保重载后调用路径正确

注:本功能下一版本解决,当前版本暂不支持。

3. 开发环境搭建

3.1 前置依赖安装

  1. Visual Studio 2022

    • 下载地址:https://visualstudio.microsoft.com/downloads/
    • 安装要求:勾选"使用C++的桌面开发"工作负载,包含MSVC v143生成工具、Windows 10 SDK(10.0.20348.0+)、C++ CMake工具
  2. CMake

    • 下载地址:https://cmake.org/download/
    • 安装要求:选择Windows x64版本,安装时勾选"Add CMake to the system PATH"
  3. Git

    • 下载地址:https://gitforwindows.org/
    • 用途:版本控制与项目克隆
  4. Python 3.14.2

    • 项目已内置32位版本,位于third_party/Python3142-32目录
    • 如需自定义Python路径,可通过CMake配置参数指定

3.2 项目克隆与目录结构

# 克隆项目仓库git clone https://gitee.com/icodewr/tdxpy_formulascd tdxpy_formulas# 初始化子模块(如需第三方依赖源码)git submodule update --init --recursive

项目核心目录结构说明:

tdxpy_formulas/├── src/                  # C++源代码目录(核心框架实现)├── include/              # C++头文件目录├── pythonenv/            # Python公式脚本与虚拟环境├── config/               # 配置文件目录├── third_party/          # 第三方依赖(Python、jsoncpp)├── tests/                # 单元测试代码├── docs/                 # 项目文档└── CMakeLists.txt        # 构建配置主文件

3.3 构建项目(命令行方式)

# 创建构建目录mkdir buildcd build# 配置CMake(32位Release版本,通达信默认兼容)cmake .. -G "Visual Studio 17 2022" -A Win32 -DCMAKE_BUILD_TYPE=Release# 编译项目(并行编译加速)cmake --build . --config Release -- /m# 安装输出文件到指定目录cmake --install . --config Release

3.4 Visual Studio开发环境配置

  1. 打开Visual Studio 2022,选择"打开本地文件夹"
  2. 导航到项目根目录tdxpy_formulas
  3. 等待CMake自动配置完成,右下角显示"配置成功"
  4. 在工具栏选择配置:x86-Release(32位Release版本)
  5. 右键点击解决方案资源管理器中的tdxpy_formulas项目,选择"设为启动项目"
  6. Ctrl+Shift+B编译项目,生成的DLL文件位于build/bin/Release目录

4. 核心模块实现详解

4.1 插件注册模块(tdxpy_plugin_registry.cpp)

负责向通达信注册功能函数,是通达信与插件交互的入口。核心实现如下:

  1. 函数表定义:生成0-100号函数(支持101个自定义功能),通过宏定义批量生成函数包装器
// 生成插件函数包装器#define GENERATE_PLUGIN_FUNCTION(n)                                                                    \void pluginFunction##n(int dataLength, float *output, float *inputA, float *inputB, float *inputC)     \{                                                                                                      \    pluginFunctionDispatcher(n, dataLength, output, inputA, inputB, inputC);                           \}// 生成0-100号函数GENERATE_PLUGIN_FUNCTION(0)GENERATE_PLUGIN_FUNCTION(1)// ... 省略中间函数 ...GENERATE_PLUGIN_FUNCTION(100)
  1. 函数调度器:统一处理所有函数调用,转发到Python引擎
voidpluginFunctionDispatcher(int functionId, int dataLength, float *output,float *inputA, float *inputB, float *inputC){    TDXPY_LOG_DEBUG("函数调用调度: ID=" + std::to_string(functionId) + ", 数据长度=" + std::to_string(dataLength));if (!tdxpyRunPythonPlugin(functionId, dataLength, output, inputA, inputB, inputC))    {// 调用失败时输出清零if (functionId != 0) {std::fill(output, output + dataLength, 0.0f);        }    }}
  1. 注册函数导出:遵循通达信插件规范,导出RegisterTdxFunc函数
extern"C" __declspec(dllexport) BOOL RegisterTdxFunc(TdxPluginFunctionInfo **pluginFuncTable){if (*pluginFuncTable == nullptr)    {        (*pluginFuncTable) = g_pluginFunctionTable; // 函数表指针赋值return TRUE;    }return FALSE;}

4.2 Python引擎模块(tdxpy_python_engine.cpp)

负责Python解释器的初始化、Python函数调用、数据格式转换等核心功能。

  1. Python解释器初始化
inttdxpyPythonInitialize(){// 双检锁确保线程安全初始化if (g_pythonInitialized.load(std::memory_order_acquire)) {return0;    }std::lock_guard<std::mutex> lock(g_initMutex);if (g_pythonInitialized.load(std::memory_order_relaxed)) {return0;    }// 初始化Python配置    PyConfig pythonConfig;    PyConfig_InitPythonConfig(&pythonConfig);// 设置Python路径与搜索目录    pythonConfig.executable = Py_DecodeLocale(pythonExe.c_str(), nullptr);    pythonConfig.home = Py_DecodeLocale(pythonHome.c_str(), nullptr);    pythonConfig.module_search_paths_set = 1;for (constauto& path : pySearchPaths) {        PyWideStringList_Append(&pythonConfig.module_search_paths, Py_DecodeLocale(path.c_str(), nullptr));    }// 初始化Python解释器    PyStatus status = Py_InitializeFromConfig(&pythonConfig);if (PyStatus_Exception(status)) {        TDXPY_LOG_ERROR("Python解释器初始化失败");return1;    }    g_pythonInitialized.store(truestd::memory_order_release);return0;}
  1. Python函数调用流程
inttdxpyRunPythonPlugin(int functionId, int dataLength,float* output, float* inputA, float* inputB, float* inputC){// 参数校验if (dataLength <= 0 || !output) return0;// 获取公式配置(从JSON配置中查找函数ID对应的Python模块和函数)const tdxpy::config::FormulaConfig* pFormula = g_tdxpyConfig.getFormulaById(functionId);if (!pFormula) return0;// GIL管理(RAII自动加锁解锁)    PyGILLocker gil;if (!gil.isAcquired()) return0;// 导入Python模块    PyObject* pModule = PyImport_ImportModule(pFormula->moduleName.c_str());if (!pModule) {        SafePyErrPrint();return0;    }// 获取Python函数    PyObject* pFunction = PyObject_GetAttrString(pModule, pFormula->function.c_str());if (!pFunction || !PyCallable_Check(pFunction)) {        SafePyErrPrint();        Py_DECREF(pModule);return0;    }// 构建函数参数(转换C++数组为Python列表)    PyObject* pArgs = PyTuple_New(6);    PyTuple_SetItem(pArgs, 0, PyLong_FromLong(functionId));    PyTuple_SetItem(pArgs, 1, PyLong_FromLong(dataLength));    PyTuple_SetItem(pArgs, 2, convertFloatArrayToPythonList(inputA, dataLength));    PyTuple_SetItem(pArgs, 3, convertFloatArrayToPythonList(inputB, dataLength));    PyTuple_SetItem(pArgs, 4, convertFloatArrayToPythonList(inputC, dataLength));    PyTuple_SetItem(pArgs, 5, PyUnicode_FromString(pFormula->userParams.c_str()));// 调用Python函数    PyObject* pResult = PyObject_CallObject(pFunction, pArgs);// 处理返回结果(转换Python列表为C++数组)if (pResult && PyList_Check(pResult)) {        convertPythonListToFloatArray(pResult, output, dataLength);        Py_DECREF(pResult);        Py_DECREF(pArgs);        Py_DECREF(pFunction);        Py_DECREF(pModule);return1;    }// 资源清理    Py_XDECREF(pResult);    Py_DECREF(pArgs);    Py_DECREF(pFunction);    Py_DECREF(pModule);return0;}
  1. 数据格式转换工具函数
// C++浮点数组转Python列表PyObject* convertFloatArrayToPythonList(constfloat* data, int length){if (!data || length <= 0return PyList_New(0);    PyObject* pList = PyList_New(length);for (int i = 0; i < length; ++i) {        PyList_SetItem(pList, i, PyFloat_FromDouble(data[i]));    }return pList;}// Python列表转C++浮点数组voidconvertPythonListToFloatArray(PyObject* pList, float* output, int length){if (!pList || !output || length <= 0return;    Py_ssize_t listSize = PyList_Size(pList);    Py_ssize_t safeSize = std::min(listSize, static_cast<Py_ssize_t>(length));for (Py_ssize_t i = 0; i < safeSize; ++i) {        PyObject* pItem = PyList_GetItem(pList, i);if (pItem && PyFloat_Check(pItem)) {            output[i] = static_cast<float>(PyFloat_AsDouble(pItem));        } else {            output[i] = 0.0f;        }    }// 填充剩余元素for (Py_ssize_t i = safeSize; i < length; ++i) {        output[i] = 0.0f;    }}

4.3 配置管理模块(tdxpy_config_manager.cpp)

负责解析JSON配置文件,管理Python路径、公式映射、日志级别等配置信息。

核心功能:

  1. 支持从默认路径、环境变量、自定义路径加载配置文件
  2. 解析公式映射关系,建立函数ID与Python模块/函数的对应
  3. 提供配置验证与热重载功能
  4. 生成默认配置文件(首次运行时使用)

配置文件示例(tdxpy_config.json):

{"tdxpy_formulas": {"version""0.1.0","description""通达信Python公式插件配置文件"  },"python_config": {"python_home""./third_party/Python3142-32/","search_paths": ["./third_party/Python3142-32/Lib","./pythonenv/tdxpy_formulas"    ]  },"formula_mappings": [    {"name""TDXPY_MA","description""移动平均线","module_name""tdxpy_ma","function""tdxpy_ma","id"1,"user_params""5,10,20,60"    }  ]}

4.4 日志模块(tdxpy_logger.cpp)

提供多级别日志记录功能,支持控制台输出与文件记录,便于开发调试与运行监控。

核心特性:

  1. 日志级别:TRACE、DEBUG、INFO、WARNING、ERROR、OFF
  2. 日志格式:包含时间戳、级别、文件名、行号、函数名、日志内容
  3. 线程安全:使用互斥锁确保多线程环境下日志完整性
  4. 编码支持:支持UTF-8编码,避免中文乱码

使用示例:

// 不同级别日志调用TDXPY_LOG_DEBUG("Python模块加载成功: " + moduleName);TDXPY_LOG_INFO("插件初始化完成,版本: " + version);TDXPY_LOG_WARNING("配置文件缺少可选字段: " + fieldName);TDXPY_LOG_ERROR("Python函数调用失败: " + functionName);

5. Python公式脚本开发概述

5.1 公式脚本开发规范

Python公式需遵循特定的函数签名与目录规范,才能被插件正确识别和调用:

  1. 目录规范:Python公式文件需放置在pythonenv/tdxpy_formulas目录下
  2. 模块命名:文件名即为模块名(如tdxpy_ma.py的模块名为tdxpy_ma
  3. 函数签名:必须包含6个参数,返回值为列表(长度与输入数据长度一致)
def 函数名(function_id, data_length, input_a, input_b, input_c, user_params):"""    通达信Python公式入口函数    参数说明:        function_id: 函数ID(对应配置文件中的id字段)        data_length: 输入数据长度        input_a: 输入数据A(通常为收盘价)        input_b: 输入数据B(通常为最高价)        input_c: 输入数据C(通常为最低价)        user_params: 用户参数字符串(从配置文件读取)    返回值:        list: 计算结果列表,长度必须等于data_length    """# 业务逻辑实现return 结果列表

5.2 基础公式示例:移动平均线(MA)

# tdxpy_ma.py - 移动平均线公式实现deftdxpy_ma(function_id, data_length, input_a, input_b, input_c, user_params):"""    计算简单移动平均线(SMA)    user_params: 周期参数,逗号分隔(如"5,10,20,60")    """# 解析用户参数,默认周期为5ifnot user_params:        periods = [5]else:        periods = [int(p.strip()) for p in user_params.split(','if p.strip()]# 取第一个周期计算(如需多周期输出可扩展)    period = periods[0]    result = []for i in range(data_length):if i < period - 1:# 数据不足周期时返回0            result.append(0.0)else:# 计算指定周期的移动平均            start_idx = i - period + 1            end_idx = i + 1            avg_value = sum(input_a[start_idx:end_idx]) / period            result.append(avg_value)return result

5.3 高级公式示例:NumPy加速的MACD指标

利用NumPy的向量化计算提升性能,适用于大数据量场景:

# tdxpy_macd.py - NumPy加速的MACD指标import numpy as npdeftdxpy_macd(function_id, data_length, input_a, input_b, input_c, user_params):"""    计算MACD指标(指数平滑异同平均线)    user_params: 快速周期,慢速周期,信号周期(默认"12,26,9")    """# 解析参数ifnot user_params:        fast_period, slow_period, signal_period = 12269else:        params = [int(p.strip()) for p in user_params.split(','if p.strip()]        fast_period = params[0if len(params) > 0else12        slow_period = params[1if len(params) > 1else26        signal_period = params[2if len(params) > 2else9# 转换为NumPy数组    close_prices = np.array(input_a[:data_length], dtype=np.float32)# 计算EMAdefema(prices, period):        alpha = 2 / (period + 1)return np.convolve(prices, [alpha * (1 - alpha)**i for i in range(period)], mode='same')# 计算MACD线    ema_fast = ema(close_prices, fast_period)    ema_slow = ema(close_prices, slow_period)    macd_line = ema_fast - ema_slow# 计算信号线    signal_line = ema(macd_line, signal_period)# 计算柱状线    histogram = (macd_line - signal_line) * 2# 返回柱状线结果(可根据需求返回MACD线或信号线)return histogram.tolist()

5.4 配置文件更新

config/tdxpy_config.jsonformula_mappings中添加公式映射:

{"formula_mappings": [    {"name""TDXPY_MA","description""简单移动平均线","module_name""tdxpy_ma","function""tdxpy_ma","id"1,"user_params""5,10,20,60"    },    {"name""TDXPY_MACD","description""NumPy加速MACD指标","module_name""tdxpy_macd","function""tdxpy_macd","id"2,"user_params""12,26,9"    }  ]}

6. 插件部署与通达信使用

6.1 插件部署步骤

  1. 编译完成后,在build/bin/Release目录获取以下文件:

    • tdxpy_formulas.dll(核心插件文件)
    • python314.dll(Python运行时)
    • jsoncpp.dll(JSON解析库)
  2. 创建部署目录结构,复制相关文件:

T0002/dlls/                  # 通达信插件目录├── tdxpy_formulas.dll       # 核心插件├── python314.dll            # Python运行时├── jsoncpp.dll              # JSON库├── config/                  # 配置文件目录│   └── tdxpy_config.json    # 配置文件└── pythonenv/               # Python公式目录    └── tdxpy_formulas/      # 公式脚本        ├── tdxpy_ma.py        └── tdxpy_macd.py
  1. 将上述目录复制到通达信安装目录下的T0002/dlls目录(通达信安装目录可通过软件"系统"→"数据维护工具"查看)

6.2 通达信中调用Python公式

  1. 启动通达信软件,按Ctrl+F打开公式管理器
  2. 切换到"DLL函数"选项卡,点击"绑定"按钮
  3. 选择T0002/dlls/tdxpy_formulas.dll,完成绑定
  4. 新建公式,在公式编辑器中调用Python公式:
// 通达信公式编辑器中调用Python公式MA5:TDXDLL1(1, CLOSE, 0, 0), COLORBLUE;  // 调用ID=1的MA公式(收盘价)MACD:TDXDLL1(2, CLOSE, 0, 0), COLORRED; // 调用ID=2的MACD公式
  1. 应用公式到K线图,即可看到Python计算的技术指标

6.3 热重载功能使用

当修改Python公式后,无需重启通达信,只需在公式中调用ID=0的函数即可实现热重载:

// 热重载Python模块(修改公式后刷新K线图即可生效)热重载:TDXDLL1(0, 0, 0, 0), NODRAW;

注:该功能待完善

7. 常见问题与调试技巧

7.1 插件加载失败

  • 检查DLL文件是否齐全(核心三文件:tdxpy_formulas.dll、python314.dll、jsoncpp.dll)
  • 确认通达信版本为7.0及以上
  • 检查系统是否缺少Visual C++运行时(可安装vcredist_x86.exe)
  • 查看日志文件(默认路径:T0002/dlls/logs/tdxpy_formula.log)获取具体错误信息

7.2 Python模块导入失败

  • 确认公式文件放置在pythonenv/tdxpy_formulas目录
  • 检查模块名与文件名一致(不含.py后缀)
  • 验证配置文件中module_namefunction字段是否正确
  • 查看Python搜索路径配置,确保包含公式目录
  • 目前只调试验证了32位DLL,64位暂时未验证通过。

7.3 函数调用返回全0

  • 检查函数ID是否在配置文件中正确配置
  • 验证输入数据长度是否满足算法要求(如MA指标需要至少N个数据点)
  • 查看日志文件,确认Python函数是否抛出异常
  • 检查Python函数返回值长度是否等于data_length

7.4 调试技巧

  1. 日志调试:设置日志级别为DEBUG,查看详细运行过程
  2. Visual Studio调试
    • 启动通达信软件
    • 在Visual Studio中选择"调试"→"附加到进程"
    • 选择tdxw.exe(通达信进程)
    • 在C++代码中设置断点,触发公式调用即可调试
  3. Python代码调试
    • 在Python公式中添加print语句(输出到日志文件)
    • 使用TDXPY_LOG_DEBUG记录关键变量值
    • 利用热重载功能快速验证修改效果

8. 项目扩展与进阶开发

8.1 支持更多技术指标

按照项目规范开发新的Python公式,只需:

  1. 编写符合签名要求的Python函数
  2. 在配置文件中添加公式映射
  3. 部署到pythonenv/tdxpy_formulas目录
  4. 热重载生效,无需重新编译C++代码

8.2 性能优化方向

  1. 数据传输优化:使用NumPy数组直接传输数据,减少格式转换开销
  2. 缓存机制:缓存常用Python模块与模型,避免重复加载
  3. 并行计算:利用多线程并行处理多个公式计算
  4. 算法优化:对热点代码进行Cython编译,提升执行效率

8.3 功能扩展建议

  1. 支持更多数据输入类型(如成交量、成交额)
  2. 实现公式参数可视化调整
  3. 集成更多数据科学库(如Scikit-learn、TensorFlow)

9. 开源协议与贡献指南

9.1 开源协议说明

本项目采用MIT开源协议,您可以:

  • 自由使用、复制、修改、合并、发布、分发、 sublicense 和/或出售本软件的副本
  • 在软件和软件的所有副本中保留版权声明和许可声明

限制条件:

  • 本软件按"原样"提供,不提供任何明示或暗示的担保
  • 作者不对任何损失承担责任

9.2 贡献指南

欢迎通过以下方式参与项目贡献:

  1. 提交Issue:报告Bug、提出功能建议
  2. 提交Pull Request
    • 遵循项目代码规范(见项目命名规则.md
    • 新增功能需附带单元测试
    • 提交前确保所有测试通过
  3. 文档完善:补充开发文档、使用教程、示例公式
  4. 社区支持:在Issue中帮助其他用户解决问题

贡献流程:

  1. Fork项目仓库
  2. 创建特性分支(git checkout -b feature/xxx
  3. 提交修改(git commit -m "Add xxx feature"
  4. 推送分支(git push origin feature/xxx
  5. 提交Pull Request

10. 总结与展望

tdxpy_formulas项目通过C++与Python的协同编程,成功打通了通达信与Python的调用执行,项目的核心价值在于:

  1. 让Python开发者能够直接利用通达信的行情数据编写指标公式
  2. 兼顾了性能与灵活性,C++负责底层通信与性能敏感型逻辑,Python负责高层算法实现
  3. 提供了完整的开源框架,开发者可基于此扩展更多高级功能
  4. 学编程的同时,构建实用工具

本项目不仅是一个实用的技术工具,更是一个学习跨语言编程、插件开发、量化分析的优秀实践案例。希望通过开源协作,让更多开发者参与进来,共同开发完善更多的学习项目和实用工具。

附录:项目资源

  • 项目仓库:https://gitee.com/icodewr/tdxpy_formulas
  • 问题反馈:通过GitHub Issues提交
  • 技术交流:3892493481@qq.com
  • 公众号:码上工坊(获取更多量化开发资源)

版权声明:本文档与项目代码均遵循MIT开源协议,© 2026 码上工坊 保留所有权利。


作者简介:码上工坊,探索用编程为己赋能,定期分享编程知识和项目实战经验。持续学习、适应变化、记录点滴、复盘反思、成长进步。

重要提示:本文主要是记录自己的学习与实践过程,所提内容或者观点仅代表个人意见,只是我以为的,不代表完全正确,欢迎交流讨论。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 16:36:12 HTTP/2.0 GET : https://f.mffb.com.cn/a/465258.html
  2. 运行时间 : 0.139367s [ 吞吐率:7.18req/s ] 内存消耗:4,618.01kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b3d529a08fa2f28e0fa7fa2fc23db19c
  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.000636s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000741s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.008215s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005236s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000632s ]
  6. SELECT * FROM `set` [ RunTime:0.000296s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000587s ]
  8. SELECT * FROM `article` WHERE `id` = 465258 LIMIT 1 [ RunTime:0.001873s ]
  9. UPDATE `article` SET `lasttime` = 1770539772 WHERE `id` = 465258 [ RunTime:0.002558s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.003665s ]
  11. SELECT * FROM `article` WHERE `id` < 465258 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006107s ]
  12. SELECT * FROM `article` WHERE `id` > 465258 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002075s ]
  13. SELECT * FROM `article` WHERE `id` < 465258 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004271s ]
  14. SELECT * FROM `article` WHERE `id` < 465258 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.014275s ]
  15. SELECT * FROM `article` WHERE `id` < 465258 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.012156s ]
0.142948s