LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

Odaily星球日报Publié le 2024-01-24Dernière mise à jour le 2024-01-24

Résumé

本篇将研究因子好坏的判断方法及因子对于收益率的预测能力。

前言

书接上回,关于《用多因子模型构建强大的加密资产投资组合》系列文章中,我们已经发布了两篇:《理论基础篇》《数据预处理篇》

本篇是第三篇:因子有效性检验。

在求出具体的因子值后,需要先对因子进行有效性检验,筛选符合显著性、稳定性、单调性、收益率要求的因子;因子有效性检验通过分析本期因子值与预期收益率的关系,从而确定因子的有效性。主要有 3 种经典方法:

  • IC / IR 法:IC / IR 值为因子值与预期收益率的相关系数,越大因子表现越好。

  • T 值(回归法):T 值体现下期收益率对本期因子值线性回归后系数的显著性,通过比较该回归系数是否通过 t 检验,来判断本期因子值对下期收益率的贡献程度,通常用于多元(即多因子)回归模型。

  • 分层回测法:分层回测法基于因子值对 token 分层,再计算每层 token 的收益率,从而判断因子的单调性

一、IC / IR 法

(1)IC / IR 的定义

IC:即信息系数 Information Coefficient,代表因子预测 Tokens 收益的能力。某一期 IC 值为本期因子值和下期收益率的相关系数。

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

IC 越接近 1 ,说明因子值和下期收益率的正相关性越强,IC= 1 ,表示该因子选币 100% 准确,对应的是排名分最高的 token,选出来的 token 在下个调仓周期中,涨幅最大;

IC 越接近-1 ,说明因子值和下期收益率的负相关性越强,如果 IC=-1 ,则代表排名分最高的 token,在下个调仓周期中,跌幅最大,是一个完全反指的指标;

若 IC 越接近 0 ,则说明该因子的预测能力极其弱,表明该因子对于 token 没有任何的预测能力。

IR:信息比率 information ratio,代表因子获取稳定 Alpha 的能力。IR 为所有期 IC 均值除以所有期 IC 标准差。

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

当 IC 的绝对值大于 0.05 (0.02) 时,因子的选股能力较强。当 IR 大于 0.5 时,因子稳定获取超额收益能力较强。

(2)IC 的计算方式

  • Normal IC (Pearson correlation):计算皮尔森相关系数,最经典的一种相关系数。但该计算方式存在较多假设前提:数据连续,正态分布,两个变量满足线性关系等等。

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

  • Rank IC (Spearman's rank coefficient of correlation):计算斯皮尔曼秩相关系数,先对两个变量排序,再根据排序后的结果求皮尔森相关系数。斯皮尔曼秩相关系数评估的是两个变量之间的单调关系,并且由于转换为排序值,受数据异常值影响较小;而皮尔森相关系数评估的是两个变量之间的线性关系,不仅对原始数据有一定的前提条件,并且受数据异常值影响较大。在现实计算中,求 rank IC 更符合。

(3)IC / IR 法代码实现

创建一个按日期时间升序排列的唯一日期时间值的列表--记录调仓日期 def choosedate(dateList, cycle)

class TestAlpha(object):
   def __init__(self, ini_data):
       self.ini_data = ini_data    
   def chooseDate(self, cycle, start_date, end_date):
       '''
       cycle: day, month, quarter, year
       df: 原始数据框 df,date 列的处理
       '''
       chooseDate = []
       dateList = sorted(self.ini_data[self.ini_data['date'].between(start_date, end_date)]['date'].drop_duplicates().values)
       dateList = pd.to_datetime(dateList)
       for i in range(len(dateList)-1):
           if getattr(dateList[i], cycle) != getattr(dateList[i + 1 ], cycle):
                   chooseDate.append(dateList[i])
           
       chooseDate.append(dateList[-1 ])
       chooseDate = [date.strftime('%Y-%m-%d') for date in chooseDate]
       return chooseDate      
     def ICIR(self, chooseDate, factor):
       # 1.先展示每个调仓日期的 IC,即 ICt
       testIC = pd.DataFrame(index=chooseDate, columns=['normalIC','rankIC'])
       dfFactor = self.ini_data[self.ini_data['date'].isin(chooseDate)][['date','name','price', factor]]
       for i in range(len(chooseDate)-1):
           # ( 1) normalIC
           X = dfFactor[dfFactor['date'] == chooseDate[i]][['date','name','price', factor]].rename(columns={'price':'close 0'})
           Y = pd.merge(X, dfFactor[dfFactor['date'] == chooseDate[i+ 1 ]][['date','name','price']], on=['name']).rename(columns={'price':'close 1'})
           Y['returnM'] = (Y['close 1'] - Y['close 0']) / Y['close 0']
           Yt = np.array(Y['returnM'])
           Xt = np.array(Y[factor])
           Y_mean = Y['returnM'].mean()
           X_mean = Y[factor].mean()
           num = np.sum((Xt-X_mean)*(Yt-Y_mean))
           den = np.sqrt(np.sum((Xt-X_mean)** 2)*np.sum((Yt-Y_mean)** 2))
           normalIC = num / den # pearson correlation
           # ( 2) rankIC
           Yr = Y['returnM'].rank()
           Xr = Y[factor].rank()
           rankIC = Yr.corr(Xr)
           testIC.iloc[i] = normalIC, rankIC    
       testIC  =testIC[:-1 ]
       # 2.基于 ICt,求['IC_Mean', 'IC_Std','IR','IC<0 占比--因子方向','|IC|>0.05 比例']
       '''
       ICmean: |IC|>0.05, 因子的选币能力较强,因子值与下期收益率相关性高。|IC|<0.05,因子的选币能力较弱,因子值与下期收益率相关性低
       IR: |IR|>0.5,因子选币能力较强, IC 值较稳定。|IR|<0.5, IR 值偏小,因子不太有效。若接近 0,基本无效
       IClZero(IC less than Zero): IC<0 占比接近一半->因子中性.IC>0 超过一大半,为负向因子,即因子值增加,收益率降低
       ICALzpF(IC abs large than zero poin five): |IC|>0.05 比例偏高,说明因子大部分有效
       '''
       IR = testIC.mean()/testIC.std()
       IClZero = testIC[testIC<0 ].count()/testIC.count()
       ICALzpF = testIC[abs(testIC)>0.05 ].count()/testIC.count()
       combined =pd.concat([testIC.mean(), testIC.std(), IR, IClZero, ICALzpF], axis= 1)
       combined.columns = ['ICmean','ICstd','IR','IClZero','ICALzpF']
       # 3.IC 调仓期内 IC 的累积图  
       print("Test IC Table:")
       print(testIC)
       print("Result:")
       print('normal Skewness:', combined['normalIC'].skew(),'rank Skewness:', combined['rankIC'].skew())
       print('normal Skewness:', combined['normalIC'].kurt(),'rank Skewness:', combined['rankIC'].kurt())
       return combined, testIC.cumsum().plot()

二、T 值检验(回归法)

T 值法同样检验本期因子值和下期收益率关系,但与 ICIR 法分析二者的相关性不同,t 值法将下期收益率作为因变量 Y,本期因子值作为自变量 X,由 Y 对 X 回归,对回归出因子值的回归系数进行 t 检验,检验其是否显著异于 0 ,即本期因子是否影响下期收益率。

该方法本质是对双变量回归模型的求解,具体公式如下:

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

(1)回归法理论

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

(2)回归法代码实现

def regT(self, chooseDate, factor, return_ 24 h):
       testT = pd.DataFrame(index=chooseDate, columns=['coef','T'])
       for i in range(len(chooseDate)-1):
           X = self.ini_data[self.ini_data['date'] == chooseDate[i]][factor].values
           Y = self.ini_data[self.ini_data['date'] == chooseDate[i+ 1 ]][return_ 24 h].values
           b, intc = np.polyfit(X, Y, 1) # 斜率
           ut = Y - (b * X + intc)
           # 求 t 值 t = (\hat{b} - b) / se(b)
           n = len(X)
           dof = n - 2 # 自由度
           std_b = np.sqrt(np.sum(ut** 2) / dof)
           t_stat = b / std_b
           testT.iloc[i] = b, t_stat
       testT = testT[:-1 ]
       testT_mean = testT['T'].abs().mean()
       testT L1 96 = len(testT[testT['T'].abs() > 1.96 ]) / len(testT)
       
       print('testT_mean:', testT_mean)
       print('T 值大于 1.96 的占比:', testT L1 96)
       return testT

三、分层回测法

分层指对所有 token 分层,回测指计算每层 token 组合的收益率。

(1)分层

首先获取 token 池对应的因子值,通过因子值对 token 进行排序。升序排序,即因子值较小的排在前面,根据排序对 token 进行等分。第 0 层 token 的因子值最小,第 9 层 token 的的因子值最大。

理论上“等分”是指均等分拆 token 的个数,即每层 token 个数相同,借助分位数实现。现实中 token 总数不一定是层数的倍数,即每层 token 个数不一定相等。

(2)回测

将 token 按因子值升序分完 10 组后,开始计算每组 token 组合的收益率。该步骤将每层的 token 当成一个投资组合(不同回测期,每层的 token 组合所含的 token 都会有变化),并计算该组合整体的下期收益率。ICIR、t 值分析的是当期因子值和下期整体的收益率,但分层回测需要计算回测时间内每个交易日的分层组合收益率。由于有很多回测期有很多期,在每一期都需要进行分层和回测。最后对每一层的 token 收益率进行累乘,计算出 token 组合的累积收益率。

理想状态下,一个好的因子,第 9 组的曲线收益最高,第 0 组的曲线收益最低。

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

第 9 组减去第 0 组(即多空收益)曲线呈现单调递增。

LUCIDA:如何利用多因子策略构建强大的加密资产投资组合(因子有效性检验篇)

(3)分层回测法代码实现

def layBackTest(self, chooseDate, factor):
       f = {}
       returnM = {}
       for i in range(len(chooseDate)-1):
           df 1 = self.ini_data[self.ini_data['date'] == chooseDate[i]].rename(columns={'price':'close 0'})
           Y = pd.merge(df 1, self.ini_data[self.ini_data['date'] == chooseDate[i+ 1 ]][['date','name','price']], left_on=['name'], right_on=['name']).rename(columns={'price':'close 1'})
           f[i] = Y[factor]
           returnM[i] = Y['close 1'] / Y['close 0'] -1 
       labels = ['0','1','2','3','4','5','6','7','8','9']
       res = pd.DataFrame(index=['0','1','2','3','4','5','6','7','8','9','LongShort'])
       res[chooseDate[ 0 ]] = 1 
       for i in range(len(chooseDate)-1):
           dfM = pd.DataFrame({'factor':f[i],'returnM':returnM[i]})
           dfM['group'] = pd.qcut(dfM['factor'], 10, labels=labels)
           dfGM = dfM.groupby('group').mean()[['returnM']]
           dfGM.loc['LongShort'] = dfGM.loc['0']- dfGM.loc['9']res[chooseDate[i+ 1 ]] = res[chooseDate[ 0 ]] * ( 1 + dfGM['returnM']) data = pd.DataFrame({'分层累积收益率':res.iloc[: 10,-1 ],'Group':[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]})
       df 3 = data.corr()
       print("Correlation Matrix:")
       print(df 3)
       return res.T.plot(title='Group backtest net worth curve')

原文链接

Lectures associées

La Haute Cour d'Australie offre une victoire majeure à l'ASIC dans l'affaire du produit à rendement crypto de Block Earner

La Haute Cour d’Australie a donné raison à l’autorité des marchés financiers (ASIC) dans une affaire concernant le produit à rendement fixe « Earner » de Block Earner. La cour a jugé à l’unanimité que ce produit crypto, proposé entre mars et novembre 2022, constituait un produit financier et un dérivé, soumis à la réglementation existante. Block Earner aurait donc dû détenir une licence de services financiers australienne. L’affaire est renvoyée devant la Cour fédérale pour déterminer les sanctions. Ce verdict établit un précédent important : il confirme que les produits crypto offrant des rendements structurés ou une exposition de type dérivé peuvent être soumis aux règles de licence, indépendamment de leur étiquette technologique. Bien que le produit en cause ne soit plus commercialisé, la décision renforce la position de l’ASIC pour les futurs cas similaires et s’inscrit dans une tendance mondiale de régulation des produits de rendement crypto. Pour les entreprises, cela signifie que les offres générant des rendements via le déploiement d’actifs par un tiers risquent d’être considérées comme des produits d’investissement. Pour les consommateurs, cela rappelle que ces produits comportent des risques spécifiques et exigent une structure réglementaire appropriée. L’industrie crypto australienne devra désormais composer avec ce cadre réglementaire plus strict.

bitcoinistIl y a 2 h

La Haute Cour d'Australie offre une victoire majeure à l'ASIC dans l'affaire du produit à rendement crypto de Block Earner

bitcoinistIl y a 2 h

Les CPU retrouvent leur place à la table : le coup d'envoi d'un spectacle « d'accession au pouvoir » de 170 milliards de dollars

La scène des processeurs (CPU) pour serveurs connaît une transformation majeure, catalysée par l'ère de l'IA Agent (agente). Alors que le GPU était au cœur de l'entraînement des grands modèles, le passage à la phase d'inférence et aux tâches d'Agent complexes (appels d'outils, raisonnements multi-étapes) renverse la donne : le CPU assume désormais 70% à plus de 90% de la charge de travail. Ce changement se traduit par un besoin accru de cœurs, de mémoire et de performances de gestion des données intermédiaires (comme le KV Cache), dépassant souvent la capacité mémoire limitée des GPU. Cette nouvelle dynamique modifie radicalement le ratio CPU/GPU dans les serveurs IA, passant d'environ 1:8 pour l'entraînement à 1:4 pour l'inférence, et approchant même 1:1 pour les scénarios Agent. Cette demande explosive, qualifiée de "variable la plus inattendue du cycle actuel de l'IA", entraîne une pression sur l'offre et une hausse des prix de 10% à 15% pour les CPU serveurs, du jamais-vu depuis plus de dix ans. Les acteurs historiques (Intel, AMD) et nouveaux (NVIDIA avec sa puce ARM Vera) se positionnent sur ce marché dont la taille potentielle est réévaluée à la hausse, pouvant atteindre 1700 milliards de dollars d'ici 2030 selon certaines analyses. Cette croissance provient non seulement des CPU d'accompagnement des GPU en cluster, mais aussi d'un nouveau segment : les nœuds CPU indépendants dédiés à l'exécution des Agents. En Chine, cette tendance mondiale coïncide avec les impératifs du "Xin Chuang" (remplacement des imports), offrant une opportunité aux fabricants locaux de CPU (comme Hygon, Huawei Kunpeng) et aux entreprises de la chaîne d'approvisionnement (emballage/test, puces d'interface mémoire). La maturité accélérée des outils logiciels pour les puces domestiques est un signe positif pour l'écosystème. L'enjeu n'est plus la performance brute d'une puce unique, mais la capacité de synergie entre CPU et GPU pour l'IA à grande échelle.

marsbitIl y a 5 h

Les CPU retrouvent leur place à la table : le coup d'envoi d'un spectacle « d'accession au pouvoir » de 170 milliards de dollars

marsbitIl y a 5 h

TechFlow Intelligence : Le Directeur AI d'AMD critique publiquement Claude Code pour être "devenu plus bête et plus paresseux", Trump affirme qu'un cessez-le-feu général aura lieu dans le détroit d'Ormuz mais que 80 mines y restent

Selon un rapport exclusif de Wired, SK Telecom, partenaire stratégique d'Anthropic, fait l'objet d'un examen des contrôles à l'exportation américains concernant le transfert technologique potentiel du modèle Mythos. Par ailleurs, Z.AI a lancé le modèle GLM-5.2, rivalisant avec Claude Opus et n'utilisant aucun puce Nvidia, illustrant une voie chinoise en matière de puissance de calcul. Dans le secteur des semi-conducteurs, Amazon envisage de commercialiser ses puces AI maison, tandis que des allégations américaines sur des équipements ASML avancés en Chine sont contestées par l'entreprise. Du côté de la sécurité, GitHub a vu plus de 10 000 dépôts distribuer des logiciels malveillants, et Apple a corrigé une faille critique d'écoute sur les Beats Studio Buds. Sur les marchés, les actions semi-conducteurs ont bondi, notamment Intel (+10.6%). Sur le plan géopolitique, bien qu'un accord ait été annoncé concernant le détroit d'Hormuz, l'association Intertanko signale qu'environ 80 mines y restent actives, retardant le transit de pétroliers chargés de 80 millions de barils. L'Iran a reporté un déplacement diplomatique en Suisse, et l'ancien président Trump a qualifié l'accord avec l'Iran de "reddition inconditionnelle". En résumé, tandis que les tensions géopolitiques laissent persister des incertitudes opérationnelles, les avancées et restructurations technologiques, notamment dans les puces et l'IA, se poursuivent à un rythme soutenu.

marsbitIl y a 5 h

TechFlow Intelligence : Le Directeur AI d'AMD critique publiquement Claude Code pour être "devenu plus bête et plus paresseux", Trump affirme qu'un cessez-le-feu général aura lieu dans le détroit d'Ormuz mais que 80 mines y restent

marsbitIl y a 5 h

La Corée du Sud se prépare à réguler les transferts cryptographiques transfrontaliers dans le cadre d'un nouveau système

La Corée du Sud prévoit d'inclure les entreprises de fintech dans son nouveau cadre d'autorisation pour les transferts d'actifs virtuels, qui doit entrer en vigueur en décembre. Cette décision suit l'introduction d'une période de grâce de six mois dans l'amendement de la loi sur les transactions de change. À partir de décembre, les entreprises effectuant des transferts transfrontaliers via des actifs virtuels devront s'enregistrer auprès du ministère de l'Économie et des Finances et déclarer leurs transactions via le système de déclaration des changes coréen. Ce cadre réglementaire vise à placer ces transferts sous surveillance officielle, les autorités ayant constaté que de nombreux transferts d'actifs numériques échappaient au contrôle des changes, présentant des risques de blanchiment d'argent et d'activités criminelles. Initialement, les règles s'appliquaient principalement aux plateformes d'échange de cryptomonnaies. Cependant, les régulateurs sud-coréens envisagent désormais d'élargir le champ des entités éligibles pour inclure des acteurs non traditionnels, comme les fintechs, si elles peuvent effectuer ces transferts de manière efficace. Le ministère et la Banque de Corée collaborent avec les acteurs du secteur pour finaliser les règles d'application avant le lancement en décembre. Cette initiative s'inscrit dans un contexte plus large de renforcement de la supervision des actifs numériques par la Corée du Sud, qui travaille également sur une réglementation pour les produits financiers tokenisés.

TheNewsCryptoIl y a 6 h

La Corée du Sud se prépare à réguler les transferts cryptographiques transfrontaliers dans le cadre d'un nouveau système

TheNewsCryptoIl y a 6 h

Trading

Spot
Futures
活动图片