深入学习 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…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
