Python量化投资避坑指南:数据清洗、回测与样本外验证实战
简介Python股票量化投资课程配套课件包面向希望用编程方式构建量化交易体系的初学与进阶学员覆盖Python语法、数据分析、行情获取、技术指标、策略回测、自动交易与资金管理等模块。压缩包共收录142个文件其中以85个Python源码、21个字节码文件、12个项目配置文件、9个股票行情数据集为主体附有说明文档、参数文件和版本管理配置源码对应各章节可直接运行的示例行情数据用于本地策略练习整体体积56.91MB目录结构清晰便于按模块检索对照学习。已有2393人学习下载适合从零搭建个人量化研究环境的读者。借助沪深股票真实数据可连贯走完数据清洗、因子计算、策略编写、回测评估到模拟下单的完整流程获得从理论到工程落地的实战体验。1. 为什么说Python量化入门的第一道坎是数据与回测而不是买卖点这份Python股票量化投资课程的配套课件包不少人下载后第一反应是翻PPT找“稳赚因子”但真按课程复现时才发现数据清洗和回测环境才是最大的坑。我见过太多新手拿到策略代码跑出年化80%的完美净值曲线最后核对时发现要么用了未来数据要么复权没对齐。这套课件真正有用的地方是它把从原始行情到回测报告的完整链路拆开了让你知道每一步在算什么、为什么这么算。适合有Python基础、想认真把量化交易落地而不是只看看概念的从业者。如果还没被“回测收益率造假”毒打过这正好是你需要的第一份实战教材。2. 量化流水线数据层、因子层、回测层怎么搭才不返工2.1 数据层日线复权、交易对齐与缺失值处理量化项目里最先返工的基本都在数据层。常见误区是拿到接口导出的CSV直接算收益完全不看复权方式。我用这套课件配套数据时发现里面提供的是原始价格和复权因子需要自己拼起来。这里先明确一个概念不复权价格受分红、送股影响除权当天价格会突然下跌直接算收益率会出现假跳变前复权调整历史价格后复权保持历史价格不变但最新价不是真实价格。实际回测中我推荐用后复权价格因为历史价格不会被未来分红事件“修改”计算信号时也稳定。import pandas as pd import numpy as np # 假设日线CSV字段date, open, high, low, close, volume, adj_factor df pd.read_csv(stock_daily.csv, parse_dates[date]) df df.sort_values(date).set_index(date) # 计算后复权收盘价 df[adjusted_close] df[close] * df[adj_factor] # 用交易日历对齐缺失日期 calendar pd.date_range(2020-01-01, 2023-12-31, freqB) df df.reindex(calendar) # 停牌日顺延价格但保留标记方便回测时禁止交易 df[is_trading] df[close].notna() df[adjusted_close] df[adjusted_close].ffill() df[adjusted_close] df[adjusted_close].fillna(0.0)这里freqB代表工作日ffill()用上一交易日价格填充停牌日is_trading列在回测撮合时用于判断当天能不能成交。注意后复权价格在除权日依然连续但早于上市日的位置会填成0回测时要保证不买入上市前数据否则收益率会出现极端值。2.2 因子层用向量化计算代替循环截面标准化要趁早因子计算最容易踩的坑是循环遍历每只股票代码慢到怀疑人生。正确做法是构建成面板数据然后利用pandas的shift、rolling一次性算完。以动量因子为例20日动量等于当前价除以20日前价格再减1全部证券按日期对齐后一条向量化语句就能搞定。# 假设panel为一个DataFrame行是日期列是股票代码值都是后复权收盘价 panel pd.read_csv(price_panel.csv, index_col0, parse_datesTrue) # 20日动量因子 factor_20d panel / panel.shift(20) - 1 # 截面标准化每个交易日对所有股票因子值做z-score def cross_sectional_zscore(factor_df): mean factor_df.mean(axis1) std factor_df.std(axis1, ddof0) return factor_df.sub(mean, axis0).div(std, axis0) factor_zscore cross_sectional_zscore(factor_20d)shift(20)在面板上表示每列取20天前的值自动对齐日期。截面标准化返回的是一张同样形状的表每一行都服从近似均值为0、方差为1的分布后面多因子等权合成时不同量纲的因子不会互相压制。这个操作必须在入库阶段做而不是在拿到最终因子表之后才想起来。2.3 回测层先手写循环理解撮合逻辑再谈框架很多人喜欢直接套用什么神奇回测引擎结果遇到奇怪结果根本不知道哪里错。我一般建议先用50行代码写一个最朴素的回测把撮合逻辑刻在脑子里再上成熟框架。所谓回测本质上就是“信号产生后按什么价格、什么时间成交扣掉成本后资产如何变化”。最容易犯的未来函数错误就是当日收盘算信号、当日收盘就成交偷看了未来的价格。# 一个最简回测循环的骨架 daily_returns panel.pct_change().mean(axis1) # 等权组合收益仅为示例 signals factor_zscore 0 # 因子大于0买入持有 position signals.shift(1) # 今天产生信号明天才建仓 position position.fillna(0).astype(int) # 策略日收益 持仓 * 市场日收益 - 交易成本 strategy_return position * daily_returns trade_times position.diff().abs() strategy_return strategy_return - trade_times * 0.001 # 单边千一成本 nav (1 strategy_return.fillna(0)).cumprod()这里的灵魂是shift(1)它强制让信号晚一天执行彻底避免前视偏差。trade_times * 0.001是把换手惩罚折算到收益里因为每次买卖都会产生佣金和滑点。等你跑通这个骨架再去理解主流的回测库就是举一反三的事那些库无非是把撮合引擎、成本模型、订单管理做得更完善。3. 复现一个单因子回测从数据清洗到收益评价3.1 多股票数据合并先做面板再做因子课件里通常会给出一个股票池的日线数据集合第一步是把散落的单票CSV合并成统一的面板。我的做法是先用pandas.concat把所有表堆叠再透视成“日期 x 股票代码”的矩阵。注意索引必须是时间类型列名规范成统一日期格式否则后面日线对齐会错位。import glob file_list glob.glob(daily_data/*.csv) frame_list [] for f in file_list: one_df pd.read_csv(f, parse_dates[date]) one_df[code] f.split(/)[-1][:6] frame_list.append(one_df) raw pd.concat(frame_list, ignore_indexTrue) price raw.pivot_table(indexdate, columnscode, valuesadjusted_close)pivot_table会把重复的“日期-股票”取其均值遇到同一股票同一天多条记录时不会报错但你要检查是否真有重复。这一步处理完price的行数等于交易日数列数等于股票池数量空缺位置用NaN表示停牌或未上市。接下来所有因子计算都在这个面板上做速度极快。3.2 动量因子分层回测看收益率是否随因子值单调递增单因子有没有效最直接的做法是按每日因子值大小分成5层每层等权买入看看最高层的年化收益是否显著高于最低层。这个过程也叫分层回测它能直观告诉你因子排序能力。遇到因子值大量空缺时要先把空值过滤掉再分组。def layer_backtest(factor_df, price_df, layers5): layer_nav {} # 逐日计算收益 daily_ret price_df.pct_change().shift(-1) # 明天收益 for day in factor_df.index: factor_today factor_df.loc[day].dropna() if len(factor_today) layers * 10: continue ranks pd.qcut(factor_today, layers, labelsFalse, duplicatesdrop) for layer in range(layers): stocks ranks[ranks layer].index if len(stocks) 0: continue future_ret daily_ret.loc[day, stocks].mean() # 累加收益稍后合成净值 return layer_nav这里有个关键设计daily_ret price_df.pct_change().shift(-1)表示当天用的因子值对应当天收盘价之后的“未来收益”但在分层时我们是在当天收盘后分组实际持有从明天开始。严格的回测应该再平移一天否则在半小时级数据里就是未来函数。为了演示简洁我用shift(-1)模拟次日收益但真正落库时建议把信号生成日、成交日明确分开。3.3 绩效指标年化、夏普、最大回撤别只看一种回测结果不能只贴一条漂亮净值曲线至少要看年化收益、夏普比率、最大回撤、胜率四个维度。很多时候某策略年化高但夏普只有0.3最大回撤超过40%这种策略实盘根本拿不住。我通常写一个统一的绩效评估函数对任何净值序列都能输出同一套指标。def evaluate_nav(nav, risk_free0.03, periods252): returns nav.pct_change().dropna() if len(returns) 0: return {} total_days len(returns) ann_ret (nav.iloc[-1]) ** (periods / total_days) - 1 ex_return returns.mean() * periods - risk_free vol returns.std() * (periods ** 0.5) sharpe ex_return / vol if vol 0 else 0 running_max nav.cummax() max_drawdown (nav / running_max - 1).min() win_rate (returns 0).sum() / len(returns) return { annual_return: round(ann_ret, 4), sharpe: round(sharpe, 4), max_drawdown: round(max_drawdown, 4), win_rate: round(win_rate, 4) }ann_ret用最终净值开根号转换成年化注意如果不带入分红和复利的复利效应可能高估。vol为零时夏普直接置0避免除零。max_drawdown计算的是从历史高点回撤的最大幅度用负数表示数值越小说明风险越大。建议先跑出这组数再去调参数而不是只看净值图。4. 参数与风险控制避免过拟合加约束才是真功夫4.1 参数扫描的边界和步长网格搜索也容易失真单因子回测里常见的参数是动量窗口期比如用20天、30天还是60天。一旦开始扫描就要面对过拟合。我的习惯是先定参数范围的业务逻辑再定步长。动量窗口至少应该覆盖一个完整的月度周期所以从10天到250天之间扫步长5天已经够用。扫完以后不能只看最高夏普那组要看参数-指标曲线的平滑程度。results [] for window in range(10, 251, 5): factor panel / panel.shift(window) - 1 nav, metric simple_backtest(factor, panel) results.append({window: window, **metric}) # 找出夏普最高的窗口 best max(results, keylambda x: x[sharpe])这个过程中常见的玄学是某几个窗口表现特别好周围却很平庸。这说明参数被噪声主导实盘换到另一只股票池就可能失效。我会额外加一条规则取夏普前10%的参数组看它们的平均回撤是否还能控制在20%以内。如果只有峰值参数合格宁可不做。4.2 风险约束行业中性化、市值中性化、换手率惩罚很多量化新手以为因子有效就是按因子值从大到小买完全不考虑组合的风格暴露。比如你算出的动量因子可能在某一时期重仓了小盘股小盘股当年暴涨策略收益好但这不是因子的功劳而是风格beta。所以更稳健的因子检验要做中性化处理具体常见做法如下约束方式做法目的行业中性化在行业内分组选股行业市值配比避免押注单一行业市值中性化对市值做回归取残差或按市值分层后再打分剥离小市值暴露换手率惩罚收益中扣除调仓成本防止高频假收益下面一行代码演示如何在组合收益中加换手率惩罚这也是策略层常用的约束。调仓越频繁扣掉的钱越多逼迫模型少做无意义交易。# 假设position是每日持仓表1表示持有 turnover position.diff().abs().fillna(position.abs()) penalty_cost turnover * 0.0015 # 双边成本假设万15 net_strategy_ret raw_strategy_ret - penalty_cost这里position.diff()计算相邻两天持仓变化加绝对值得出调仓比例。成本参数对于日频策略尤其敏感大于0.2%的成本会让高频换手的策略直接亏损你在课件里复现时一定要用自己账户的真实佣金去替换。4.3 样本外验证扩展窗口比随机交叉验证更符合时间序列机器学习里常用的train_test_split随机拆分在时间序列里不可用因为未来数据不能参与训练。我处理这类策略时会用扩展窗口法先用前两年的数据选参数然后在第三年验证一遍再把前三年的数据去选参数验证第四年。这样保证每一步都只用过去的信息不会被未来偷看。panel_years panel.index.year results_oos [] test_start panel.index[0] pd.DateOffset(years2) while test_start panel.index[-1]: train panel[panel.index test_start] test panel[(panel.index test_start) (panel.index test_start pd.DateOffset(years1))] best_window scan_best_window(train) # 在训练段找最优参数 factor_test test / test.shift(best_window) - 1 nav_test, metric_test simple_backtest(factor_test, test) results_oos.append({test_year: test_start.year, **metric_test}) test_start pd.DateOffset(years1)窗口每次向后推1年但训练数据一直在变长这就是“扩展窗口”而非“固定滑窗”。我发现很多课件给的策略只做了样本内扫描没做样本外验证所以你复现时一定要补这一步。如果样本外结果只有样本内的三分之一这个策略基本不能实盘只能当教学案例。5. 量化避坑指南五个常见错误与排查方法5.1 前视偏差回测收益都是幻觉现象策略在历史数据上年化80%最大回撤不到5%实盘却连续亏损。原因信号和成交用了同一根K线的收盘价等于知道当天收盘结果再交易。最常见的是用close价格算因子同时用同一根K线的close成交。解决所有信号在成交之前至少平移一个周期。日频回测里用position signal.shift(1)保证今天收盘产生的信号最早明天开盘成交。更高要求是检验信号生成时用到的最高价、最低价有没有被用于成交价防止盘中偷看。5.2 复权数据没对齐信号和价格错位现象净值曲线在每年分红季出现莫名其妙断层夏普计算严重失真。原因价格使用的是不复权数据除息除权当天价格向下跳空被策略误判为下跌信号触发错误买卖。解决开头就统一用后复权价格走完整条流水线。如果课件数据里给了adj_factor必须把原始价格乘上复权因子后再计算收益率。注意信号计算和收益计算必须用同一套价格混用前复权和后复权也会产生错位。5.3 停牌日卖出单一直挂着撮合逻辑没写现象回测持仓里出现某停牌股票卖出成功但对照行情数据该股票当天根本没有交易。原因回测代码直接按“昨日持仓”和“今日信号”撮合没有检查该股票当天是否停牌导致停牌期完成买卖。解决给每股行情增加volume字段撮合前检查当日成交量是否大于0或使用前面提到的is_trading标记。停牌期间强制保持持仓价格延续上一交易日但成交标志置为不可交易。否则回测会给你一个永远卖在停牌价前的神仙策略。5.4 手续费滑点设太低高频换手策略翻车现象策略调仓周期短回测年化40%扣掉实际成本只剩5%。原因只设了单边万分之二的手续费忽略印花税、滑点、冲击成本。A股卖出有千一印花税小盘股买卖价差和冲击成本常超过千二。解决把成本模型做成参数单边买入成本不低于0.1%卖出成本不低于0.2%并加在每次换仓当日。可以写一个成本表达式buy_cost0.001, sell_cost0.002然后扫描上下浮动50%观察策略是否依然盈利。如果成本翻倍后收益归零这个策略不具备实盘价值。5.5 多因子合并时未标准化权重失效现象把估值因子和动量因子等权混合后新因子完全被估值因子主导动量因子作用消失。原因两个因子的数值量纲差几个数量级比如市盈率是20倍动量是0.01直接相加等于没用第二项。解决每次合成前对每个因子做该日的截面排序或z-score让所有因子处于同一口径。我常用的做法是rank后再归一化到0到1然后等权相加。这样即使某个因子极端值也能被压缩不会因为离群值带偏组合分数。6. 进阶用独立样本外验证把策略从“好看”变成“敢用”6.1 冻结最后一段数据做最终大考前面讲的扩展窗口验证属于滚动验证但日常最该养成的习惯是拿到新策略后先冻结最近20%的行情数据绝不用它做任何参数调试。从头到尾只用前80%的数据调整参数整个验证过程完毕后再把保留的那段数据拿出来跑一次。如果这次跑出的收益、回撤和前80%的样本结果差不太多才敢考虑模拟盘。split_idx int(len(panel) * 0.8) train_panel panel.iloc[:split_idx] test_panel panel.iloc[split_idx:] # 只在train_panel上做参数扫描和选择 best_param scan_best_window(train_panel) # 最后用test_panel做一次性验证 final_ret, final_nav simple_backtest(test_panel, parambest_param) print(final_ret, final_nav)这一步我称之为“留底牌”。它不需要多复杂却能挡住大部分过拟合策略。历史数据很长后这种方法比简单的滚动窗口更接近实盘决策流程因为你在调参时真的不知道最后那20%行情长什么样。6.2 我的实盘前验证清单除了独立样本外我每次在策略上模拟盘前都会走一遍下面这张清单检查项具体标准通过条件数据对账全部复权价格与原始行情抽查最近10个交易日误差低于0.1%信号对齐最终信号比因子计算晚一天无同时刻偷看成本压力买入成本0.1%卖出成本0.2%滑点各加0.1%收益仍为正极端行情找出历史最大回撤区间单独跑一次策略回撤不超样本外回撤的1.3倍流动性检查持仓股票近20日平均成交额高于500万全部满足样本外过滤保留策略末尾20%数据仅验证一次收益率不低于样本内的一半从那以后我每次拿到新策略都会强制走一遍“冻结样本成本压力测试”这套流程不再因为回测图好看就上头。很多同事夸我避坑速度快其实只是把最容易翻车的地方提前用约束挡住了。希望帮到你少走几步弯路。本文还有配套的精品资源点击获取

相关新闻

20+常用算法模型代码实现:分类、回归、聚类与集成工程手册

20+常用算法模型代码实现:分类、回归、聚类与集成工程手册

简介:这份模型算法大全面向数据分析、机器学习入门与进阶学习者,以及需要快速查阅经典算法实现的高校师生和算法工程师,系统整理了20余种常用算法模型及其代码实现,覆盖从统计建模到神经网络等典型场景,帮助读者在理论…

2026/10/19 6:10:41 阅读更多 →
artcraft:数字生成与手工工艺融合的创作流程

artcraft:数字生成与手工工艺融合的创作流程

artcraft 这个词,是我在一个晚上盯着满屏的噪点图时冒出来的。屏幕里是算法刚刚生成的一堆“海浪纹理”,桌角是一块刨好的椴木板,两边分明是两个世界,但我隐约觉得它们应该能变成同一样东西。后来这个项目做的所有事,就…

2026/10/19 6:09:41 阅读更多 →
Vue 3 核心原理详解:响应式、虚拟DOM与编译优化

Vue 3 核心原理详解:响应式、虚拟DOM与编译优化

1. Vue 3 到底改了什么:从设计目标倒推原理1.1 为什么是重写而不是小修小补很多朋友第一次接触 Vue 3 时,第一反应是“Vue 2 我还没学明白呢,怎么又开始改”。真去源码里看一圈之后,会发现 Vue 3 不是 Vue 2 的复制粘贴&#xff0…

2026/10/19 6:09:41 阅读更多 →

最新新闻

AI原生开发平台架构规划与落地实操指南

AI原生开发平台架构规划与落地实操指南

做技术交流的时候,被问得最多的一个问题,差不多就是标题这句:AI原生开发平台到底是什么、架构怎么规划、怎么落地。说实话,每次回答完我都觉得还有话没说完,因为这三个问题其实是层层递进的——概念不清就谈不上规划&a…

2026/10/19 7:38:21 阅读更多 →
diagram-design:从草图到可维护图示系统的设计方法论

diagram-design:从草图到可维护图示系统的设计方法论

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次听到“diagram-design”这个词,很多人会以为它只是“画图工具”的另一个说法。但真正在项目里摸爬滚打过的人都知道,图这件事从来不是“画出来”那么简单。它背后牵扯的是信…

2026/10/19 7:38:21 阅读更多 →
MCP 三种传输方式全解析:stdio、SSE、Streamable HTTP 选型实战

MCP 三种传输方式全解析:stdio、SSE、Streamable HTTP 选型实战

聊 MCP 的三种传输方式之前,先承认一件事:大多数人在看 MCP 文档的时候,最容易卡住的就是传输层这一节。stdio、SSE、Streamable HTTP 三个词单独拎出来都认识,合在一起却不知道它们为什么同时存在、各自解决什么问题。这不怪你&a…

2026/10/19 7:38:21 阅读更多 →
AI论文降重指令实战:6类提示词破解查重与AIGC检测

AI论文降重指令实战:6类提示词破解查重与AIGC检测

2025年的毕业季明显比前几年多了一道坎:不只是查重率,还多了AI检测。我身边好几个准备答辩的朋友,论文初稿写得很顺,结果一查重,标红一片;好不容易把重复率压下来了,送审前又被提醒“部分段落机…

2026/10/19 7:38:21 阅读更多 →
rea模块开发指南:从命名解析到高复用架构设计与性能优化

rea模块开发指南:从命名解析到高复用架构设计与性能优化

1. 从“rea”这个标题说起:一个被低估的通用缩写第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率又是一个被缩写玩坏了的项目名。在技术圈混久了你会发现,越是短到只有三个字母的标题,背后藏的东西往往越…

2026/10/19 7:38:21 阅读更多 →
diagram-design:从设计令牌到语义化图表的系统化设计方法

diagram-design:从设计令牌到语义化图表的系统化设计方法

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次听到 “diagram-design” 这个词,很多人会以为它只是“画图工具”的另一个说法。但真正在项目里被图表折磨过的人知道,问题从来不是“画不出来”,而是“画得乱、…

2026/10/19 7:37:20 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54: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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →