当前位置: 首页 > news >正文

用NeuralProphet预测股价:AI金融新利器(附源码)

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:我用NeuralProphet模型预测了股票价格,发现其通过结合时间序列分析和神经网络算法,确实能提供比传统Last Value方法更精准的预测。经过一系列超参数调优,其预测效果更是显著,如果你也对AI金融股价预测感兴趣,这篇文章会给你带来不少启发。

一、NeuralProphet 概述

在本文中,我们将尝试用 NeuralProphet 来预测股票价格。NeuralProphet 是由 Meta 公司开发的,据说比之前的 Prophet 软件包更强大。在之前的文章中,我们用 Prophet 做过类似的任务,但效果不太理想。这次,我们将看看 NeuralProphet 是否能带来更好的表现。根据 NeuralProphet 官网的介绍:

NeuralProphet - 使用标准深度学习方法融合传统时间序列算法,基于 PyTorch 构建,灵感来自 Facebook Prophet 和 AR-Net。

NeuralProphet 采用可分解的时间序列模型,其模型组件包括趋势、季节性、事件效应和回归效应。它们的组合公式为:

y(t) = T(t) + S(t) + E(t) + F(t) + A(t) + L(t),where T(t) = Trend at time t
S(t) = Seasonal effects at time t
E(t) = Event and holiday effects at time t
F(t) = Regression effects at time t for future-known exogenous variables
A(t) = Auto-regression effects at time t based on past observations
L(t) = Regression effects at time t for lagged observations of exogenous variables

这种可分解的时间序列在预测领域非常常见。在文章的后半部分,我们会详细讲解如何调整上述方程中的各个组成部分,以便更好地优化预测结果。

官网地址如下:NeuralProphet

二、目的

我们的核心任务是利用过去 N 天的历史数据,预测 Vanguard 全市场 ETF(VTI)每日调整后的收盘价。为了实现这一目标,我们使用了 VTI 从 2013 年 1 月 2 日到 2018 年 12 月 28 日共 6 年的历史价格数据。这些数据可以从雅虎财经轻松获取,下载后的数据集结构如下所示。通过这个项目,我们旨在验证 NeuralProphet 模型在股价预测中的表现,并探索其在实际投资分析中的应用潜力。

我们总共有 1509 天的数据可供使用。整个数据集中的调整后收盘价图如下所示:

我们使用以下公式计算每日收益

其中,r(t) 和 p(t) 分别表示第 t 天的日收益率和调整后收盘价。为了观察每日收益的分布情况,我们绘制了下面的分布图:

如上图所示,分布图非常接近高斯分布。为了进一步验证这一点,我们使用 scipy.stats 软件包绘制概率图,如下所示。对于 scipy.stats 中的概率图,默认情况下是将样本分布与高斯分布进行比较。与红色直线的拟合度越高,则与高斯分布的拟合度越高。我们观察到,除了极端值(约 > +/- 2.5)外,每日回报的分布与高斯分布的拟合程度相当高。

为了全面评估 NeuralProphet 的性能,仅仅在单一日期进行一次预测是远远不够的。因此,我们将在数据集中的多个不同日期进行多次预测,并取这些预测结果的平均值作为最终评估依据。在每次预测中,我们都会将 NeuralProphet 方法与 Last Value 方法进行对比,以更客观地衡量 NeuralProphet 的准确性和稳定性。这种方法不仅能减少随机误差的影响,还能更好地反映模型在实际应用中的表现。

为了评估我们方法的有效性,我们将使用均方根误差 (RMSE)、平均绝对百分比误差 (MAPE) 和平均绝对误差 (MAE) 指标。对于所有指标,数值越小,预测效果越好。

三、训练和验证

为了进行预测,我们需要将数据分为训练集和验证集。具体来说,我们将使用 3 年的数据(约 756 天,按每年 252 个交易日计算)作为训练集,并用接下来 1 年的数据(252 天)作为验证集。这意味着每次预测都需要 1,008 天的数据(756 天训练 + 252 天验证)。模型会在训练集上进行训练,而验证集则用于调整超参数。

为了优化超参数,我们采用了移动窗口验证法。举个例子,假设我们总共有 896 天的数据,并希望在第 857 天进行为期 40 天的预测。根据经验,对于预测范围 H,我们通常每隔 H/2 天进行一次预测。通过 756 天的训练集,我们可以进行 4 次验证(如下图所示)。我们会计算这 4 次验证的误差指标(如 RMSE、MAPE 等),并取其平均值。最终,选择误差平均值最小的超参数组合作为最佳模型配置。确定最佳超参数后,我们将在第 857 天进行预测并报告结果。这种方法不仅能提高模型的稳定性,还能更准确地评估其在实际应用中的表现。

在下文中,我们将首先对数据集的第 1009 天进行预测,预测期限为 21 天(注意,一个月约有 21 个交易日,不包括周末)。对于 NeuralProphet,我们将使用前 1008 天作为训练集和验证集,如上文所述,按 756:252 的比例分割。我们将在下一节首先解释最后值方法。

四、Last Value

在"Last Value"方法中,预测值直接采用最近一次的观测值。具体到我们的应用场景,就是将当前的调整后收盘价预测为前一天的调整后收盘价。这种方法具有以下特点:

  • 实现简单,计算成本最低。
  • 无需进行任何超参数调整。
  • 常被用作评估更复杂预测模型的基准。

基于该方法,我们对数据集第1009天进行了21天期限的预测。这种朴素预测方法虽然简单,但在某些情况下可能表现出令人惊讶的有效性,特别是在时间序列具有较强持续性的情况下。

上述预测的 RMSE 为 1.89,MAPE 为 1.59%,MAE 为 1.80。

五、运行预测


5.1 无超参数调整的 NeuralProphet

要使用 NeuralProphet 运行预测,请使用下面的代码。

from neuralprophet import NeuralProphet, set_random_seedtrain_size = 252*3                     # Use 3 years of data as train set
val_size = 252                         # Use 1 year of data as validation set
train_val_size = train_size + val_size # Size of train+validation set
i = train_val_size                     # Day to forecast
H = 21                                 # Forecast horizonset_random_seed(random_seed) # Set a random seed for reproducibilitym = NeuralProphet()
m.set_plotting_backend("plotly-static")
metrics = m.fit(df_nprophet[i-train_val_size:i])# Create dataframe with the dates we want to predict
future = m.make_future_dataframe(df_nprophet[i-train_val_size:i], n_historic_predictions=True, periods=H)# Predict
forecast = m.predict(future)

为了快速直观,我们使用 Prophet 绘制预测图:

m.plot(forecast)

这个模型结构较为基础,其初始配置包括趋势项、每周周期性变化以及年度周期性变化。您可以根据以下方式单独查看每个组成部分的内容。

m.plot_components(forecast);

请注意观察就会发现,周季节性曲线图几乎是平的,这意味着 NeuralProphet 无法检测到周内差异。

单个系数的数值也可以绘制成如下图所示,以获得更深入的了解。

m.plot_parameters()

请注意,上面显示的 "季节性:年图 "和 "季节性:周图 "是成分图的一个周期。

在上图的预测中,显示的是股票收益预测。我们可以使用代码将其转换为价格:

# Convert back to price
est_adj_close = []
prev_tg = df.loc[i-1, 'adj_close']
for n in range(H):est_adj_close.append((float(preds_list.iloc[n])/100+1)*prev_tg)prev_tg = (float(preds_list.iloc[n])/100+1)*prev_tg

之后,股票价格的预测结果如下。

上述预测的 RMSE 为 1.60,MAPE 为 1.35%,MAE 为 1.52。

5.2 带有超参数调整功能的 NeuralProphet - Changepoints

时间序列的轨迹通常会发生突变。这种变化点检测的强度可以通过参数 n_changepoints 来调整。增加 n_changepoints 会使趋势更灵活,导致过度拟合。减少 n_changepoints 会降低趋势的灵活性,导致拟合不足。默认情况下,该参数设置为 10。

在偏移量 m 的基础上,再将增长率 k 乘以自起点 t0 起的时间差 (t1-t0),就得到了 t1 时刻的趋势效应。

trend(t1) = m + k(t1 - t0) = trend(t0) + k(t1-t0)

测试 n_变化点的值为 2、5、10、15 和 20。对于 n_changepoints 的每个值,我们使用训练集和验证集进行预测,结果如下:

上述过程共耗时 8 分钟。接下来,我们使用这个值在测试集上运行预测。结果如下所示。

上述预测的 RMSE 为 2.75,MAPE 为 2.35%,MAE 为 2.65。

5.3 带有超参数调整的 NeuralProphet - Monthly Seasonality


每月的季节性可以在 NeuralProphet 中这样设置:

m = NeuralProphet()
m = m.add_seasonality(name="monthly", period=30.5, fourier_order=3)


NeuralProphet 中的季节性是借助傅立叶项来建模的。上述傅立叶阶数指的是用于估计季节性的偏和中的项数。

使用 2、4、6、8 和 10 的傅立叶阶数值进行测试。对于每个傅立叶阶数值,我们使用训练集和验证集进行预测,结果如下:

上述过程总共耗时 8 分钟。接下来,我们使用这个值在测试集上进行预测。结果如下所示。


上述预测的 RMSE 为 2.19,MAPE 为 1.87%,MAE 为 2.12。

5.4 带有超参数调整功能的 NeuralProphet - 活动和假期

在节假日期间,股市的走势可能会受到影响。以“圣诞反弹”现象为例,这是指股市在圣诞节期间通常会出现的上涨趋势。NeuralProphet 在进行市场预测时能够将这些特定事件纳入考量。为此,我们首先需要创建一个事件数据框,如下所示,这一步骤可以通过导入CSV文件轻松完成。

事件可以在 NeuralProphet 中这样设置(events 就是上图所示的数据帧):

m = NeuralProphet()
m.add_events("hols", lower_window=lower_window, upper_window=upper_window)
history_df = m.create_df_with_events(df, holidays)
m.fit(history_df)
future = m.make_future_dataframe(history_df, events_df=events, n_historic_predictions=True, periods=H)
forecast = m.predict(future)

窗口大小超参数将假期扩展到日期周围的 [lower_window, upper_window]天数。为简单起见,假设 lower_window 和 upper_window 的大小相同,即 lower_window = upper_window = 窗口大小。我们将测试窗口大小的值 0、1 和 2。对于每个窗口大小值,我们使用训练集和验证集进行预测,结果如下:

过程共耗时 5 分钟。接下来,我们使用这个值在测试集上进行预测。结果如下所示。

预测的 RMSE 为 2.05,MAPE 为 1.74%,MAE 为 1.96。

5.5 带有超参数调整功能的 NeuralProphet - 自回归

自回归是一种时间序列模型,它使用前一时间步的观测值作为回归方程的输入,以预测下一时间步的值。

NeuralProphet 中的自回归由 n_lags 参数决定。我们将测试 n_lags 的值 0、2、5 和 10。对于每个 n_lags 值,使用训练集和验证集进行预测,结果如下:

上述过程共耗时 7 分钟。接下来,我们使用这个值在测试集上运行我们的预测。结果如下所示。

预测的 RMSE 为 1.18,MAPE 为 0.89%,MAE 为 1.01。

5.6 带有超参数调整功能的 NeuralProphet - 结合所有超参数

下一步将测试超参数的组合,找出最佳的超参数集。以网格搜索方式测试上述每个超参数组合总共需要 5 * 5 * 3 * 4 * 7 分钟 = 35 小时。为了节省时间,参考上述结果,只用以下值进行测试:

n_changepoints_list = [2, 5]
fourier_order_list = [6, 8]
window_list = [1]         
n_lags_list = [0, 2] 

此外,我们还尝试了上述超参数,首先是不带事件超参数的超参数,其次是带事件超参数的超参数。以下是不带事件超参数的结果。

以下是使用事件超参数得出的结果。

从上面可以看出,n_changepoints、fourier_order、window 和 n_lags 的最佳值分别为 2、6、1、2 和使用事件。接下来,我们使用这些值在测试集上运行我们的预测。结果如下所示。

上述预测的 RMSE 为 1.04,MAPE 为 0.81%,MAE 为 0.91。

经过对所有超参数的细致优化,我们在第1009天的预测中,利用NeuralProphet模型取得了卓越的表现。在完成超参数的全面调整后,该模型在RMSE、MAPE和MAE指标上均达到了最低值,超越了包括Last Value基准在内的其他所有预测方法。接下来,我们将探究NeuralProphet模型在其他日期的预测成效。

5.7 多日预测

在审视了上述超参数调整带来的成果之后,我们计划将这种方法扩展应用,以对连续多天进行预测。我们的预测将从数据集的第1009天起步,并以42天为周期进行新一轮预测。鉴于数据集包含1509天的数据,我们将执行共计12轮的预测。每轮预测都将覆盖未来21天的时间范围。同时,对于每一天t的预测,我们都将应用之前确定的最优超参数配置。

从上文中可以明显看出,并非所有的预测结果都是理想的。有些日期的预测方向和幅度与实际值相当接近,然而在其他日期,预测的方向和幅度则与实际值相去甚远。以下展示了每项预测的性能指标结果。

让我们将上述结果与下图所示的 " Last Value "方法进行比较。

NeuralProphet 在12次预测中的平均RMSE为2.15,平均MAPE为1.41%,平均MAE为1.88。相比之下,Last Value方法的平均RMSE为2.53,平均MAPE为1.69%,平均MAE为2.26。在这些指标上,NeuralProphet 显然表现更为优异。这一结果颇为有趣,因为在我的先前实验中,使用的是Prophet而非NeuralProphet,那时Last Value方法的表现更为突出。在这个案例中,NeuralProphet 的贡献不容小觑。

六、观点总结

  • NeuralProphet 在股价预测中表现卓越:文章通过对比 Last Value 方法和 Prophet 模型,证实 NeuralProphet 在预测股价时具有更高的准确性,成为金融分析中的新利器。
  • 超参数调优是提升模型性能的关键:作者通过调整 changepoints、fourier_order、window_size 和 n_lags 等超参数,展示了如何优化模型,从而显著提升预测效果。
  • 事件和假期对股市影响不可忽视:文章强调了节假日和特殊事件对股价波动的重要性,提醒我们在建模时需充分考虑这些因素,以提高预测精度。
  • 自回归显著提升预测准确性:通过引入自回归参数 n_lags,NeuralProphet 能够更好地捕捉时间序列中的动态变化,从而大幅提升预测的可靠性。
  • NeuralProphet 具备高度灵活性和扩展性:作者通过添加事件数据框架和调整季节性参数,展示了 NeuralProphet 如何适应复杂的市场环境,满足多样化的预测需求。
  • 多日预测实验证明 NeuralProphet 的优越性:在多次预测实验中,NeuralProphet 的 RMSE、MAPE 和 MAE 指标均优于 Last Value 方法,展现了其在股价预测领域的巨大潜力。

代码地址:Stocks2025/StockReturnsPrediction_fh21/StockReturnsPrediction_v9_neuralprophet.ipynb at master · alexyu2013/Stocks2025 · GitHub

谢您阅读到最后,希望本文能给您带来新的收获。码字不易,请帮我点赞、分享。祝您投资顺利!如果对文中的内容有任何疑问,请给我留言,必复。


本文内容仅限技术探讨和学习,不构成任何投资建议。

相关文章:

用NeuralProphet预测股价:AI金融新利器(附源码)

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:我用NeuralProphet模型预测了股票价格,发现其通过结合时间序列分析和神经网络算法,确实能提供比传统Last Value方法更精准的预测。经过一系列超参数调优…...

【Elasticsearch】parent aggregation

在Elasticsearch中,Parent Aggregation是一种特殊的单桶聚合,用于选择具有指定类型的父文档,这些类型是通过一个join字段定义的。以下是关于Parent Aggregation的详细介绍: 1.基本概念 Parent Aggregation是一种聚合操作&#x…...

IDEA使用Auto-dev+DeepSeek 10分钟快速集成,让java开发起飞

在当今的软件开发领域,AI 工具的辅助作用愈发凸显,DeepSeek AI 便是其中的佼佼者。它凭借强大的自然语言处理能力和高效的代码生成能力,成为众多开发者的得力助手。而 IntelliJ IDEA 作为一款广受欢迎的集成开发环境(IDE),若能与 DeepSeek AI 无缝集成,无疑将为开发者带…...

ASP.NET Core中间件Markdown转换器

目录 需求 文本编码检测 Markdown→HTML 注意 实现 需求 Markdown是一种文本格式;不被浏览器支持;编写一个在服务器端把Markdown转换为HTML的中间件。我们开发的中间件是构建在ASP.NET Core内置的StaticFiles中间件之上,并且在它之前运…...

使用page assist浏览器插件结合deepseek-r1 7b本地模型

为本地部署的DeepSeek R1 7b模型安装Page Assist,可以按照以下步骤进行: 一、下载并安装Ollama‌ 首先,你需要下载并安装Ollama,这是部署DeepSeek所必需的工具。你可以访问Ollama的官方网站(ollama.com)下…...

【华为OD-E卷 - 108 最大矩阵和 100分(python、java、c++、js、c)】

【华为OD-E卷 - 最大矩阵和 100分(python、java、c、js、c)】 题目 给定一个二维整数矩阵,要在这个矩阵中选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大,我们把这个子矩阵称为和最大子矩阵,子矩阵的…...

【Reading Notes】Favorite Articles from 2025

文章目录 1、January2、February3、March4、April5、May6、June7、July8、August9、September10、October11、November12、December 1、January 极越之后,中国车市只会倒下更多人(2025年01月01日) 在这波枪林弹雨中,合资品牌中最…...

云计算行业分析

云计算作为数字经济的核心基础设施,未来十年将持续重塑全球科技格局,并渗透到几乎所有行业的数字化转型中。 一、云计算的发展潜力 1. 技术融合驱动爆发式创新 AI与云计算的深度耦合 - **智能云服务**:云厂商将提供预训练模型、自动化ML工…...

【Linux系统】线程:线程的优点 / 缺点 / 超线程技术 / 异常 / 用途

1、线程的优点 创建和删除线程代价较小 创建一个新线程的代价要比创建一个新进程小得多,删除代价也小。这种说法主要基于以下几个方面: (1)资源共享 内存空间:每个进程都有自己独立的内存空间,包括代码段…...

3.攻防世界 weak_auth

题目描述提示 是一个登录界面,需要密码登录 进入题目页面如下 弱口令密码爆破 用1 or 1 #试试 提示用admin登录 则尝试 用户名admin密码:123456 直接得到flag 常用弱口令密码(可复制) 用户名 admin admin-- admin or -- admin…...

代码随想录算法训练营| 二叉树总结

代码随想录 二叉树的理论基础:二叉树种类、存储方式、遍历方式、定义方式 二叉树遍历:深度优先和广度优先 二叉树属性:对称、深度、节点、平衡、路径、回溯 修改与构造:反转、构造、合并 涉及到二叉树的构造,无论普…...

Python OCR工具pytesseract识别数字验证码

直接下载地址:https://digi.bib.uni-mannheim.de/tesseract/ 找的最新版本: 我添加了math 跟chinese(因为是国内网络的原因吧,下载都失败,所以不用选择,后面自己下载后,添加到相应目录就好&…...

SpringBoot开发(五)SpringBoot接收请求参数

1. SpringBoot接收请求参数 1.1. 获取参数的方式 (1)通过request对象获取参数   (2)RequestParam(针对请求头方式为x-www-form-ur lencoded)   (3)RequestBody(针对请求头方式为application/json)   …...

文件基础IO

理解"文件" 1-1 狭义理解 文件在磁盘里磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的磁盘是外设(即是输出设备也是输入设备)磁盘上的文件 本质是对文件的所有操作,都是对外设的输入和输出简称IO 1-2 广义理…...

05vue3实战-----配置项目代码规范

05vue3实战-----配置项目代码规范 1.集成editorconfig配置2.使用prettier工具2.1安装prettier2.2配置.prettierrc文件:2.3创建.prettierignore忽略文件2.4VSCode需要安装prettier的插件2.5VSCod中的配置2.6测试prettier是否生效 3.使用ESLint检测3.1VSCode需要安装E…...

八大排序算法细讲

目录 排序 概念 运用 常见排序算法 插入排序 直接插入排序 思想: 步骤(排升序): 代码部分: 时间复杂度: 希尔排序 思路 步骤 gap的取法 代码部分: 时间复杂度: 选择排序 直接选…...

网络爬虫学习:借助DeepSeek完善爬虫软件,增加停止任务功能

一、引言 我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,终于完成了开发一款网络爬虫软件的学习目标。这几天对本次学习及应用开发进行一下回顾总结。前面已经发布了两篇日志: 网络爬虫学习:应用selenium从搜*狐搜…...

docker安装es及分词器ik

系统是macos,docker是docker-desktop 拉取镜像 docker pull bitnami/elasticsearch 启动docker镜像 docker create -e "discovery.typesingle-node" \ --name elasticsearch1 -p 9200:9200 -p 9300:9300 \ bitnami/elasticsearch:8.17.1 测试是否好…...

【论文阅读】On the Security of “VOSA“

On the Security of Verifiable and Oblivious Secure Aggregation for Privacy-Preserving Federated Learning -- 关于隐私保护联邦中可验证与遗忘的安全聚合的安全性 论文来源摘要Introduction回顾 VOSA 方案对VOSA不可伪造性的攻击对于类型 I 的攻击对于类型 II 的攻击 论文…...

Docker 国内最新可用镜像源20250205

2年没用dockerhub了结果今天发现镜像无法拉取了,找了很多镜像都无效,连阿里云镜像都不行了,最后找到下面可以用的。 Docker镜像仓库备注hub.urlsa.us.kg可用http://hub.haod.eu.org可用http://hub.chxza.eu.org可用http://ccoc.eu.org部分地…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...