深度学习期货交易入门:从CTP接口到数据落库的完整实战
简介一套面向量化交易与程序化开发者的期货交易系统代码包整合Python与深度学习技术覆盖行情接入、策略建模、回测与实盘执行等环节适合希望在期货市场应用神经网络模型的金融编程人员参考。压缩包共729个文件约19.56MB主体为401个Python脚本配合52个头文件、36个C源文件、18个动态库及多个配置文件构成跨语言交易框架另有38份CSV样本数据、25个JSON参数文件与14个pkl模型文件便于直接观察数据流与模型持久化结构。目前已有240人学习。从内容预览可见包内含CTP接口封装相关源码及多个配置文件可帮助理解交易柜台连接、合约查询与私有/公开流处理机制。读者既可直接运行现有策略基线也可基于目录结构替换模型、调整参数完成从数据到信号的深度学习链路改造。1. 从CTP接口开始很多人把深度学习期货交易的第一步搞反了我拿到这套“python结合深度学习的期货程序化交易系统”时第一反应是翻模型代码结果发现整套系统里最有价值的反而是底层那些不起眼的文件vnctptd.cpp、make.bat、ContractData.vt.bak。这套系统的定位很明确——把CTP柜台行情和交易能力封装成Python可调用模块再让深度学习模型拿历史行情训练出预测信号最后通过程序化订单落到期货公司柜台。适合谁用已经会用pandas和PyTorch、但还没接通过期货柜台的开发者以及想抄一套完整数据管线的量化从业者。深度学习模型随手能写真正卡人的是把预测变成一笔能成交的委托所以第一步从CTP接口开始。2. 底层接口与数据结构vnctptd.cpp、make.bat和ContractData.vt.bak到底在干什么2.1 先分清这份资源里的关键文件CTP接口不是黑匣子完整看过这份资源的文件列表后你会发现最显眼的不是策略文件而是 vnctptd.cpp、make.bat、ContractData.vt.bak、StockMonitor.exe.config 这样一批“底层文件”。它们各自承担一个明确任务。文件作用常规操作vnctptd.cppCTP交易接口的C封装源码编译成 pyd不手工改源码make.bat调用Visual Studio编译vnctptd在VS命令提示符下执行ContractData.vt.bakMySQL数据库备份含合约与历史行情用mysql命令恢复DialogRsp.con / QueryRsp.con 等CTP消息结构定义编译期引用一般不修改StockMonitor.exe.config监控程序配置文件按实际IP与端口调整TradingDay.con交易日相关结构随编译环境使用vnctptd.cpp 解决的核心问题是CTP柜台提供的是C动态库Python没办法直接调用vn.py早期版本就是用C写一层封装编译成 pyd 给 Python import。很多新手看到C源码就慌实际上这套系统的设计就是把编译产物当成黑匣子你只需要保证编译一次成功后续所有工作都在Python层完成。这里还要提一个容易混淆的点CTP本身是一套协议不是数据库接口。它能给到你的原始数据只有Tick和成交回报K线合成、合约管理、历史数据存储全都要自己在应用层做。所以这份资源里ContractData.vt.bak才是深度学习能跑起来的前提——没有合约映射和历史K线模型连训练样本都凑不齐。2.2 恢复ContractData数据库让合约数据先落地把 .vt.bak 恢复成 MySQL 库是第一件实事。常见做法是用 mysql 命令行直接导入vt 是 vn.py 默认的数据库名mysql -uroot -p ContractData.vt.bak逻辑说明这条命令会在 MySQL 里恢复出一个名为 vt 的库。恢复后重点看三张表contract合约代码与交易所对应关系、dbbard1分钟Bar历史数据、dbtickTick记录。contract 表决定了你能订阅什么合约代码dbbard 决定了深度学习训练样本能回溯多久dbtick 决定实盘落库的写入压力。恢复后不要急着跑业务先做一次数据质量检查我一般会执行这条SQLuse vt; select symbol, count(*) as cnt from dbbard group by symbol order by cnt desc limit 20;说明这条SQL能看到每张合约的K线数量。数量最少的合约训练出来的模型很容易过拟合因为样本量不足。我一般要求单合约至少5万根以上1分钟Bar才敢拿来训练低于这个量级深度学习模型表现大概率不如简单均线。字段方面注意vn.py 1.x的数据库表名固定为小写字段包括 symbol、exchange、datetime、openPrice、highPrice、lowPrice、closePrice、volume、openInterest取数时字段名不要写错否则后面所有查询都要返工。恢复完成后建议重启一次MySQL服务再用命令行或客户端确认表数量对得上。提示数据库恢复失败后面全断这个环节值得多花十分钟验证。3. 把底层编译并跑通从make.bat到第一条行情落库3.1 编译环境准备与make.bat执行细节编译 vnctptd 需要三样东西Visual Studio2015或2017都可以、CTP 官方交易库含 thosttraderapi_se.dll 和 thostmduserapi_se.dll、以及对应Python版本的 include 和 libs 目录。make.bat 的执行逻辑一般长这样echo off set PYTHON_INCC:\Python36\include set PYTHON_LIBC:\Python36\libs\python36.lib set CTP_LIB..\lib cl.exe /c vnctptd.cpp /I %PYTHON_INC% /I ..\include link.exe /DLL vnctptd.obj %PYTHON_LIB% %CTP_LIB%\thosttraderapi_se.lib %CTP_LIB%\thostmduserapi_se.lib /OUT:.\vnctptd.pyd参数说明/c 表示只编译不链接/I 指定Python头文件和CTP头文件路径/OUT 指定生成 pyd 的文件名。生成的 vnctptd.pyd 和 vnctptd.dll 要放到Python项目能搜到的目录下。链接时如果报找不到 thosttraderapi_se.lib说明CTP lib路径不对或者官方接口库还没下载完整。编译前一定确认三件事Python版本位数、Visual Studio工具集版本、CTP接口库版本。32位Python配64位CTP库编译时直接报结构体对齐错误这种问题玄学得很重装环境比定位更快。编译成功后做一次导入测试python -c import vnctptd; print(vnctptd.__file__)能正常输出路径说明交易接口这一层通了。注意Python版本必须和编译时一致这是编译型接口最容易翻车的地方。我见过有人拿Python 3.8编译跑系统时用Python 3.6一import就内存报错查了半天才发现环境不对。3.2 连接配置、行情订阅与数据落库的一段可抄代码底层编译通过后下一步是写连接脚本。CTP连接需要四个参数服务器地址、BrokerID、用户名、密码。用SimNow模拟盘举例完整的连接脚本长这样# connect_ctp.py from vnpy.trader.vtEngine import MainEngine from vnpy.trader.gateway.ctpGateway import CtpGateway setting { userID: your_account, password: your_password, brokerID: 9999, tdAddress: tcp://180.168.146.187:10130, # 交易前置 mdAddress: tcp://180.168.146.187:10131, # 行情前置 productInfo: , appID: , authCode: } mainEngine MainEngine() mainEngine.addGateway(CtpGateway) mainEngine.connect(setting)逻辑说明MainEngine是vn.py框架的核心调度器addGateway把CTP接口注册进去connect传入的setting会被封装成CTP登录请求。tdAddress 和 mdAddress 一个负责交易、一个负责行情很多新手只填一个导致登录成功却没行情就是这里少配了行情前置。连接成功后订阅合约mainEngine.subscribe(rb9999, SHFE)参数说明rb9999是螺纹钢连续合约代码SHFE表示上期所。连续合约会自动切换到当下活跃的主力合约对训练和实盘都方便。订阅成功后行情会以Tick形式进入回调函数写一个简单的落库回调def onTick(tick): sql (insert into dbtick(symbol, exchange, datetime, lastPrice, volume, openInterest) values(%s,%s,%s,%f,%d,%d) % ( tick.symbol, tick.exchange, tick.datetime, tick.lastPrice, tick.volume, tick.openInterest)) cursor.execute(sql)这段代码看着简单实际跑起来有性能问题每笔Tick都insert一天几十万条MySQL容易成为瓶颈。我一般会先攒100条再批量insert或者直接把写入队列丢到另一个线程行情主线程只负责塞数据不碰数据库连接。批量写法的核心是把多条sql拼成一个多值insert一次execute提交写入速度能快一个数量级。行情落库之后还需要确认“收到数据-写入数据”链路完整方法很简单订阅后等一分钟然后查询dbtick表里的记录数如果数量在增长说明链路通了。这一步跑通深度学习模型要用的数据原料才算真正到手。4. 让深度学习进场用PyTorch把历史行情变成期货交易信号4.1 特征构造与样本组织把K线转成监督学习模型能不能赚钱一半取决于特征构造而不是网络结构。期货数据和MNIST这类玩具数据不一样它没有放之四海而皆准的规律需要先把原始行情转化成“样本”。我从dbbard取历史数据后一般构造三组特征价格类对数收益率、收盘价相对N期均值偏离、波动类ATR、已实现波动率、量仓类成交量、持仓量变化。取数代码import pandas as pd import numpy as np df pd.read_sql( select * from dbbard where symbolrb9999 and interval1min order by datetime, conengine ) df df.set_index(datetime) df[ret] df[closePrice].pct_change().replace([np.inf, -np.inf], 0) df[volatility] df[ret].rolling(20).std() df[vol_ratio] df[volume] / (df[volume].rolling(20).mean() 1e-8) feat_cols [ret, volatility, vol_ratio] data df.loc[:, feat_cols].fillna(methodffill).fillna(0)把这段代码拆开说pct_change 计算逐根K线的百分比变化rolling(20)是滚动窗口长度为20根K线加1e-8防止除零。标准化的常见做法是只在训练集上计算均值和标准差再作用到测试集绝对不用全量数据算均值否则会把未来信息泄露给模型回测曲线好看实盘立刻翻车。样本组织采用“用过去N根预测未来M根”的方式N, M 60, 5 X, y [], [] for i in range(N, len(data) - M): X.append(data.iloc[i - N:i].values) y.append(1 if df[closePrice].iloc[i M] df[closePrice].iloc[i] else 0) X np.array(X, dtypenp.float32) y np.array(y, dtypenp.int64)说明N60表示看过去一小时60根1分钟K线M5表示预测未来5分钟涨幅方向y1代表未来5分钟收盘价高于当前。这个标签定义简单且可复现但没处理手续费和滑点实盘信号消耗要额外加阈值这一点后面会细说。4.2 LSTM模型与L2正则化PyTorch里的一段训练代码模型这块我不追求结构新奇LSTM足够处理60步序列。重点有两件事一是加Dropout防止时间序列过拟合二是用L2正则化控制权重幅度。后者的作用经常被忽视吴恩达深度学习课后题里反复讲的L2正则化在时序模型上同样成立具体到PyTorch就是一行参数配置。import torch import torch.nn as nn class LSTMModel(nn.Module): def __init__(self, input_size, hidden_size64, num_layers2, output_size2): super().__init__() self.lstm nn.LSTM( input_size, hidden_size, num_layers, batch_firstTrue, dropout0.3 ) self.fc nn.Linear(hidden_size, output_size) def forward(self, x): out, _ self.lstm(x) logits self.fc(out[:, -1, :]) return logits model LSTMModel(input_sizelen(feat_cols), hidden_size64, num_layers2) optimizer torch.optim.Adam(model.parameters(), lr1e-3, weight_decay1e-4)参数说明dropout0.3会在LSTM两层之间随机丢弃30%神经元训练收敛更慢但不容易过拟合weight_decay1e-4是L2正则化系数相当于对权重做惩罚防止某个特征被过度放大。学习率用1e-3配Adam如果验证集loss震荡就往1e-4降。训练循环这里不展开但数据加载器的batch_size不要太大时间序列样本之间相关性极强batch_size128时采样均匀性明显好于512。训练完成后保存权重torch.save(model.state_dict(), lstm_rb.pth)以后每天收盘后可以增量训练一次用最近一个月数据微调但注意每次训练前把随机种子固定否则同一份数据两次训练出的模型可能差异很大那说明模型本身不稳定不适合实盘。4.3 从预测概率到交易信号别让模型直接下单模型输出的是两路logits经softmax变成概率。如果概率0.55以上就开多0.45以下开空信号会非常频繁手续费就能把利润打光。我的经验是加三层滤网阈值带、连续一致性、最小持仓时间。def signal_from_probs(probs, up0.60, down0.40): if probs up: return 1 if probs down: return -1 return 0 def filtered_signal(probs_list, lookback3): last probs_list[-lookback:] if len(set(last)) 1 and last[0] 0.60: return 1 if len(set(last)) 1 and last[0] 0.40: return -1 return 0逻辑说明probs是softmax输出的上涨概率up和down构成死区避免抖动lookback3要求连续三根K线预测方向一致才触发信号。程序化交易里信号质量比信号数量重要得多宁可一周只开两次仓好过天天在震荡里亏损。模型预测概率长期在0.5附近徘徊是正常状态说明当前行情没有明显方向性这时最好的操作就是空仓等待而不是强行开仓。这套“概率-阈值-持仓时间”的三层结构同样适用于其他品种只需把 up/down 阈值和 lookback 参数按品种波动率调整波动大的品种阈值往上提波动小的品种阈值往下放。5. 实盘与模拟盘的排查清单我踩过的五个坑5.1 编译与连接阶段三个高频坑第一次跑通这套系统我至少踩了五个坑按阶段排下来编译与连接占三个。第一条编译成功后 import vnctptd 报“DLL load failed”或直接内存访问错误。现象是Python进程闪退甚至没有任何报错信息。原因是Python位数和编译时不一致或者缺少CTP官方依赖dll。解决确认Python是32位还是64位重新用对应环境编译一次同时把 thosttraderapi_se.dll 和 thostmduserapi_se.dll 复制到 pyd 同目录。第二条连SimNow时提示“登录失败”或连接超时。现象是用户名密码都正确但就是连不上反复重试结果一样。原因多半是SimNow账号密码需要在小程序里重置或前置地址已经更换。解决去SimNow官网确认最新前置地址tdAddress和mdAddress都填上不要只填交易前置。登录失败时建议先看一眼日志里返回的CTP错误码两位数错误码比看网络状态靠谱得多。第三条订阅 rb9999 时日志报“不支持的合约代码”换 rb2610 又能收到行情。现象是特定合约代码订阅失败其他代码正常。原因是contract表里的合约列表滞后数据库里实际不存在这个连续合约代码。解决先查数据库以contract表内容为准而不是凭经验敲代码。5.2 运行与策略阶段两个容易翻车的地方第四条白天实盘跑空测时行情偶尔出现“断层”K线缺了十几分钟。现象是监控页面上数据断线后又续上深度学习特征计算出现NaN。原因是CTP行情前置流控订阅合约数量过多时被限流。解决把不需要的订阅全部取消设置断线重连和补数据逻辑缺的数据用前一根Bar填充别就地计算。第五条模型预测概率长期徘徊在0.5附近信号一个月开不了几次仓。现象是模型训练曲线很漂亮一到实盘就是停工状态。原因是训练标签用的是未来5分钟收盘价方向未来5分钟的噪声太大模型学到的是噪声而不是规律。解决把预测周期拉长到15或30分钟或者把标签改成“未来M根K线中最高价创新高”这类带路径信息的标签真实交易中更有区分度。这五条坑的完整排查路径我一般整理成一个checklist编译环境一致性、前置地址有效性、合约表数据同步、订阅数量上限、标签定义合理性。每次部署新环境按这个checklist走一遍能省掉大部分调试时间。6. 部署细节与次日检查一台机器上把这套系统跑稳6.1 模拟盘与实盘柜台的差异核对SimNow和真实柜台接口一致但有几个差异要提前确认。模拟盘没有真实手续费和滑点信号过滤参数要留余量我一般把模拟盘回测的收益预期打八折再看是否值得上实盘。实盘的行情前置通常和交易前置不在同一网段实盘账号需要在期货公司官网的开放接口文档中查地址不能照搬模拟盘的端口。实盘首次登录前申请一下生产环境的权限再按期货公司的白名单要求加IP这些配置散落在各个文档里最容易漏。6.2 进程守护、日志与次日检查习惯整套系统用一个Python进程跑MainEngine我习惯用计划任务或supervisor做进程守护崩溃后30秒自动拉起。日志输出到文件而不是控制台每天做一次行情完整度检查统计前一日应收到与实收Tick数量偏差超过5%就要查为什么丢数据。检查SQL长这样select count(*) from dbtick where date(datetime) 2025-01-15;说明这条SQL统计某一天落库的Tick总数。交易时间按一天约4小时Tick频率计算正常数量应在几十万级如果明显偏少优先检查断线重连配置和数据库写入队列是否堆积。次日开盘前再核对一下持仓和委托状态防止昨天遗留的未平仓单影响今天的手数计算。从那以后我每次部署新环境都强制走一遍同样流程恢复ContractData → 编译vnctptd → SimNow跑通订阅 → 回测过拟合检验 → 仿真盘跑满一个交易日 → 再切实盘检查清单随手记在配置文件夹里每次换机器至少省半天。这套系统最值钱的部分其实就是把底层这些不起眼的文件拼成了一条能落地的数据管线模型反而是其中最好替换的一环。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SpringBoot与Android电子书阅读系统全栈项目实战解析

SpringBoot与Android电子书阅读系统全栈项目实战解析

如果你的简历上还缺一个能拿得出手的Java全栈项目,这套基于Java SpringBoot和Android的电子书阅读系统,是一个值得花两周时间认真啃下来的选择。它不是一个PPT项目,而是包含了Android客户端、SpringBoot后端、MySQL数据库的完整可运行系统&am…

2026/10/9 8:00:27 阅读更多 →
image 组件用法

image 组件用法

一、image 组件基础image 是小程序的图片组件,负责把一张图片按指定方式显示在页面里。它支持 JPG、PNG、SVG、WEBP、GIF 等格式,从基础库 2.3.0 起也支持直接使用云文件 ID。它的用法非常简单,只有一个必须关心的属性 src 和一个真正决定效果…

2026/10/9 8:00:27 阅读更多 →
基于3893张图像的手套与徒手检测:YOLO训练调参及产线落地实战

基于3893张图像的手套与徒手检测:YOLO训练调参及产线落地实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:51:00 阅读更多 →

最新新闻

如何选择论文降重工具 认准合规适配核心标准

如何选择论文降重工具 认准合规适配核心标准

不少毕业论文返修、期刊投稿退稿的案例中,重复率不达标是最常见的原因。近年学术审核标准持续升级,不仅重复率要求不断收紧,多数院校和期刊还新增了AI生成内容筛查环节,双重检测的压力让很多写作者犯难。自己手动降重不仅耗时耗力…

2026/10/10 12:16:53 阅读更多 →
大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南

大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南

一、问题的起点:一份“数据质量报告”背后的法律地雷 数据集供应商从互联网各处收集了监管指南、行业白皮书和公开合规框架,但没有验证其中任何一份的许可权利。 这看似是一个数据质量问题,实际上是一颗法律地雷:每一个出现在训…

2026/10/10 12:16:53 阅读更多 →
梯度下降与反向传播算法:NYU-DLSP20 第二周课程笔记的数学原理与 PyTorch 实现

梯度下降与反向传播算法:NYU-DLSP20 第二周课程笔记的数学原理与 PyTorch 实现

示例工程 【免费下载链接】NYU-DLSP20 NYU Deep Learning Spring 2020 项目地址: https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning 点击查看 免费下载 本文基于 NYU-DLSP20(NYU Deep Learning Spring 2020)课程第二周第一节讲义&…

2026/10/10 12:16:53 阅读更多 →
个人技能数据基础设施:构建可验证、可衰减、可进化的技能事件流系统

个人技能数据基础设施:构建可验证、可衰减、可进化的技能事件流系统

1. 项目概述:当“skills”不再只是简历上的单词,而成为可验证、可组合、可进化的个人能力操作系统“skills”这个词最近在技术社区、职业发展平台和教育产品后台的搜索日志里,出现频率陡增——但它早已不是求职简历末尾那行加粗的“Technical…

2026/10/10 12:16:53 阅读更多 →
262K 长上下文实测:把整本书喂给 Yandex 新模型,它记住了多少

262K 长上下文实测:把整本书喂给 Yandex 新模型,它记住了多少

262K 长上下文实测:把整本书喂给 Yandex 新模型,它记住了多少 【免费下载链接】AliceAI-Foundation-80B-A3B-Base 项目地址: https://ai.gitcode.com/hf_mirrors/yandex/AliceAI-Foundation-80B-A3B-Base "上下文 262K"在参数表里只是…

2026/10/10 12:16:53 阅读更多 →
把几百 MB 的三维模型,变成对方点开就能看的一个网页

把几百 MB 的三维模型,变成对方点开就能看的一个网页

内测免费不用注册模型不上传断网也能用中文界面 把几百 MB 的三维模型, 变成对方点开就能看的一个网页 导入 .glb 模型 → 导出一个网页文件 → 把这个文件发给客户。 客户不用装 UG / SolidWorks / 任何三维软件,手机、平板、电脑有浏览器就能打开&am…

2026/10/10 12:15:52 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →