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

用 Python 构建高级配对交易策略

作者:老余捞鱼

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

写在前面的话:
       
本文阐述通过分析加密货币和传统金融工具之间的相关性和协整性,以及实施 Z-score 方法来生成交易信号,然后介绍如何使用 Python 构建配对交易策略,从而在市场中寻找交易机会。最后还讨论了实际遇到的交易挑战,强调评估策略要考虑风险调整指标。

       配对交易作为一种复杂的策略,常常被交易者运用以管理投资组合,而非仅仅聚焦于单个资产。本文将深入探讨这种市场中性策略,其旨在从两种密切相关的金融工具的相对价格变动中获取利润。本文我们还是借助可免费获取的雅虎财经数据展开模拟分析。

​​​​​​​       这种策略的核心是相信,随着时间的推移,两种资产的价格会保持稳定的价差。因此,无论市场大趋势如何,交易者都能从价格趋同中获利。配对交易的目标是所选资产之间的关系,而不是整体市场方向。

1. 环境配置

​​​​​​​       要在 Jupyter 环境中设置必要的库,请使用以下命令:

!pip install numpy
!pip install pandas
!pip install yfinance

​​​​​​​       在 Jupyter Notebook 单元里运行这些命令,便能将指定的库直接安装到环境当中。安装完毕后,我们就能够继续展开分析了。

2. 收集数据

​​​​​​​       要使用 Yahoo Finance 数据为涉及加密货币的配对交易策略实施数据收集和清理,请遵循以下步骤:

  • 插补缺失值:填补数据中的空白,以保持数据的连续性。
  • 平滑异常值:应用平滑极端数据点的方法,以避免分析失真。
  • 确保时间序列长度一致:尽管加密货币市场存在持续的交易活动,但要对时间序列数据进行标准化,以确保长度一致。

​​​​​​​       下面是 Python 的实现方法:

crypto_forex_stocks = ['BTC-USD', 'ETH-USD', 'BNB-USD', 'XRP-USD', 'ADA-USD', 'DOGE-USD', 'ETC-USD', 'XLM-USD', 'AAVE-USD', 'EOS-USD', 'XTZ-USD', 'ALGO-USD', 'XMR-USD', 'KCS-USD','MKR-USD', 'BSV-USD', 'RUNE-USD', 'DASH-USD', 'KAVA-USD', 'ICX-USD', 'LINA-USD', 'WAXP-USD', 'LSK-USD', 'EWT-USD', 'XCN-USD', 'HIVE-USD', 'FTX-USD', 'RVN-USD', 'SXP-USD', 'BTCB-USD']
bank_stocks = ['JPM', 'BAC', 'WFC', 'C', 'GS', 'MS', 'DB', 'UBS', 'BBVA', 'SAN', 'ING', ' BNPQY', 'HSBC', 'SMFG', 'PNC', 'USB', 'BK', 'STT', 'KEY', 'RF', 'HBAN', 'FITB',  'CFG','BLK', 'ALLY', 'MTB', 'NBHC', 'ZION', 'FFIN', 'FHN', 'UBSI', 'WAL', 'PACW', 'SBCF', 'TCBI', 'BOKF', 'PFG', 'GBCI', 'TFC', 'CFR', 'UMBF', 'SPFI', 'FULT', 'ONB', 'INDB', 'IBOC', 'HOMB']
global_indexes = ['^DJI', '^IXIC', '^GSPC', '^FTSE', '^N225', '^HSI', '^AXJO', '^KS11', '^BFX', '^N100','^RUT', '^VIX', '^TNX']START_DATE = '2021-01-01'
END_DATE = '2023-10-31'
universe_tickers = crypto_forex_stocks + bank_stocks + global_indexes
universe_tickers_ts_map = {ticker: load_ticker_ts_df(ticker, START_DATE, END_DATE) for ticker in universe_tickers}def sanitize_data(data_map):TS_DAYS_LENGTH = (pd.to_datetime(END_DATE) -pd.to_datetime(START_DATE)).daysdata_sanitized = {}date_range = pd.date_range(start=START_DATE, end=END_DATE, freq='D')for ticker, data in data_map.items():if data is None or len(data) < (TS_DAYS_LENGTH / 2):# We cannot handle shorter TSscontinueif len(data) > TS_DAYS_LENGTH:# Normalize to have the same length (TS_DAYS_LENGTH)data = data[-TS_DAYS_LENGTH:]# Reindex the time series to match the date range and fill in any blanks (Not Numbers)data = data.reindex(date_range)data['Adj Close'].replace([np.inf, -np.inf], np.nan, inplace=True)data['Adj Close'].interpolate(method='linear', inplace=True)data['Adj Close'].fillna(method='pad', inplace=True)data['Adj Close'].fillna(method='bfill', inplace=True)assert not np.any(np.isnan(data['Adj Close'])) and not np.any(np.isinf(data['Adj Close']))data_sanitized[ticker] = datareturn data_sanitized
# Sample some
uts_sanitized = sanitize_data(universe_tickers_ts_map)
uts_sanitized['JPM'].shape, uts_sanitized['BTC-USD'].shape

​​​​​​​       日期范围 "变量用 "pd.date_range(start=START_DATE, end=END_DATE, freq='D') "定义,为数据建立所需的时间范围。接下来,我们使用线性插值法填补所有缺失值(NaN 或 Nones),如果线性插值法失败,则使用最近的有效值进行回填。

​​​​​​​       我们运用断言语句来校验数据的完整性,同时检查随机选取的两个仪器的形状,以确保它们能相匹配。

3. 深入探讨

​​​​​​​       大家也许还记得 FTX丑闻 吧?伴随这家交易所的倒闭,投资者或许会对加密货币交易所丧失信心,暂且转向传统银行进行金融交易,直至丑闻被淡忘。

​​​​​​​       为了探究这一假设,我们能够运用相关性分析与协整分析,来判定加密货币市场和传统银行业表现之间的任何模式或者关系。相关性分析会助力我们知晓两个数据集之间的线性关系程度,而协整性分析则会明确它们之间是否存在长期关系,进而提示潜在的配对交易契机。

​​​​​​​       通过研究这些指标,我们可以评估丑闻是否影响了市场对加密货币和传统银行业的情绪。

4. 相关性和协整性

​​​​​​​       相关性使用皮尔逊相关系数 Pearson correlation coefficient (r) 来衡量两个变量之间的关系,其范围为-1 到 1。1 表示完全的负线性关系,0 表示没有线性关系,1 表示完全的正线性关系。

​​​​​​​       而协整则是评估两种资产是否随着时间的推移而联系在一起,表明它们的价差倾向于回归均值。当它们暂时偏离历史关系时,这就为交易创造了机会。协整关系是通过统计检验来评估的,如扩增迪基-富勒 Dickey-Fuller (ADF) 检验,该检验可检查两种资产之间的价差是否静止。如果价差是静态的,则表明这两种资产是协整的,并且具有长期关系。

​​​​​​​       幸运的是,numpy 和 stats 库提供了简化这些统计测试的函数,使相关性和协整分析的执行变得更加容易。

5. 寻找配对

​​​​​​​       在交易中,当资产间的价差背离历史均值之际,分析师会借助协整检验来生成买入与卖出信号。当价差回归至长期均衡状态时,此般偏离便会造就获利契机。故而,对这种分析而言,掌控全面的数据极为关键。

​​​​​​​       下面的代码将检验一系列股票和其他金融工具,以发现任何隐藏的关系。它将检验零假设 (H0),即假设资产之间没有影响或关系。一般来说,如果检验的 p 值 低于 0.02,则拒绝零假设 (H0),表明这对资产之间存在一定程度的协整关系或值得进一步研究的关系。

from statsmodels.tsa.stattools import coint
from itertools import combinations
from statsmodels.tsa.stattools import cointdef find_cointegrated_pairs(tickers_ts_map, p_value_threshold=0.2):"""Find cointegrated pairs of stocks based on the Augmented Dickey-Fuller (ADF) test.Parameters:- tickers_ts_map (dict): A dictionary where keys are stock tickers and values are time series data.- p_value_threshold (float): The significance level for cointegration testing.Returns:- pvalue_matrix (numpy.ndarray): A matrix of cointegration p-values between stock pairs.- pairs (list): A list of tuples representing cointegrated stock pairs and their p-values."""tickers = list(tickers_ts_map.keys())n = len(tickers)# Extract 'Adj Close' prices into a matrix (each column is a time series)adj_close_data = np.column_stack([tickers_ts_map[ticker]['Adj Close'].values for ticker in tickers])pvalue_matrix = np.ones((n, n))# Calculate cointegration p-values for unique pair combinationsfor i, j in combinations(range(n), 2):result = coint(adj_close_data[:, i], adj_close_data[:, j])pvalue_matrix[i, j] = result[1]pairs = [(tickers[i], tickers[j], pvalue_matrix[i, j])for i, j in zip(*np.where(pvalue_matrix < p_value_threshold))]return pvalue_matrix, pairs
# This section can take up to 5mins
P_VALUE_THRESHOLD = 0.02
pvalues, pairs = find_cointegrated_pairs(uts_sanitized, p_value_threshold=P_VALUE_THRESHOLD)

​​​​​​​       将资产间的关系予以可视化,对于人工解读与决策而言至关重要,即便在算法交易中亦是如此。热图能够依据协整检验所得出的 p 值,直观地展现哪些资产属于配对资产。该热图有益于识别具有重要关系的潜在配对,从而为进一步分析以及探寻交易机会提供助力。

5.1 创建和显示热图

import seaborn as snsplt.figure(figsize=(26, 26))
heatmap = sns.heatmap(pvalues, xticklabels=uts_sanitized.keys(),yticklabels=uts_sanitized.keys(), cmap='RdYlGn_r',mask=(pvalues > (P_VALUE_THRESHOLD)),linecolor='gray', linewidths=0.5)
heatmap.set_xticklabels(heatmap.get_xticklabels(), size=14)
heatmap.set_yticklabels(heatmap.get_yticklabels(), size=14)
plt.show()

​​​​​​​       为了简化我们的分析,并专注于加密货币之间最紧密的关系,我们可以选择 p 值 最低的前三个货币对。这些货币对表明了最强的协整关系,因此也是潜在的交易机会。我们可以用柱状图来直观地显示这些货币对及其各自的 p 值。下面介绍如何实现这一点:

5.2 抽取前三名绘制柱形图,直观显示 P 值

sorted_pairs = sorted(pairs, key=lambda x: x[2], reverse=False)
sorted_pairs = sorted_pairs[0:35]
sorted_pairs_labels, pairs_p_values = zip(*[(f'{y1} <-> {y2}', p*1000) for y1, y2, p in sorted_pairs])
plt.figure(figsize=(12, 18))
plt.barh(sorted_pairs_labels,pairs_p_values, color='red')
plt.xlabel('P-Values (1000)', fontsize=8)
plt.ylabel('Pairs', fontsize=6)
plt.title('Cointegration P-Values (in 1000s)', fontsize=20)plt.grid(axis='both', linestyle='--', alpha=0.7)
plt.show()

​​​​​​​       为了将已确定的货币对交易的时间序列数据(花旗集团的 AAVE-USD 交易、花旗集团的 XMR-USD 交易以及 Ally Financial Inc (ALLY) 的 FTX-USD 交易)进行可视化,同时便于对加密货币和股票进行比较,我们将采用 scikit-learn 的 MinMax 缩放功能来对价格进行缩放处理。另外,我们还会运用滚动窗口进行平滑操作,以增强货币对之间固定性的可视程度。

​​​​​​​       下面是如何实现这一点的方法:

from sklearn.preprocessing import MinMaxScalerticker_pairs = [("AAVE-USD", "C"), ("XMR-USD", "C"), ("FTX-USD", "ALLY")]
fig, axs = plt.subplots(3, 1, figsize=(18, 14))
scaler = MinMaxScaler()
for i, (ticker1, ticker2) in enumerate(ticker_pairs):# Scale the price data for each pair using MIN MAXscaled_data1 = scaler.fit_transform(uts_sanitized[ticker1]['Adj Close'].values.reshape(-1, 1))scaled_data2 = scaler.fit_transform(uts_sanitized[ticker2]['Adj Close'].values.reshape(-1, 1))axs[i].plot(scaled_data1, label=f'{ticker1}', color='lightgray', alpha=0.7)axs[i].plot(scaled_data2, label=f'{ticker2}', color='lightgray', alpha=0.7)# Apply rolling mean with a window of 15scaled_data1_smooth = pd.Series(scaled_data1.flatten()).rolling(window=15, min_periods=1).mean()scaled_data2_smooth = pd.Series(scaled_data2.flatten()).rolling(window=15, min_periods=1).mean()axs[i].plot(scaled_data1_smooth, label=f'{ticker1} SMA', color='red')axs[i].plot(scaled_data2_smooth, label=f'{ticker2} SMA', color='blue')axs[i].set_ylabel('*Scaled* Price $', fontsize=12)axs[i].set_title(f'{ticker1} vs {ticker2}', fontsize=18)axs[i].legend()axs[i].set_xticks([])
plt.tight_layout()
plt.show()

以下是对上述内容的解释:

​​​​​​​       为了探究 AAVE-USD 和花旗集团之间的潜在交易信号,我们观察到,尽管序列中最初存在差异,但它们的价格表现出相对稳定。在生成交易信号时,我们将采用滚动窗口法的 Z 值法,从而无需单独的训练集和测试集。Z 值将价格序列与其历史均值标准化:

6. Where?

​​​​​​​       X 是标准化的价格;U 是滚动窗口的均值(平均值);Sigma 是滚动窗口的标准差。

​​​​​​​       Z 值衡量当前价格比偏离历史平均值的程度。Z 值高于 +1 或低于 -1 通常会触发交易信号。Z 值高于 +1 表明一种资产相对于另一种资产被高估了,这意味着卖出被高估的资产,买入被低估的资产。

​​​​​​​       反之,如果 Z 值低于-1,则表明被低估的资产已被高估,建议卖出前者,买入后者。该策略利用均值回复动态,充分利用暂时性背离和预期回归历史均值的机会。

TRAIN = int(len(uts_sanitized["AAVE-USD"]) * 0.85)
TEST = len(uts_sanitized["AAVE-USD"]) - TRAIN
AAVE_ts = uts_sanitized["AAVE-USD"]["Adj Close"][:TRAIN]
C_ts = uts_sanitized["C"]["Adj Close"][:TRAIN]
# Calculate price ratio (AAVE-USD price / C price)
ratios = C_ts/AAVE_ts
fig, ax = plt.subplots(figsize=(12, 8))
ratios_mean = np.mean(ratios)
ratios_std = np.std(ratios)
ratios_zscore = (ratios - ratios_mean) / ratios_std
ax.plot(ratios.index, ratios_zscore, label="Z-Score", color='blue')
# Plot reference lines
ax.axhline(1.0, color="green", linestyle='--', label="Upper Threshold (1.0)")
ax.axhline(-1.0, color="red", linestyle='--', label="Lower Threshold (-1.0)")
ax.axhline(0, color="black", linestyle='--', label="Mean")
ax.set_title('AAVE-USD / C: Price Ratio and Z-Score', fontsize=18)
ax.set_xlabel('Date')
ax.set_ylabel('Price Ratio / Z-Score')
ax.legend()
plt.tight_layout()
plt.show()

​​​​​​​       下图是一种可视化表示法,其中绿色水平线表示买入 Citigroup Inc ©,交叉时表示卖出 Aave (AAVE),而红线则表示相反。值得注意的是,该图表主要是将静止状态可视化。实际上,在应用我们的交易信号时,阈值会随着滚动窗口进行调整,以适应市场动态的变化。

​​​​​​​       现在,让我们开始执行交易信号:

def signals_zscore_evolution(ticker1_ts, ticker2_ts, window_size=15, first_ticker=True):"""Generate trading signals based on z-score analysis of the ratio between two time series.Parameters:- ticker1_ts (pandas.Series): Time series data for the first security.- ticker2_ts (pandas.Series): Time series data for the second security.- window_size (int): The window size for calculating z-scores and ratios' statistics.- first_ticker (bool): Set to True to use the first ticker as the primary signal source, and False to use the second.Returns:- signals_df (pandas.DataFrame): A DataFrame with 'signal' and 'orders' columns containing buy (1) and sell (-1) signals."""ratios = ticker1_ts / ticker2_tsratios_mean = ratios.rolling(window=window_size, min_periods=1, center=False).mean()ratios_std = ratios.rolling(window=window_size, min_periods=1, center=False).std()z_scores = (ratios - ratios_mean) / ratios_stdbuy = ratios.copy()sell = ratios.copy()if first_ticker:# These are empty zones, where there should be no signal# the rest is signalled by the ratio.buy[z_scores > -1] = 0sell[z_scores < 1] = 0else:buy[z_scores < 1] = 0sell[z_scores > -1] = 0signals_df = pd.DataFrame(index=ticker1_ts.index)signals_df['signal'] = np.where(buy > 0, 1, np.where(sell < 0, -1, 0))signals_df['orders'] = signals_df['signal'].diff()signals_df.loc[signals_df['orders'] == 0, 'orders'] = Nonereturn signals_dfAAVE_ts = uts_sanitized["AAVE-USD"]["Adj Close"]
C_ts = uts_sanitized["C"]["Adj Close"]
plt.figure(figsize=(26, 18))
signals_df1 = signals_zscore_evolution(AAVE_ts, C_ts)
profit_df1 = calculate_profit(signals_df1, AAVE_ts)
ax1, _ = plot_strategy(AAVE_ts, signals_df1, profit_df1)
signals_df2 = signals_zscore_evolution(AAVE_ts, C_ts, first_ticker=False)
profit_df2 = calculate_profit(signals_df2, C_ts)
ax2, _ = plot_strategy(C_ts, signals_df2, profit_df2)
ax1.legend(loc='upper left', fontsize=10)
ax1.set_title(f'Citigroup Paired with Aave', fontsize=18)
ax2.legend(loc='upper left', fontsize=10)
ax2.set_title(f'Aave Paired with Citigroup', fontsize=18)
plt.tight_layout()
plt.show()

​​​​​​​       在算法交易系统中,多个交易信号往往同时运行。因此,为了捕捉整体表现,通常会汇总所有信号的收益。让我们继续计算相应的累计回报。

plt.figure(figsize=(12, 6))
cumulative_profit_combined = profit_df1 + profit_df2
ax2_combined = cumulative_profit_combined.plot(label='Profit%', color='green')
plt.legend(loc='upper left', fontsize=10)
plt.title(f'Aave & Citigroup Paired - Cumulative Profit', fontsize=18)
plt.tight_layout()
plt.show()

​​​​​​​       在分析的这段时间里,尽管货币对交易策略缩水了 50%,但它的表现依然强劲,账面回报率高达 100%。这一成绩超过了标准普尔 500 指数两年 10% 的回报率。不过,该策略的方差较高,这可能是由于与花旗集团配对的加密货币存在不稳定性。

6. 观点回顾

​​​​​​​       在实践中,量化分析师使用风险调整指标(如 Sortino 比率)来评估策略绩效,该指标侧重于下行风险。

​​​​​​​       总之,我们对配对交易策略的关键要点进行了探讨,涵盖了其市场中性的方式、对 Z 值和协整等统计工具的依赖,以及对均值回归的运用。不过,在实际应用这一策略时,可能会面临一些挑战,例如交易成本以及资产相关性或协整性的非平稳性风险。最后回顾本文如下:

配对交易策略:依赖于两个资产价格稳定性的策略,利用价格趋同获利。

数据处理:重要性在于确保数据的完整性和准确性,以便进行准确的分析。

市场事件影响:市场事件(如 FTX 丑闻)可能影响资产之间的关系,协整性分析有助于识别这些变化。

统计方法:使用相关性、协整性和 Z-score 等统计方法来识别交易机会和生成交易信号。

风险和实际应用:在实际交易中,需要考虑交易成本和资产相关性的非平稳性,并使用风险调整指标来评估策略表现。

可视化:通过热图和柱状图等可视化工具,有助于直观地理解资产关系和交易策略的效果。

策略评估:使用风险调整的指标(如 Sortino 比率)来评估策略的实际表现。


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

转发请注明原作者和出处。

相关文章:

用 Python 构建高级配对交易策略

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a; 本文阐述通过分析加密货币和传统金融工具之间的相关性和协整性&#xff0c;以及实施 Z-score 方法来生成交易信号&#xff0c;然后介绍如何使用 Python 构建配对交易策…...

Java 引用数据类型详解、字符串的不可变性、如何处理字符串的内存管理、String Pool 及其优化

文章目录 1. 引用数据类型1.1 常见引用数据类型 2. 字符串的不可变性2.1 不可变性的优点2.2 不可变性示例 3. 如何处理字符串的内存管理3.1 String Pool3.2 String 内存优化 4. String Pool 及其优化4.1 String Pool的工作原理4.2 String Pool的优化4.3 使用 intern() 进一步优…...

Babel使用

初始化项目 npm init -y 创建文件 // 转码前 // 定义数据 let input [1, 2, 3] // 将数组的每个元素 1 input input.map(item > item 1) console.log(input)配置.babelrc Babel的配置文件是.babelrc&#xff0c;presets字段设定转码规则&#xff0c;将es2015规则加入…...

自动机器学习(AutoML)

utoML是PAI的提供的自动寻找超参组合的机器学习增强型服务。您在训练模型时&#xff0c;如果超参组合复杂度过高&#xff0c;需大量训练资源和手工调试工作&#xff0c;可以使用AutoML来节省模型调参时间&#xff0c;提升模型调优效率和模型质量。 基础概念 超参数&#xff1a;…...

Vivado时序报告六:Report Timing详解

目录 一、前言 二、配置选项概览图 三、配置选项详解 3.1 Targets 3.2 Options 3.1.1 Report 3.1.2 Path limits 3.1.3 Path display 3.2 Advanced 3.2.1 Report 3.2.2 File Output 3.2.3 miscellaneous 3.3 Timer Settings 3.4 共有部分 四、 设计示例 4.1 设…...

java基础:数据类型的总结

一、Java 常用数据类型 1.数据类型分为:(1)基本数据类型 &#xff08;2&#xff09;引用数据类型 2.基本数据类型分类&#xff1a;数值型&#xff0c;非数值型。 3.数值型:&#xff08;1&#xff09; 整数类型&#xff08;byte,short,int,long) &#xff08;2&#xff09; …...

【目标检测论文解读复现NO.39】基于改进 YOLOv8 的轻量级复杂环境苹果叶片病害检测方法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…...

python 基础笔记 2(函数, 类)

起因, 目的: 把很久以前,自己写的笔记发布出来。 现在粉丝多了,也不觉得丢人了。 为什么这些序号不连贯,因为有些很熟悉的东西,我都删了。 内建函数, 函数 zip()函数,利用 * 号操作符,可以将元组解压为列表。 我怀疑是zip的解包只能用一次。在内存中解开一次之后就销…...

LeetCode 2090.半径为K的子数组平均值

题目&#xff1a; 给你一个下标从 0 开始的数组 nums &#xff0c;数组中有 n 个整数&#xff0c;另给你一个整数 k 。 半径为 k 的子数组平均值 是指&#xff1a;nums 中一个以下标 i 为 中心 且 半径 为 k 的子数组中所有元素的平均值&#xff0c;即下标在 i - k 和 i k 范…...

Qt C++ 编程中定义了一个槽函数(slot)deleteLater的作用

这行代码是在 Qt C编程中定义了一个槽函数&#xff08;slot&#xff09;deleteLater。 在 Qt 框架中&#xff0c;Q_SLOTS关键字用于声明类中的槽函数。deleteLater是一个非常有用的函数&#xff0c;它会安排接收对象在事件循环返回后被删除。 通常在以下情况下会使用deleteLa…...

【Hive】8-Hive性能优化及Hive3新特性

Hive性能优化及Hive3新特性 Hive表设计优化 Hive查询基本原理 Hive的设计思想是通过元数据解析描述将HDFS上的文件映射成表 基本的查询原理是当用户通过HQL语句对Hive中的表进行复杂数据处理和计算时&#xff0c;默认将其转换为分布式计算 MapReduce程序对HDFS中的数据进行…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18目录1. On the Reliability of Large Language Models to Misinformed and Demographically-Informed Prompts2. SafeLLM: Dom…...

CTF(四)

导言&#xff1a; 本文主要讲述在CTF竞赛中&#xff0c;web类题目file_include。 靶场链接&#xff1a;攻防世界 (xctf.org.cn) 一&#xff0c;观察页面。 可以看到一段php代码。从则段代码中我们可以知道&#xff1a; 1&#xff0c;使用include引入check.php文件&#xff…...

智慧商城项目1-项目初始化创建

这是一个面向移动端的项目&#xff0c;先看看做了这个项目能收获什么&#xff0c;注意这是vue2的项目&#xff0c; 是个经典项目&#xff0c;能为未来学习vue3项目打下基础。 首先来说一下为啥是vue2&#xff0c;因为vue3还没有大范围普及&#xff0c;目前大部分企业还在用vue2…...

Java集合(四)--treeset/treemap/章节练习题目/去重原理的解读和应用

文章目录 1.treeset结构2.treemap结构3.集合去重辨析总结4.对于arraylist的练习题目5.对于HashMap的练习题目6.第三点的去重运用7.HashSe练习题目 1.treeset结构 下面的这个就是对于这个treeset结构进行测试的一个程序&#xff0c;在这个里面&#xff0c;add表示的就是对于这个…...

如何开启华为交换机 http

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…...

SpringBoot中的RedisTemplate对象中的setIfAbsent()方法有什么作用?

文章目录 原子性操作用于分布式锁可选的过期时间 setIfAbsent() 方法是 Redis 中用于设置一个键值对的命令&#xff0c;只有在该键不存在时才会设置成功。它通常用于实现分布式锁的逻辑 主要功能: 原子性操作 setIfAbsent() 是一个原子性操作&#xff0c;意味着在执行该操作的…...

《合肥工业大学学报(自然科学版)》

《合肥工业大学学报(自然科学版)》以基础理论、应用科学和工程技术为主的综合性学术刊物&#xff0c;主要刊登机械工程、仪器科学与光电工程、材料科学与工程、电气与自动化工程、计算机与信息工程、电子科学与应用物理、土木与水利工程、资源与环境工程、汽车与交通工程、化学…...

Android11 USB Camera会出现预览绿屏问题

目录 一、问题描述 二、问题原因 三、解决方法 一、问题描述 DDR容量是4G及以上的机器&#xff0c;USB Camera会出现预览绿屏问题。 串口中会刷如下log: 二、问题原因 RGA2使用超过4G内存会异常&#xff0c;导致USB Camera调用rga相关操作报错&#xff0c;从而预览绿屏 三…...

Mongodb 获取集合(collection)的统计信息

在MongoDB中&#xff0c;获取指定集合&#xff08;collection&#xff09;的统计信息可以通过执行collStats命令来实现。这个命令提供了关于集合的详细信息&#xff0c;包括&#xff1a; 集合的大小索引的大小和数量文档的数量存储空间的使用情况各种统计数据&#xff0c;如平…...

LoRA训练助手GPU算力优化:支持FP16/INT4双精度推理,显存占用降低58%

LoRA训练助手GPU算力优化&#xff1a;支持FP16/INT4双精度推理&#xff0c;显存占用降低58% 1. 为什么需要GPU算力优化 如果你尝试过训练自己的AI绘画模型&#xff0c;一定遇到过这样的困扰&#xff1a;生成训练标签时显存爆满、推理速度慢、甚至因为资源不足而中断进程。传统…...

别再死记硬背了!用Multisim仿真带你玩转电容三端LC振荡器(考毕兹/克拉泼/西勒电路对比)

用Multisim仿真解锁电容三端LC振荡器的实战奥秘 当你在实验室里第一次看到示波器上跳动的正弦波时&#xff0c;那种兴奋感是课本上的公式永远无法给予的。作为电子工程师&#xff0c;我们追求的不只是理解原理&#xff0c;更是要亲手"驯服"这些电路&#xff0c;让它…...

Pixel 7 实战:从源码编译到刷入 Android 15 UserDebug 的避坑指南

1. 环境准备&#xff1a;避开依赖地狱的三大陷阱 第一次给Pixel 7编译Android 15 UserDebug版本时&#xff0c;我踩遍了所有能踩的坑。最让人崩溃的不是代码编译失败&#xff0c;而是环境配置这种本该简单的步骤。先说硬件要求&#xff1a;至少16GB内存200GB SSD&#xff0c;我…...

英雄联盟全能助手:League-Toolkit一键提升游戏体验的终极指南

英雄联盟全能助手&#xff1a;League-Toolkit一键提升游戏体验的终极指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想要在英雄联盟中获得…...

计算机组成原理视角:解析GTE-Base-ZH在GPU上的计算与存储

计算机组成原理视角&#xff1a;解析GTE-Base-ZH在GPU上的计算与存储 最近在折腾一些文本嵌入模型&#xff0c;发现大家讨论模型效果的多&#xff0c;但聊它背后在硬件上怎么“跑”起来的少。这就像开车只关心能跑多快&#xff0c;却不看发动机是怎么工作的。今天&#xff0c;…...

解锁Greasy Fork:四大场景化应用指南

解锁Greasy Fork&#xff1a;四大场景化应用指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork作为开源用户脚本平台&#xff0c;为浏览器功能扩展提供了安全可靠的解决方案…...

lite-avatar形象库真实体验:如何快速找到并应用心仪的数字人形象

lite-avatar形象库真实体验&#xff1a;如何快速找到并应用心仪的数字人形象 1. 引言&#xff1a;为什么选择lite-avatar形象库&#xff1f; 在数字人应用开发中&#xff0c;找到高质量且风格合适的虚拟形象往往是最耗时的环节之一。传统方式需要从零开始训练模型&#xff0c…...

终极Android UI开发指南:XUI框架与Material Design完美融合实战

终极Android UI开发指南&#xff1a;XUI框架与Material Design完美融合实战 【免费下载链接】XUI &#x1f48d;A simple and elegant Android native UI framework, free your hands! (一个简洁而优雅的Android原生UI框架&#xff0c;解放你的双手&#xff01;) 项目地址: h…...

Qwen3-0.6B-FP8部署教程:利用vLLM提升推理速度,Chainlit美化交互

Qwen3-0.6B-FP8部署教程&#xff1a;利用vLLM提升推理速度&#xff0c;Chainlit美化交互 1. 环境准备与快速部署 1.1 硬件与系统要求 显卡&#xff1a;NVIDIA GPU&#xff08;RTX 3060 6GB起步&#xff0c;推荐RTX 4090/3090&#xff09;驱动&#xff1a;NVIDIA Driver ≥ 5…...

OpenClaw新手避坑指南:Qwen3.5-9B对接常见问题解决方案

OpenClaw新手避坑指南&#xff1a;Qwen3.5-9B对接常见问题解决方案 1. 为什么需要这份指南 上周我在本地部署OpenClaw对接Qwen3.5-9B模型时&#xff0c;连续踩了五个坑。从安装报错到模型连接超时&#xff0c;每个问题都消耗了我至少两小时的排查时间。这种经历让我意识到&am…...