深入学习 Python 量化编程
深入学习 Python 量化编程
第一章:Python 基础与量化编程环境搭建
1.1 安装必要的库
首先,你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库:
pip install numpy pandas matplotlib yfinance backtrader scikit-learn
- NumPy:用于高效的数值计算。
- Pandas:用于数据处理,尤其是表格数据。
- Matplotlib:用于数据可视化。
- yfinance:用于从 Yahoo Finance 获取金融数据。
- backtrader:量化回测框架。
- scikit-learn:机器学习库,用于优化量化策略。
1.2 基本的 Python 数据结构
在开始量化编程前,熟悉 Python 的基本数据结构非常重要。常用的数据结构包括列表(list)、字典(dict)、元组(tuple)和集合(set)。
# 列表
numbers = [1, 2, 3, 4, 5]# 字典
stocks = {'AAPL': 150, 'GOOGL': 2800}# 元组
prices = (100, 200, 300)# 集合
unique_stocks = {'AAPL', 'GOOGL', 'AMZN'}
1.3 量化编程环境搭建(如 Jupyter Notebook)
量化分析通常在 Jupyter Notebook 中进行,它允许我们分步执行代码并实时查看结果。你可以通过以下命令安装并启动 Jupyter Notebook:
pip install notebook
jupyter notebook
第二章:获取和处理金融数据
2.1 获取股票数据(使用 yfinance)
在量化分析中,获取历史股票数据是第一步。yfinance
库提供了一个简单的接口,允许我们轻松地从 Yahoo Finance 获取股票数据。
示例:获取苹果公司股票的历史数据
import yfinance as yf# 获取苹果公司股票的历史数据
apple = yf.Ticker('AAPL')
data = apple.history(period='1y') # 获取过去一年的数据
print(data.head())
在这个例子中,data
是一个 Pandas DataFrame,包含了苹果公司过去一年的股票数据,包括开盘价、最高价、最低价、收盘价和交易量等。
2.2 数据清洗与预处理(使用 pandas)
获取数据后,通常需要对数据进行处理和清洗,删除空值、处理重复数据、计算收益率等。
示例:计算股票收益率
import pandas as pd# 计算每日收益率
data['Return'] = data['Close'].pct_change()# 删除缺失值
data = data.dropna()print(data.head())
在这个例子中,pct_change()
函数用于计算每日的收益率,并将其存储在新的列 Return
中。
第三章:技术分析与量化指标
3.1 均线分析(Moving Averages)
在量化分析中,均线是一种常用的技术指标,用于判断趋势的方向。常见的均线有简单移动平均线(SMA)和指数加权移动平均线(EMA)。
示例:计算 20 日简单移动平均(SMA)
# 计算 20 日简单移动平均(SMA)
data['SMA20'] = data['Close'].rolling(window=20).mean()# 可视化收盘价与 20 日均线
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['SMA20'], label='20-day SMA')
plt.legend()
plt.title('Stock Price with 20-Day SMA')
plt.show()
3.2 相对强弱指数 (RSI)
RSI 是一个动量指标,衡量资产价格变动的速度和变化,以识别过度买入或卖出的信号。RSI 值一般在 0 到 100 之间,超过 70 表示超买,低于 30 表示超卖。
示例:计算 RSI
# 计算相对强弱指数(RSI)
delta = data['Close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()rs = gain / loss
rsi = 100 - (100 / (1 + rs))
data['RSI'] = rsi# 可视化 RSI
plt.figure(figsize=(10,5))
plt.plot(data['RSI'], label='RSI')
plt.axhline(70, color='red', linestyle='--', label='Overbought (70)')
plt.axhline(30, color='green', linestyle='--', label='Oversold (30)')
plt.legend()
plt.title('RSI Indicator')
plt.show()
3.3 移动平均收敛/发散指标 (MACD)
MACD 是由两条均线之间的差值构成的技术指标,常用于识别买卖信号。
示例:计算 MACD
# 计算 MACD 指标
data['EMA12'] = data['Close'].ewm(span=12, adjust=False).mean()
data['EMA26'] = data['Close'].ewm(span=26, adjust=False).mean()
data['MACD'] = data['EMA12'] - data['EMA26']
data['Signal'] = data['MACD'].ewm(span=9, adjust=False).mean()# 可视化 MACD 与 Signal 线
plt.figure(figsize=(10,5))
plt.plot(data['MACD'], label='MACD')
plt.plot(data['Signal'], label='Signal Line')
plt.legend()
plt.title('MACD and Signal Line')
plt.show()
第四章:编写和回测量化交易策略
4.1 均值回归策略
均值回归策略假设价格会回到其均值。在此策略中,当价格大幅偏离均值时,我们做出买入或卖出的决策。
示例:均值回归策略
# 计算 20 日移动平均
data['SMA20'] = data['Close'].rolling(window=20).mean()# 策略信号:当价格低于均线时买入,高于均线时卖出
data['Signal'] = 0
data.loc[data['Close'] < data['SMA20'], 'Signal'] = 1 # 买入信号
data.loc[data['Close'] > data['SMA20'], 'Signal'] = -1 # 卖出信号# 查看信号
print(data[['Close', 'SMA20', 'Signal']].tail())
4.2 使用回测框架 backtrader
backtrader
是一个非常强大的回测框架,可以用来测试你的量化策略。
示例:使用 backtrader
进行回测
import backtrader as btclass SMAStrategy(bt.Strategy):def __init__(self):self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)def next(self):if self.data.close[0] > self.sma[0]:self.buy()elif self.data.close[0] < self.sma[0]:self.sell()# 初始化回测引擎
cerebro = bt.Cerebro()
cerebro.addstrategy(SMAStrategy)# 加载数据
data = bt.feeds.YahooFinanceData(dataname='AAPL', fromdate=datetime(2020, 1, 1), todate=datetime(2021, 1, 1))
cerebro.adddata(data)# 执行回测
cerebro.run()
cerebro.plot()
第五章:风险管理与资金管理
5.1 止损与止盈
止损和止盈策略帮助你控制每笔交易的风险,并在达到目标时退出。
# 假设当前持仓
stop_loss = 0.95 # 止损为购买价格的 95%
take_profit = 1.05 # 止盈为购买价格的 105%# 示例交易
entry_price = 100
current_price = 98 # 当前价格低于止损价格# 判断是否止损或止盈
if current_price <= entry_price * stop_loss:print("Stop Loss triggered")
elif current_price >= entry_price * take_profit:print("Take Profit triggered")
第六章:机器学习在量化中的应用
6.1 使用机器学习优化策略
机器学习可以帮助我们优化量化策略,例如通过回归分析预测未来的股价,或使用分类算法预测买卖信号。
示例:使用随机森林预测股票价格
from sklearn.ensemble import RandomForestRegressor# 使用过去的 5 日数据预测第 6 日的收盘价
data['Prev_1'] = data['Close'].shift(1)
data['Prev_2'] = data['Close'].shift(2)
data['Prev_3'] = data['Close'].shift(3)
data['Prev_4'] = data['Close'].shift(4)
data['Prev_5'] = data['Close'].shift(5)# 删除缺失值
data = data.dropna()# 特征与目标
X = data[['Prev_1', 'Prev_2', 'Prev_3', 'Prev_4', 'Prev_5']]
y = data['Close']# 随机森林回归模型
model = RandomForestRegressor()
model.fit(X, y)# 预测下一个交易日的收盘价
predicted_price = model.predict([X.iloc[-1]])
print(f"Predicted Price: {predicted_price}")
第七章:进阶量化策略
7.1 趋势跟踪策略
趋势跟踪策略假设市场会继续沿着当前的趋势发展,因此如果市场出现明显的趋势,我们会选择顺势而为,做多或做空。
示例:使用均线交叉进行趋势跟踪策略
我们可以使用短期和长期的均线交叉来判断市场的趋势。当短期均线向上突破长期均线时,表示买入信号;反之,表示卖出信号。
# 计算短期和长期均线
data['SMA50'] = data['Close'].rolling(window=50).mean()
data['SMA200'] = data['Close'].rolling(window=200).mean()# 信号生成:短期均线突破长期均线为买入信号
data['Signal'] = 0
data.loc[data['SMA50'] > data['SMA200'], 'Signal'] = 1 # 买入信号
data.loc[data['SMA50'] < data['SMA200'], 'Signal'] = -1 # 卖出信号# 可视化信号
import matplotlib.pyplot as pltplt.figure(figsize=(12,6))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['SMA50'], label='50-day SMA')
plt.plot(data['SMA200'], label='200-day SMA')
plt.scatter(data[data['Signal'] == 1].index, data[data['Signal'] == 1]['Close'], marker='^', color='g', label='Buy Signal')
plt.scatter(data[data['Signal'] == -1].index, data[data['Signal'] == -1]['Close'], marker='v', color='r', label='Sell Signal')
plt.legend()
plt.title('Trend Following Strategy using Moving Averages')
plt.show()
进一步的策略优化
- 加权移动平均(WMA):相比简单的移动平均,加权移动平均(WMA)给予近期的价格更多的权重。
- 指数加权移动平均(EMA):EMA 是一种更为先进的移动平均,它能更快地响应价格变化,适合用于短期趋势跟踪策略。
7.2 市场中性策略
市场中性策略旨在消除市场整体走势对交易的影响,主要通过配对交易(pairs trading)等方式进行。例如,我们可以选择两只高度相关的股票,当它们的价格差距异常时做空其中一只并做多另一只。
示例:配对交易策略
import numpy as np# 选择两只股票,假设我们选择了苹果和谷歌的股票
stock1 = yf.Ticker('AAPL').history(period='1y')['Close']
stock2 = yf.Ticker('GOOGL').history(period='1y')['Close']# 计算两只股票的价差
spread = stock1 - stock2# 计算价差的移动平均和标准差
spread_mean = spread.rolling(window=20).mean()
spread_std = spread.rolling(window=20).std()# 生成交易信号
z_score = (spread - spread_mean) / spread_std# 交易信号:当 Z-score 大于 1 时做空,Z-score 小于 -1 时做多
signal = np.where(z_score > 1, -1, np.where(z_score < -1, 1, 0))# 可视化
plt.figure(figsize=(12,6))
plt.plot(z_score, label='Z-Score')
plt.axhline(1, color='red', linestyle='--', label='Sell Signal Threshold')
plt.axhline(-1, color='green', linestyle='--', label='Buy Signal Threshold')
plt.legend()
plt.title('Pairs Trading Strategy using Z-Score')
plt.show()
第八章:量化回测框架 backtrader
深入使用
backtrader
是一个功能强大的 Python 回测框架,不仅能处理历史数据的回测,还可以进行实时交易,支持自定义策略和多种数据源。接下来,我们将更深入地探讨如何利用 backtrader
来编写复杂的策略并进行回测。
8.1 使用 backtrader
实现一个简单的趋势跟踪策略
在 backtrader
中,策略是通过继承 bt.Strategy
类来定义的。你可以通过 next()
方法指定策略的执行逻辑。以下是一个简单的趋势跟踪策略,使用 50 日和 200 日均线的交叉来做交易决策。
import backtrader as bt
import yfinance as yf
from datetime import datetime# 定义策略
class MovingAverageCrossStrategy(bt.Strategy):# 定义两个均线def __init__(self):self.sma50 = bt.indicators.SimpleMovingAverage(self.data.close, period=50)self.sma200 = bt.indicators.SimpleMovingAverage(self.data.close, period=200)# 策略逻辑def next(self):if self.sma50 > self.sma200: # 50 日均线突破 200 日均线,做多if not self.position: # 如果没有持仓self.buy()elif self.sma50 < self.sma200: # 50 日均线跌破 200 日均线,做空if self.position: # 如果有持仓self.sell()# 回测设置
cerebro = bt.Cerebro() # 初始化回测引擎
cerebro.addstrategy(MovingAverageCrossStrategy) # 添加策略# 加载数据
data = bt.feeds.YahooFinanceData(dataname='AAPL', fromdate=datetime(2020, 1, 1), todate=datetime(2021, 1, 1))
cerebro.adddata(data)# 设置初始资金
cerebro.broker.set_cash(10000)# 设置交易手续费
cerebro.broker.set_commission(commission=0.001)# 运行回测
cerebro.run()# 可视化回测结果
cerebro.plot()
关键步骤解释:
- 定义策略:通过继承
bt.Strategy
类定义自己的交易策略,并通过next()
方法实现具体的交易逻辑。 - 加载数据:通过
bt.feeds.YahooFinanceData
加载历史股票数据。 - 设置回测参数:包括初始资金、交易手续费等。
- 运行回测:使用
cerebro.run()
执行回测,cerebro.plot()
用于可视化回测结果。
8.2 多策略回测
backtrader
也允许同时运行多个策略,这可以用来测试多个策略组合的效果。例如,您可以在一个回测中同时运行趋势跟踪和均值回归策略。
class MovingAverageCrossStrategy(bt.Strategy):def __init__(self):self.sma50 = bt.indicators.SimpleMovingAverage(self.data.close, period=50)def next(self):if self.data.close > self.sma50:if not self.position:self.buy()else:if self.position:self.sell()class MeanReversionStrategy(bt.Strategy):def __init__(self):self.sma20 = bt.indicators.SimpleMovingAverage(self.data.close, period=20)def next(self):if self.data.close < self.sma20:if not self.position:self.buy()elif self.data.close > self.sma20:if self.position:self.sell()# 初始化回测引擎
cerebro = bt.Cerebro()# 添加多个策略
cerebro.addstrategy(MovingAverageCrossStrategy)
cerebro.addstrategy(MeanReversionStrategy)# 加载数据并运行回测
data = bt.feeds.YahooFinanceData(dataname='AAPL', fromdate=datetime(2020, 1, 1), todate=datetime(2021, 1, 1))
cerebro.adddata(data)
cerebro.run()
cerebro.plot()
第九章:机器学习在量化交易中的应用
9.1 使用机器学习进行信号预测
通过机器学习,我们不仅可以预测股价的涨跌,还能预测技术指标的变化趋势,从而生成买卖信号。以下是一个基于机器学习的股票预测案例。
示例:使用随机森林回归预测股票价格
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 特征工程
data['Prev_1'] = data['Close'].shift(1)
data['Prev_2'] = data['Close'].shift(2)
data['Prev_3'] = data['Close'].shift(3)# 删除缺失值
data = data.dropna()# 特征与目标
X = data[['Prev_1', 'Prev_2', 'Prev_3']]
y = data['Close']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")# 可视化预测结果
plt.plot(y_test.index, y_test, label='True Price')
plt.plot(y_test.index, y_pred, label='Predicted Price')
plt.legend()
plt.title('Stock Price Prediction using Random Forest')
plt.show()
在这个示例中,我们使用 随机森林回归 来预测股票价格,模型的特征包括过去 1 天、2 天和 3 天的收盘价。
相关文章:
深入学习 Python 量化编程
深入学习 Python 量化编程 第一章:Python 基础与量化编程环境搭建 1.1 安装必要的库 首先,你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库: pip install numpy pandas matplotlib yfinance backtrader scikit-…...
初识Java3
目录 一.面向对象与面向过程编程区别 二.类 1.类的定义 2.类一般格式 3.类的实例化具体对象 4.this的使用(习惯经常用) 5.this引用 三.对象 1.初始化对象方法 2.构造方法 四.封装 1.封装: 2.拓展“包” (1).包概念 (…...
uniapp 微信小程序内嵌h5实时通信
描述: 小程序webview内嵌的h5需要向小程序实时发送消息,有人说postMessage可以实现,所以试验一下,结果是实现不了实时,只能在特定时机后退、组件销毁、分享时小程序才能接收到信息(小程序为了安全等考虑做了…...
Blazor开发复杂信息管理系统的优势
随着现代企业信息管理需求的不断提升,开发高效、易维护、可扩展的系统变得尤为重要。在这个过程中,Blazor作为一种新兴的Web开发框架,因其独特的优势,逐渐成为开发复杂信息管理系统的首选技术之一。本文将结合Blazor在开发复杂信息…...
【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解
分布式系统理论:CAP 与 BASE 详解 一、CAP 定理 背景与定义:1998 年由加州大学科学家埃里克布鲁尔提出,分布式系统存在一致性(Consistency)、可用性(Availability)、分区容错性(Part…...
<论文>时序大模型如何应用于金融领域?
一、摘要 本文介绍2024年的论文《Financial Fine-tuning a Large Time Series Model》,论文探索了主流的时间序列大模型在金融领域的微调应用实践,为时序大模型的领域微调提供了参考。 译文: 大型模型在自然语言处理、图像生成以及近期的时间…...
Oracle 表分区简介
目录 一. 前置知识1.1 什么是表分区1.2 表分区的优势1.3 表分区的使用条件 二. 表分区的方法2.1 范围分区(Range Partitioning)2.2 列表分区(List Partitioning)2.3 哈希分区(Hash Partitioning)2.4 复合分…...
安卓硬件加速hwui
安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始,Android 2D 渲染管道支持硬件加速,这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加,你的应用程序将消耗更多内存。 软件绘制&am…...
【Bluedroid】HFP连接流程源码分析(二)
接上一篇【Bluedroid】HFP连接流程源码分析(一)-CSDN博客分析。本篇主要围绕RFCOMM Connect 与 RFCOMM UA Frame 的处理流程来展开分析。 RFCOMM Connect RFCOMM(Radio Frequency Communication)作为蓝牙协议栈的关键部分&#…...
基于文件系统分布式锁原理
分布式锁:在一个公共的存储服务上打上一个标记,如Redis的setnx命令,是先到先得方式获得锁,ZooKeeper有点像下面的demo,比较大小的方式判决谁获得锁。 package com.ldj.mybatisflex.demo;import java.util.*; import java.util.co…...
java语法知识(二)
1. class文件可以直接拖动到idea中,显示源码。 2.idea快捷键: sout : System.out.println 输出内容.sout :---》 System.out.println(输出内容); psvm: public static void main() 格式化:ctrl altL 复制粘贴:ctrld 3.注释…...
基于Piquasso的光量子计算机的模拟与编程
一、引言 在科技飞速发展的当下,量子计算作为前沿领域,正以前所未有的态势蓬勃崛起。它凭借独特的量子力学原理,为解决诸多经典计算难以攻克的复杂问题提供了全新路径。从优化物流配送网络,以实现资源高效调配,到药物分子结构的精准模拟,加速新药研发进程;从金融风险的…...
导出文件,能够导出但是文件打不开
背景: 在项目开发中,对于列表的查询,而后会有导出功能,这里导出的是一个excell表格。实现了两种,1.导出的文件,命名是前端传输过去的;2.导出的文件,命名是根据后端返回的文件名获取的…...
【动手学电机驱动】STM32-FOC(4)STM32之UART 串口通信
STM32-FOC(1)STM32 电机控制的软件开发环境 STM32-FOC(2)STM32 导入和创建项目 STM32-FOC(3)STM32 三路互补 PWM 输出 STM32-FOC(4)STM32之UART 串口通信 STM32-FOC(6&am…...
RabbitMQ 高可用方案:原理、构建与运维全解析
文章目录 前言:1 集群方案的原理2 RabbitMQ高可用集群相关概念2.1 设计集群的目的2.2 集群配置方式2.3 节点类型 3 集群架构3.1 为什么使用集群3.2 集群的特点3.3 集群异常处理3.4 普通集群模式3.5 镜像集群模式 前言: 在实际生产中,RabbitM…...
Center Loss 和 ArcFace Loss 笔记
一、Center Loss 1. 定义 Center Loss 旨在最小化类内特征的离散程度,通过约束样本特征与其类别中心之间的距离,提高类内特征的聚合性。 2. 公式 对于样本 xi 和其类别yi,Center Loss 的公式为: xi: 当前样本的特征向量&…...
深度解读微软Speech服务:让语音识别走进现实
大家好,今天我们来探讨一个激动人心的技术话题:微软的语音识别服务如何为我们提供强大的语音识别解决方案,特别是在电话录音中识别出不同的说话人。 场景描绘 想象一下,你有一段电话录音,并需要将其中的多个说话人区分…...
第21篇 基于ARM A9处理器用汇编语言实现中断<三>
Q:怎样编写ARM A9处理器汇编语言代码配置按键端口产生中断? A:使用Intel Monitor Program创建中断程序时,Linker Section Presets下拉菜单中需选择Exceptions。主程序在.vectors代码段为ARM处理器设置异常向量表,在…...
专题 - STM32
基础 基础知识 STM所有产品线(列举型号): STM产品的3内核架构(列举ARM芯片架构): STM32的3开发方式: STM32的5开发工具和套件: 若要在电脑上直接硬件级调试STM32设备,则…...
极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案
作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…...
【C++指南】模板 深度解析
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 1. 引言 2. 模板的基本概念 3. 函数模板 3.1 定义和语法 3.2 函数模板实例化 3.3 隐式实例化 …...
【traefik】forwadAuth中间件跨namespace请求的问题
前情提要 - fowardAuth鉴权中间件的使用: 【traefik】使用forwardAuth中间件做网关层的全局鉴权 1. 问题 我的 traefik-ingress-controller 所在 namespace: traefik 业务服务所在 namespace: apps 路由与 forwardAuth 中间件配置如下: # 路由 apiV…...
【25考研】西南交通大学软件工程复试攻略!
一、复试内容 复试对考生的既往学业情况、外语听说交流能力、专业素质和科研创新能力,以及综合素质和一贯表现等进行全面考查,主要考核内容包括思想政治素质和道德品质、外语听说能力、专业素质和能力,综合素质及能力。考核由上机考试和面试两部分组成&a…...
在 Safari 浏览器中,快速将页面恢复到 100% 缩放(也就是默认尺寸)Command (⌘) + 0 (零)
在 Safari 浏览器中,没有一个专门的快捷键可以将页面恢复到默认的缩放比例。 但是,你可以使用以下两种方法快速将页面恢复到 100% 缩放(也就是默认尺寸): 方法一:使用快捷键 (最常用) Command (⌘) 0 (零…...
linux的大内核锁与顺序锁
大内核锁 Linux大内核锁(Big Kernel Lock,BKL)是Linux内核中的一种锁机制,用于保护内核资源,以下是关于它的详细介绍: 概念与作用 大内核锁是一种全局的互斥锁,在同一时刻只允许一个进程访问…...
CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞
漏洞描述 GiveWP 插件中发现了一个严重漏洞,该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777,CVSS 评分为 9.8,表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装,为全球无数捐赠平…...
牛客周赛 Round 76题解
小红出题 思路:我们发现,每七天可以获得15元,那么我们可以对7取模,看能有多少7的倍数,然后剩下的就是看是否超过5,超过5就直接15,否则加上天数*3 #include<bits/stdc.h> using namespace…...
【ARM】MDK如何将变量存储到指定内存地址
1、 文档目标 通过MDK的工程配置,将指定的变量存储到指定的内存地址上。 2、 问题场景 在项目工程的开发过程中,对于flash要进行分区,需要规划出一个特定的内存区域来存储变量。 3、软硬件环境 1)、软件版本:MDK 5.…...
解决在arm架构下的欧拉操作系统mysql8.4.2源码安装
目标:在欧拉的22.03 (LTS-SP4)版本操作系统,cpu的架构为ARM,源码安装mysql-8.4.2。 1.查看操作系统 # cat /etc/os-release NAME"openEuler" VERSION"22.03 (LTS-SP4)"# uname -i aarch642.mysql下载地址 mysql的下载…...
SpringAop
SpringAop aop定义核心概念aop基础实现执行流程 aop进阶通知类型切入点表达式的抽取通知的执行顺序切入点表达式execution方式实现annotation注解方式实现示例 笔记链接 aop定义 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程)…...
C++内存泄露排查
内存泄漏是指程序动态分配的内存未能及时释放,导致系统内存逐渐耗尽,最终可能造成程序崩溃或性能下降。在C中,内存泄漏通常发生在使用new或malloc等分配内存的操作时,但没有正确地使用delete或free来释放这块内存。 在日常开发过程…...
Cesium小知识:pointPrimitive collection 详解
Cesium.PointPrimitiveCollection 是 Cesium 中用于高效管理和渲染大量点(points)的一个类。它允许你创建和管理大量的 PointPrimitive 实例,这些实例可以用来表示地理空间中的点数据,如传感器位置、车辆位置、兴趣点等。与直接使用 Cesium.Entity 相比,PointPrimitiveCol…...
从 Conda 到 Pip-tools:Python 依赖管理全景探索20250113
从 Conda 到 Pip-tools:Python 依赖管理全景探索 引言 在 Python 开发中,依赖管理是一个"常见但复杂"的问题:一次简单的版本冲突可能让团队调试数小时;一次不受控的依赖升级可能让生产环境瘫痪。随着项目规模的增加和…...
浅谈云计算01 | 云计算服务的特点
在当今数字化时代,云计算作为一种强大的技术解决方案,正逐渐改变着企业和个人对信息技术的使用方式。本文将详细探讨云计算的五个主要特点,包括按需自助服务、广泛的网络接入、资源池化、快速弹性伸缩以及可计量服务。 一、按需自助服务 云…...
2025年,华为认证HCIA、HCIP、HCIE 该如何选择?
眼看都到 2025 年啦,华为认证还吃香不? 把这问题摆在每个网络工程师跟前,答案可没那么容易说清楚。 到底考不考它值当不值当,重点在于您自己的职业规划,还有对行业走向的领会。 2025 年华为认证仍然值得一考&#…...
使用Selenium进行网页自动化测试
在使用Selenium进行网页自动化测试时,获取网络请求数据(即network数据)并不直接由Selenium库提供。Selenium主要用于与网页内容进行交互(如点击、输入文本、获取页面元素等),但它本身不拦截或记录网络请求。…...
Linux 下 mtrace 的详细介绍
在 Linux 系统中,内存管理是操作系统的一项重要任务,而内存泄漏(Memory Leak)是开发过程中常见且棘手的问题之一。为了帮助开发者追踪和调试内存泄漏问题,mtrace 提供了一种有效的方式来检测和分析内存的分配与释放情况…...
【DB-GPT】开启数据库交互新篇章的技术探索与实践
一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…...
深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比
众所周知,不管是什么框架,在前端 UI 渲染时,都会有构造出一套相关的渲染树,并且在 UI 更新时,为了尽可能提高性能,一般都只会进行「差异化」更新,而不是对整个 UI Tree 进行刷新,所以…...
Android 网络层相关介绍
关注 Android 默认支持的网络管理行为,默认支持的网络服务功能。 功能术语 术语缩写全称释义DHCPv6Dynamic Host Configuration Protocol for IPv6动态主机配置协议的第六版,用于在IPv6网络中动态分配IP地址和其他网络配置参数。DNS Domain Name System域名系统。LLALink-Loc…...
ThreeJs开发环境安装与首个DEMO
安装开发环境 我这边使用的JetBrain的WebStorm,咨询过很多其他开发从业者,普遍使用vscode的比较多。但是考虑到vscode涉及到不少插件安装和IDE配置,作为傻瓜式入门,我这边采用WebStorm。 下载地址: WebStorm: The J…...
【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)
文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起,正向定位到当前行的首个字符 b2 从光标位置起,反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…...
js:根据后端返回数据的最大值进行计算然后设置这个最大值为百分之百,其他的值除这个最大值
问: 现在tabData.value 接收到了后端返回的数据, [{text:人力,percentage:‘90’},{text:物品,percentage:‘20’},{text:物理,percentage:‘50’},{text:服务,percentageÿ…...
线形回归与小批量梯度下降实例
1、准备数据集 import numpy as np import matplotlib.pyplot as pltfrom torch.utils.data import DataLoader from torch.utils.data import TensorDataset######################################################################### #################准备若干个随机的x和…...
【数学】概率论与数理统计(三)
文章目录 [toc] 随机变量的概念随机事件数量化随机变量 离散型随机变量及其概率分布随机变量的分类离散型随机变量离散型随机变量的常见分布两点分布二项分布泊松分布泊松定理证明 泊松分布 超几何分布几何分布 连续型随机变量及其概率分布连续型随机变量零概率事件几乎必然发生…...
如何在 Linux、MacOS 以及 Windows 中打开控制面板
控制面板不仅仅是一系列图标和菜单的集合;它是通往优化个人计算体验的大门。通过它,用户可以轻松调整从外观到性能的各种参数,确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备,还是简单地改变桌…...
《AI赋能鸿蒙Next,开启智能关卡设计新时代》
在游戏开发领域,关卡设计是至关重要的一环,它直接影响着玩家的游戏体验和沉浸感。而随着人工智能技术的飞速发展,结合鸿蒙Next系统的强大功能,为游戏的智能关卡设计带来了全新的思路和方法。 利用AI学习玩家行为模式 在鸿蒙Next…...
Safari浏览器上ico图标显示不出来,怎么解决?
Safari浏览器上ico图标显示不出来,怎么解决? 如果Safari浏览器上ico图标显示不出来了,如下图,该图标显示为灰色。 可以关闭Safari浏览器,并清除历史记录,就可以解决啦。 另外,如果多个网站这…...
Java Bean Validation 不适用Spring的情况下自定义validation注解
Java Bean Validation(也称为 JSR 380,为 Bean Validation 2.0 规范)提供了一套基本的注解,用于定义和验证 Java Bean 的属性。例如: NotNull:属性不能为空 Size:字符串、集合或数组的大小有约…...
【算法学习笔记】30:埃氏筛(Sieve of Eratosthenes)和线性筛(Linear Sieve)
测试题目:AcWing 868. 筛质数 埃氏筛(Sieve of Eratosthenes) 如果 i i i是素数,每次把 i i i的倍数都筛掉,存在重复筛选,时间复杂度 n ⋅ l o g ( l o g n ) n \cdot log(logn) n⋅log(logn)。 #includ…...