PyTorch LSTM股票价格预测与量化回测框架实战指南
简介《量化交易策略开发基于PyTorch的LSTM股票价格预测与回测框架》是一份面向量化交易初学者与深度学习开发者的技术文档围绕“数据—建模—预测—回测—评估”完整链路展开帮助读者掌握用PyTorch实现LSTM股票价格预测与策略回测的方法。文档共53页清晰规划了量化交易与LSTM基础、数据获取与预处理、模型设计、训练优化、价格预测、回测框架搭建及策略评估改进等模块各章节支持目录跳转便于按需查阅。PDF文件1个压缩包仅2.33MB轻量易下载。目前已有196人学习使用适合正在选型深度学习框架或计划构建量化交易原型的人群。通过这份资源读者可系统了解PyTorch动态图特性、LSTM时间序列建模流程、特征工程与数据划分要点并参考其回测框架设计与绩效指标计算方法为自己的量化实验提供可落地的实现思路。1. 从 PyTorch 到 LSTM为什么这份框架适合做量化策略开发的第一步如果你的目标是搭一套能跑的 LSTM 股票价格预测加回测框架而不是把时间耗在选框架和排环境上这份以 PyTorch 为核心的量化交易策略开发文档几乎把你需要踩的坑提前标好了。它从量化交易基础概念讲起把数据获取、数据清洗、特征工程、LSTM 模型构建、训练优化、股票价格预测、回测与策略评估的完整链路串在一起每个环节都给了可改用的 PyTorch 和 pandas 代码。适合两类人一类是刚入门量化、想在本地跑通一个价格预测深度模型的开发者另一类是已经写过简单策略、但没系统做过回测验证的程序员。它不涉及复杂投研模型但足够让你把从行情到策略的闭环跑起来。2. 数据获取与预处理Tushare 取数、缺失值清洗与特征缩放的实操参数2.1 数据源选型API 接口、爬虫与数据库下载怎么选拿到文档先别急着搭模型数据这关不处理好后面模型再漂亮也是空转。文档里列了三种数据获取路线金融数据提供商的 API、网页爬虫、数据库下载。我实际用下来最省事的是 Tushare 这类免费开源接口注册一个 token 就能拉 A 股日线数据Yahoo Finance 的 yfinance 库适合拉美股。它们的差异主要在调用频率限制和数据完整性Tushare 的 pro 接口能做专业级的事但每个接口的权限和积分门槛不一样注册后先看自己能用哪些接口。import tushare as ts import pandas as pd ts.set_token(your_token) pro ts.pro_api() df pro.daily(ts_code000001.SZ, start_date20200101, end_date20210101) df df.sort_values(trade_date).reset_index(dropTrue) print(df.head())这段代码通过 Tushare pro 接口拉取平安银行000001.SZ一年的日线行情包含开高低收、成交量、涨跌幅等字段。sort_values这一步经常有人忘Tushare 返回的数据默认按日期倒序PyTorch 训练时如果直接切窗时间顺序是反的LSTM 学到的规律会变成从后往前推。参数上ts_code是股票代码加交易所后缀start_date和end_date都是YYYYMMDD格式这是 pro 接口与其他免费接口最大的区别。如果拉的是美股或者想换一种数据验证方式用 yfinance 更轻量import yfinance as yf stock yf.Ticker(AAPL) df stock.history(start2020-01-01, end2021-01-01) df df.reset_index() print(df[[Date, Open, High, Low, Close, Volume]].head())yfinance 返回的是带时区的 DatetimeIndexreset_index()之后才能把日期当普通列用。注意它的 Volume 单位是股不是手而且除权除息数据如果不额外设置会和 Tushare 的复权口径对不上。我的建议是A 股用 Tushare美股用 yfinance两者都只拿日线级别数据做策略验证分钟级数据等框架跑通之后再考虑。2.2 数据清洗缺失值、异常值与重复值的处理顺序原始数据基本不能直接用。停牌日期的行可能整行缺失盘中异常波动会产生离群点还有重复的交易日记录。文档里分别讲了缺失值、异常值和重复值的处理但顺序是有讲究的先删重复再处理异常最后补缺失。如果先填充缺失再删重复fillna 会浪费算力如果先删缺失再找异常整行删除会改变样本量的分布。df df.drop_duplicates(subset[trade_date]) for col in [open, high, low, close]: q1 df[col].quantile(0.25) q3 df[col].quantile(0.75) iqr q3 - q1 lower q1 - 1.5 * iqr upper q3 1.5 * iqr df.loc[(df[col] lower) | (df[col] upper), col] df[col].median() df df.sort_values(trade_date).ffill() df df.dropna()这段代码用 IQR 方法识别异常值用中位数替换而不是直接删除原因是股票行情里某一天的极端价格如果删掉前后两根 K 线的 gap 会被拉大反而制造新的噪声。缺失值用ffill()前向填充匹配交易日之间的停牌逻辑停牌期间行情沿用上一个交易日的收盘价较为稳妥。异常值阈值用的是经典的 1.5 倍 IQR对正态分布的数据大约能覆盖 99% 的区间行情数据分布偏厚尾用它不会误杀太多正常波动。2.3 特征工程相关性分析、技术指标与缩放方式选择特征工程这节是文档里容易被略过但实际很值钱的部分。常见做法是先把 OHLCV 五列算出一堆技术指标比如 5 日、20 日均线RSI、MACD然后用相关性把和目标变量无关的特征踢掉。这里有个反复出现的误区把close同时当特征和目标变量用。如果你的目标是预测明天的价格特征里还带着今天的 close模型只需要学会延迟一拍就能拿到接近完美的分数但这是假信号。df[ma5] df[close].rolling(5).mean() df[ma20] df[close].rolling(20).mean() df[ret] df[close].pct_change() df[label] df[close].shift(-1) corr df[[close, ma5, ma20, ret]].corr() print(corr[label].abs().sort_values(ascendingFalse))shift(-1)是把明天的收盘价挪到今天这一行当标签这是时间序列预测的标准对齐方式。预测目标是明天的价格时特征矩阵最后一行的 label 是 NaN训练前要丢预测目标是后天的价格时shift(-2)。相关性绝对值排序是特征筛选的粗筛方法真正的筛选还要看特征之间的共线性两个相关性 0.9 以上的特征保留一个就行否则 LSTM 的输入冗余会让收敛变慢。特征缩放建议优先选标准化而不是归一化。Min-Max 缩放会把数据压到 0 到 1 之间但股票价格是随机游走过程历史最低点不代表未来最低点预测区间超出训练集范围时归一化的数据会直接撞到边界上。标准化用均值和标准差对异常值稍敏感但能保留分布形状。注意拟合 scaler 只能用训练集不能用全量数据这一点在后面的避坑章节会具体展开。2.4 数据划分时间序列切分与随机切分的本质区别文档里强调了训练集、验证集、测试集的划分原则在股票预测这个场景下最大的原则是不能随机打乱。随机打乱等于把未来数据混进训练集模型会在测试集上看到已经见过的行情形态评估结果虚高实盘立刻原形毕露。train_end int(len(df) * 0.7) val_end int(len(df) * 0.85) train df.iloc[:train_end] val df.iloc[train_end:val_end] test df.iloc[val_end:]按时间顺序 70%、15%、15% 切成三段是文档示例的常见划分。验证集用来调参和早停测试集只能碰一次这是底线。很多人会把验证集和测试集混用调参时在测试集上看结果最后模型相当于在测试集上过拟合样本外表现必然缩水。3. 基于 PyTorch 构建 LSTM 模型从 nn.LSTM 到完整训练循环的参数拆解3.1 LSTM 门控机制与 nn.LSTM 核心参数文档用了很大篇幅讲 RNN 为什么会出现梯度消失、LSTM 的门控结构如何解决这个问题。这部分理论不需要死记但要理解输入门、遗忘门、输出门分别干什么。遗忘门决定上一时刻的记忆保留多少输入门决定当前信息写入多少输出门决定记忆读出多少。这三个门控配合一个记忆单元状态让梯度在时间步之间能走得更远这就是 LSTM 处理股票序列长期依赖的核心优势。没有这套门控机制普通 RNN 在序列长度超过几十步时基本学不到东西。用 PyTorch 搭一个 LSTM 层非常简单环境搭好的前提下核心就一行import torch import torch.nn as nn input_size 8 # 输入特征维度 hidden_size 32 # 隐藏状态维度 num_layers 2 # LSTM 层数 lstm nn.LSTM(input_size, hidden_size, num_layers, batch_firstTrue) x torch.randn(64, 20, 8) # (batch_size, seq_len, input_size) out, (h_n, c_n) lstm(x) print(out.shape) # (64, 20, 32) print(h_n.shape) # (2, 64, 32) print(c_n.shape) # (2, 64, 32)batch_firstTrue是最容易踩的坑之一。PyTorch 默认输入格式是(seq_len, batch, input_size)但数据处理时通常先组织 batch设置batch_firstTrue后输入输出都变成(batch, seq_len, hidden_size)直观很多。h_n是所有层在所有时间步结束后的最终隐藏状态形状(num_layers, batch, hidden_size)out是每一个时间步的隐藏状态取out[:, -1, :]就是最后一个时间步的隐藏状态也就是 LSTM 对整段序列的总结。3.2 完整模型结构从 LSTM 层到全连接输出层价格预测任务的输出是一个连续值模型结构通常是 LSTM 堆叠后接一个全连接层做回归。文档的设计比较标准两层 LSTM 之后取最后一个时间步的隐藏状态过一层线性层把 hidden_size 映射到 1得到预测价格。两层 LSTM 比单层表达能力更强也能捕捉更长的时间跨度但超过三层之后收益递减训练难度增加在日线级别的价格预测中没必要堆太深。调 hidden_size 这件事多少有点玄学我一般从 32 起步验证集效果不行再加到 64翻倍试不逐个遍历。class LSTMPredictor(nn.Module): def __init__(self, input_size8, hidden_size32, num_layers2, dropout0.2): super().__init__() self.lstm nn.LSTM(input_size, hidden_size, num_layers, batch_firstTrue, dropoutdropout) self.fc nn.Linear(hidden_size, 1) def forward(self, x): out, _ self.lstm(x) last out[:, -1, :] return self.fc(last).squeeze(-1)dropout0.2写在nn.LSTM里时只在层数大于 1 时生效作用于层与层之间的输出不会影响最后一层的输出这个细节新手经常看文档看漏。全连接层只接最后一个时间步而不是把所有时间步的输出都接进去原因在于我们把整个窗口的信息压缩到了最后一步的隐藏状态里再接多层全连接反而容易过拟合。squeeze(-1)把输出维度从(batch, 1)压成(batch,)方便和标签直接算 MSE 损失。3.3 数据加载器窗口切分与 Dataset 封装模型输入是固定长度的历史窗口窗口长度是一个超参数。文档案例里常见的是用过去 20 个交易日预测下一个交易日这个长度对应大约一个自然月的交易数据能覆盖短周期趋势。窗口太长会把噪声也学进去太短则捕捉不到趋势。我习惯先定 20再用验证集对比 10 和 30 的效果而不是一上来就调别的。from torch.utils.data import Dataset, DataLoader class StockDataset(Dataset): def __init__(self, df, window_size20): self.data df.values.astype(float32) self.window_size window_size def __len__(self): return len(self.data) - self.window_size def __getitem__(self, idx): x self.data[idx: idx self.window_size] y self.data[idx self.window_size] return torch.tensor(x), torch.tensor(y)这个 Dataset 的设计里标签是窗口结束之后的那一行数据而不是单独的某一列。这意味着输入特征和标签都来自同一份 data 矩阵特征工程阶段要把目标列与其他特征一起切进去否则对齐关系会错位。float32转换在 CPU 和 GPU 上都建议做PyTorch 的默认浮点类型是 float32不转换会出现类型不匹配的报错。3.4 训练循环损失函数、优化器、梯度裁剪与早停训练设置里损失函数选 MSE优化器选 Adam是回归任务最稳妥的组合。MSE 对大误差的惩罚比 MAE 重能让模型更关注极端预测但也更容易被异常值带偏所以上一章数据清洗的异常值处理很重要。Adam 的默认学习率 1e-3 在大多数价格预测任务里都能跑通不需要像 SGD 那样手工调动量参数。PyTorch 环境搭建时记得确认 CUDA 版本和 torch 版本配套CPU 版和 GPU 版的安装命令不一样这是新手最容易卡住的地方。model LSTMPredictor() criterion nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr1e-3) for epoch in range(50): model.train() total_loss 0 for x_batch, y_batch in train_loader: optimizer.zero_grad() pred model(x_batch) loss criterion(pred, y_batch) loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0) optimizer.step() total_loss loss.item() print(fepoch {epoch1}, loss {total_loss / len(train_loader):.6f})clip_grad_norm_是 LSTM 训练的关键防护梯度在时间方向上累积很容易出现梯度爆炸把梯度范数截断在 1.0 之后训练稳定很多。这段代码没有体现数据加载器的 shuffle 参数但训练集必须shuffleFalse验证集和测试集也是因为时间序列的顺序本身就是信息。每跑完一个 epoch在验证集上算一次损失验证损失连续 5 个 epoch 不下降就提前停这是文档里早停策略的简单实现。保存模型时记得把验证损失最低的那一轮参数单独存一份而不是存最后一轮。4. 回测框架搭建与策略评估净值曲线、最大回撤与夏普比率的正确算法4.1 策略模块从预测信号到买卖规则模型训练完下一步是把预测结果转成交易信号。文档的策略模块里给了双均线和动量两种常见策略但放在 LSTM 预测的场景下更自然的做法是模型预测明天的价格走势预期上涨就持有预期下跌就空仓。关键是策略不能只看预测方向还要考虑预测置信度否则预测在零附近反复跳动会造成频繁交易手续费会把收益吃光。df[pred] model_predictions df[signal] 0 df.loc[df[pred] 0.005, signal] 1 df.loc[df[pred] -0.005, signal] 0 df[position] df[signal].shift(1)pred如果直接是模型输出的价格需要先转换成涨跌幅再判断方向直接在原价上设阈值容易受价格绝对值大小影响。这里的 0.005 是 0.5% 的缓冲阈值过滤掉预测接近零的情况。shift(1)是关键一步信号基于今天的预测产生只能作用于明天的交易回测里如果当天信号当天成交就是用未来预测现在净值曲线会异常平滑好看实盘完全做不到。4.2 回测引擎逐日迭代、手续费与滑点一个能用的回测引擎不需要很复杂逐日迭代计算持仓市值的变化即可。文档里交易模块强调定义交易规则和模拟交易我先说结论手续费一定要算滑点至少按一个最小跳价估不然回测收益虚高 10% 到 30% 是常有的事。A 股双边手续费加印花税大概在万分之三到千分之一之间取决于佣金水平。def backtest(df, initial_cash100000, fee_rate0.001): cash initial_cash position 0 equity [] for i in range(1, len(df)): if df[signal].iloc[i] ! df[position].iloc[i]: trade_value position * df[close].iloc[i] if position else cash fee trade_value * fee_rate cash - fee if df[position].iloc[i] 1 and position 0: position cash / df[close].iloc[i] cash 0 elif df[position].iloc[i] 0 and position 0: cash position * df[close].iloc[i] position 0 equity.append(cash position * df[close].iloc[i]) return pd.Series(equity, indexdf.index[1:])这段实现是简化版没有处理一手一百股、涨停跌停无法成交这些细节但对验证策略有效性足够了。position只有 0 和 1 两个状态对应空仓和满仓没有仓位管理。手续费在每次仓位变化时从现金里扣这已经能反映交易成本对收益的侵蚀。回测引擎比模型还容易藏 bug建议先用一组手工计算的简单数据验证逻辑再丢真实行情进去跑。4.3 评估指标最大回撤、夏普比率与年化收益的数值实现文档的核心评估指标是总收益、年化收益、最大回撤、波动率、夏普比率和索提诺比率。最大回撤最容易被误算成「最高点减去最低点」但严格定义是净值曲线从某个峰值回落到后续最低点的最大跌幅要逐个峰值点计算。夏普比率是超额收益除以波动率衡量的是每承受一单位风险换回多少收益。def max_drawdown(equity): peak equity.cummax() drawdown (equity - peak) / peak return drawdown.min() def sharpe_ratio(equity, rf0.02, periods252): ret equity.pct_change().dropna() excess ret - rf / periods return np.sqrt(periods) * excess.mean() / excess.std()cummax()计算历史最高净值与当前净值做差值得到回撤序列取最小值就是最大回撤。夏普比率按年化处理时日收益率序列要乘sqrt(252)这个 252 是 A 股一年的交易日数量美股也是 252。rf是无风险利率默认 0.02 是常见的年化水平日换算时要除以 252不能直接拿日收益率减 0.02。4.4 可视化净值曲线与收益率曲线的绘制文档最后一节是可视化模块回测结果不画图很难一眼看出问题。净值曲线看趋势回撤区域看得更直观有条件的可以叠加策略净值和基准净值的对比。用 matplotlib 画图时注意中文字体配置Windows 默认字体不认中文图表的标题和图例会变成方块需要在代码里指定字体。import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False plt.plot(equity.index, equity, label策略净值) plt.title(净值曲线) plt.legend() plt.show()axes.unicode_minus必须一起设否则坐标轴上的负号会显示成乱码。画图是排查回测逻辑错误最快的方式如果净值曲线在某个日期出现断崖式下跌而且当天没有大新闻大概率是仓位计算 bug 或者除零错误。回测的任何结论都要先看图再下判断。注意Tushare 的 pro 接口有积分权限限制新注册账号可能只开放基础接口。先看文档确认自己账号能调哪些接口再决定数据源不然代码写好了一跑就报权限错误排查半天才发现是账号问题。5. 避坑指南LSTM 预测与回测中常见的五个翻车现场5.1 归一化放错位置导致的数据泄漏现象训练集损失降得很漂亮测试集表现也不算差但一上实盘预测结果完全失真预测曲线长期贴着训练集最后一个价格。原因对全量数据先做 Min-Max 归一化再划分训练集和测试集scaler 已经看过了测试集的价格范围模型在测试集上间接学到了未来的价格分布。这是时间序列预测里最常见的 lookahead 泄漏比特征里包含未来标签更隐蔽。解决先把数据按时间切好再在训练集上fitscaler用同一个 scaler 去transform验证集和测试集。推理时保存 scaler 的参数新数据进来先 transform 再喂给模型不要每次重新训练 scaler。5.2 训练集随机打乱导致的时间序列泄漏现象测试集评估指标好得离谱RMSE 比随机猜测还低几十倍预测曲线形状看起来像平移。原因DataLoader里设了shuffleTrue模型在训练时已经见过了测试区间的行情片段LSTM 记忆的是序列拼接后的内容而不是规律。序列模型的泄漏比纯表格模型更隐蔽因为每条样本是一个窗口窗口内部本来就带着时间顺序。解决shuffle一律设False或者不用内置 shuffle在自定义 Dataset 里只做顺序采样。如果确实想做数据增强式的随机采样也只能在训练集内部随机抽取窗口绝不能跨集合混采。5.3 回测里用了未来数据现象回测净值曲线近乎 45 度角向上最大回撤极低策略信号总是踩在当天收盘价的最高点。原因信号生成时用了当天的收盘价而回测里当天就按收盘价成交。close在收盘那一刻之前是不知道的用盘中数据生成信号再按收盘成交等于把未来的收盘价泄露给了信号。解决信号基于今天的数据交易决策作用于明天开盘代码里至少shift(1)。更严格的做法是用今天收盘后的数据计算信号明天开盘价成交并加上滑点。这个坑在任何一个回测框架里都可能出现不是 LSTM 特有的但新手在自建框架时十有八九会踩。5.4 方向准确率很高但策略不赚钱现象模型预测涨跌的正确率超过 60%但回测净值并没有上行手续费一扣就亏。原因方向准确率没有考虑涨跌幅的分布模型可能在小涨小跌上预测很准在大涨大跌上频频失手。预测涨 0.1% 和涨 5% 的样本都被当成方向正确但前者的胜率贡献不了收益后者的失误一次就吃掉很多利润。LSTM 回归模型倾向于输出靠近均值的预测天然对小波动拟合得好。解决评估时同时看方向准确率和预测误差的分布策略上引入置信度过滤只对预测幅度超过阈值的样本下注。不要只用准确率做模型选型的唯一指标这个指标在价格预测场景里参考价值有限。5.5 早停阈值设太松导致过拟合现象训练集损失持续下降验证集损失先降后升但模型还是训练到了最后一个 epoch测试集表现明显变差。原因早停条件写成了验证损失连续 N 个 epoch 没创新低但 N 设得太大比如 20 或 30模型在过拟合区间又跑了很多轮保存的是最后一轮参数而不是验证损失最低的那一轮。解决保存时要记录验证损失最低的参数训练结束后重新加载这个 checkpoint而不是拿最后一轮的参数去测试。N 一般设置在 5 到 10 之间配合学习率调度器使用时要把早停判断放在学习率下降之后因为降低学习率后验证损失可能继续创新低。6. 进阶用法滚动窗口验证与模型融合判断策略是否真的可靠6.1 滚动窗口验证用 walk-forward 替代一次性划分一次性划分训练、验证、测试只能验证一个时间段的稳定性样本外测试只碰一次结论很容易被偶然性左右。walk-forward 是更贴近实战的方式每轮用过去 N 年的数据训练预测未来 M 个月然后整个窗口前移重复这个过程。每一段的预测都来自一个没有见过该段数据的模型整个过程的合成曲线就是策略在滚动样本外的最真实表现。for start in range(0, len(df) - train_len - test_len, step): train df[start: start train_len] test df[start train_len: start train_len test_len] model train_lstm(train) pred predict(model, test) results.append(pred)step决定了窗口滑动的粒度通常取和test_len一样大保证相邻窗口不重叠。滚动窗口的每个模型参数都不同这是刻意为之它模拟了实盘状态下定期重训模型的工作流。这个方法最耗时的部分在训练多次模型但换来的稳定性判断远比一次性划分有价值。6.2 模型融合简单平均与加权平均如何降低方差单个 LSTM 的预测方差很大换一次随机种子结果就可能不同。文档里提到的模型融合在这里派上用场训练多个结构相同但种子不同的模型对预测结果做平均。简单平均是首选几乎不需要调参如果某些模型在验证集上明显更好可以按验证损失倒数加权。融合后的预测通常比任何单模型都稳定缺点是训练成本成倍增加而且如果多个模型共享同一份错误数据融合只能降低方差不能消除偏差。在实践中我倾向于先把特征和数据修好再考虑融合数据层面的问题不改融合只是在放大错误模式。从那以后我每次把策略从模型预测到回测结果过一遍的时候都会强制要求自己走完三步先检查归一化 scaler 是不是只在训练集上拟合过再检查策略信号有没有shift(1)最后跑一轮 walk-forward 看滚动样本外表现。这三个检查做完模型的结论才敢说经得起检验。LSTM 股票价格预测不是一个看一次测试集 RMSE 就完事的任务整个框架的可靠性建立在每一步都不作弊的基础上。希望这份文档梳理的思路和数据、模型、回测三段的具体做法能帮到你少走我当年走过的弯路。本文还有配套的精品资源点击获取

相关新闻

机器学习+DFT工作流:阻转异构预测的自动化方案

机器学习+DFT工作流:阻转异构预测的自动化方案

1. 阻转异构预测为什么值得单独做一套工作流阻转异构(atropisomerism)是有机化学里一个很特殊的分支。它不像手性中心那样有一个明确的sp3碳原子作为立体中心,而是由于单键旋转受阻,导致分子在空间上出现两种可分离的构象异构体。…

2026/10/13 11:48:05 阅读更多 →
Spring原型模式深度解析:从BeanDefinition克隆到业务代码落地实践

Spring原型模式深度解析:从BeanDefinition克隆到业务代码落地实践

1. 从一个让人头疼的重复代码说起如果你写过一段时间的业务代码,大概率遇到过这样的场景:系统里有一个配置对象,字段有几十个,每次需要一个新的实例时,要么手动一个个 set,要么在构造函数里塞一大串参数。更…

2026/10/13 11:48:09 阅读更多 →
Jonex LLM 网关完全指南:Token Swap、实时 Token 计量与多模型路由实现原理

Jonex LLM 网关完全指南:Token Swap、实时 Token 计量与多模型路由实现原理

【免费下载链接】jonex All-in-One Multimodal Parsing Engine Ontology-Powered, LLM Wiki-Driven AI-Ready Knowledge Engine 项目地址: https://gitcode.com/gh_mirrors/jo/jonex 点击查看 免费下载 Jonex 的 llm-gateway(LLM 网关)是 J…

2026/10/13 11:48:18 阅读更多 →

最新新闻

Python第3章练习题解析:数据类型、字符串与格式化输出避坑指南

Python第3章练习题解析:数据类型、字符串与格式化输出避坑指南

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

2026/10/14 1:07:04 阅读更多 →
ESP32S3 Dev Module:Arduino兼容的原生USB嵌入式开发新范式

ESP32S3 Dev Module:Arduino兼容的原生USB嵌入式开发新范式

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

2026/10/14 1:07:04 阅读更多 →
高位数阶乘计算:MATLAB、Python、C三语言实现与性能对比

高位数阶乘计算:MATLAB、Python、C三语言实现与性能对比

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

2026/10/14 1:07:04 阅读更多 →
element-react Radio 单选框组件详解:受控选中、Group 聚合与 Button 样式的源码级解析

element-react Radio 单选框组件详解:受控选中、Group 聚合与 Button 样式的源码级解析

前端UI组件设计系统 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react 点击查看 免费下载 本篇技术文章围绕 element-react(Element UI for React,当前仓库版本 1.4.34)的 …

2026/10/14 1:07:04 阅读更多 →
密码与加密技术复习指南:从对称加密到PKI的网络安全知识框架

密码与加密技术复习指南:从对称加密到PKI的网络安全知识框架

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

2026/10/14 1:07:04 阅读更多 →
Dart List实战指南:从增删改查到Flutter状态管理踩坑总结

Dart List实战指南:从增删改查到Flutter状态管理踩坑总结

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

2026/10/14 1:06:04 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →