深入学习 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-…...

机器学习笔记——特征工程
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍机器学习中常见的特征工程方法、正则化方法和简要介绍强化学习。 文章目录 特征工程(Fzeature Engineering)1. 特征提取ÿ…...

4种革新性AI Agent工作流设计模式全解析
文章目录 导读:AI Agent的四种关键设计模式如下:1. 反思2. 工具使用3. 规划4. 多Agent协作 总结内容简介: 导读: AI Agent是指能够在特定环境中自主执行任务的人工智能系统,不仅接收任务,还自主制定和执行…...
【入门级】计算机网络学习
网络安全:前端开发者必知:Web安全威胁——XSS与CSRF攻击及其防范-CSDN博客 三次握手四次挥手:前端网络—三次握手四次挥手_前端三次握手-CSDN博客 http协议和https协议的区别:前端网络—http协议和https协议的区别-CSDN博客 网…...
安装 Jenkins 后无法访问用户名或密码且忘记这些凭证怎么办?
Jenkins 是一款功能强大的自动化服务器,在持续集成与交付(CI/CD)领域应用广泛。不过,用户在使用过程中,尤其是首次接触该系统或系统重启后,常常会遇到登录方面的问题。要是 Jenkins 突然要求输入用户名和密…...

day08_Kafka
文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列(了解)**为什么消息队列就像是“数据的快递员”?****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…...

安装conda 环境
conda create -n my_unet5 python3.8 (必须设置3.8版本) conda activate my_unet5...

【dockerros2】ROS2节点通信:docker容器之间/docker容器与宿主机之间
🌀 一个中大型ROS项目常需要各个人员分别完成特定的功能,而后再组合部署,而各人员完成的功能常常依赖于一定的环境,而我们很难确保这些环境之间不会相互冲突,特别是涉及深度学习环境时。这就给团队项目的部署落地带来了…...
使用外网访问在群晖中搭建思源docker
还是要折腾,之前发现用公网IP可以访问就没有折腾,今天ip变了,用不了了,一搜,发现有方法可以用域名访问,哎,太好了! 原文:分享我在 群晖 docker 部署 思源笔记 步骤 - 链…...

深度学习中的EMA技术:原理、实现与实验分析
深度学习中的EMA技术:原理、实现与实验分析 1. 引言 指数移动平均(Exponential Moving Average, EMA)是深度学习中一种重要的模型参数平滑技术。本文将通过理论分析和实验结果,深入探讨EMA的实现和效果。 深度学习中的EMA技术:原理、实现与…...

win32汇编环境,窗口程序中对按钮控件常用操作的示例
;运行效果 ;win32汇编环境,窗口程序中对按钮控件常用操作的示例 ;常用的操作,例如创建按钮控件,使其无效,改变文本,得到文本等。 ;将代码复制进radasm软件里,直接就可以编译运行。重点部分加备注。 ;>&g…...
CentOS 7.9 通过 yum 安装 Docker
文章目录 前言一、删除已安装的 Docker二、网络设置三、设置 yum 源,并安装依赖四、设置 Docker 仓库五、安装及使用 Docker六、镜像仓库总结 前言 CentOS 7.9 过了维护期,Docker 官方文档没有了相关的安装文档。记录一下,备用! …...

【开源免费】基于Vue和SpringBoot的英语知识应用网站(附论文)
本文项目编号 T 138 ,文末自助获取源码 \color{red}{T138,文末自助获取源码} T138,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12
PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件,支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件,无需注册即可使用。它提供了丰富的 PDF 处理功能,极大提升了 PDF 文件管理的便捷性和效…...

Web渗透测试之XSS跨站脚本 防御[WAF]绕过手法
目录 XSS防御绕过汇总 参考这篇文章绕过 XSS payload XSS防御绕过汇总 服务端知道有网络攻击或者xss攻 Html...

MMDetection框架下的常见目标检测与分割模型综述与实践指南
目录 综述与实践指南 SSD (Single Shot MultiBox Detector) 基本配置和使用代码 RetinaNet 基本配置和使用代码 Faster R-CNN 基本配置和使用代码 Mask R-CNN 基本配置和使用代码 Cascade R-CNN 基本配置和使用代码 总结 综述与实践指南 MMDetection是一个基于Py…...

怎么实现Redis的高可用?
大家好,我是锋哥。今天分享关于【怎么实现Redis的高可用?】面试题。希望对大家有帮助; 怎么实现Redis的高可用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 为了实现 Redis 的高可用性,我们需要保证在发…...

OpenCV实现Kuwahara滤波
Kuwahara滤波是一种非线性的平滑滤波技术,其基本原理在于通过计算图像模板中邻域内的均值和方差,选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明: 一、基本思想 Kuwahara滤波的基本思想…...

WINFORM - DevExpress -> DevExpress总结[安装、案例]
安装devexpress软件 路径尽量不换,后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件: ToolboxCreator.exe/ini:toolboxcreator…...
Golang学习笔记_22——Reader示例
Golang学习笔记_19——Stringer Golang学习笔记_20——error Golang学习笔记_21——Reader 文章目录 io.Reader 示例从字符串中读取从文件中读取从HTTP响应中读取从内存的字节切片中读取自定义io.Reader实现 源码 io.Reader 示例 从字符串中读取 func ReadFromStrDemo() {str…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...