Publié le :

Macro return_annualized - Calcul de rendements annualisés

En attente de validation
Cette macro permet de calculer le rendement annualisé selon deux méthodes : 'DISCRETE' (chaînage discret utilisant la moyenne géométrique) ou 'LOG' (chaînage logarithmique utilisant la moyenne arithmétique). Elle prend en compte un facteur d'échelle (scale) pour ajuster la périodicité (ex: 252 pour journalier, 12 pour mensuel). Elle dépend de macros utilitaires externes (%get_number_column_names, %ranname, %geo_mean).
Analyse des données

Type : EXTERNE


Les données sont fournies dynamiquement via le paramètre de macro '&returns'. Aucune donnée n'est codée en dur.

1 Bloc de code
MACRO DEFINITION
Explication :
Définition de la macro et initialisation des variables locales. Identification des colonnes numériques à traiter via l'appel à une macro utilitaire externe '%get_number_column_names'.
Copié !
1%macro return_annualized(returns,
2 scale= 1,
3 method= DISCRETE,
4 dateColumn= DATE,
5 outData= annualized_returns);
6 
7%local _temp nv vars i;
8%let vars=%get_number_column_names(_table=&returns,_exclude=&dateColumn);
9%put VARS IN return_annualized: (&vars);
10 
11%let _temp=%ranname();
12%let nv = %sysfunc(countw(&vars));
13%let i = %ranname();
2 Bloc de code
DATA STEP Data
Explication :
Branche de calcul pour la méthode 'DISCRETE'. Elle appelle la macro '%geo_mean' (externe) puis applique la formule d'annualisation composée ((1+r)^scale - 1) dans un Data Step.
Copié !
1/*DISCRETE*/
2%IF %upcase(&method) = DISCRETE %THEN %DO;
3 %geo_mean(&returns,dateColumn=&dateColumn,outData= &_temp);
4 
5 DATA &outData(keep=_stat_ &vars);
6 FORMAT _STAT_ $32.;
7 SET &_temp;
8 array ret[&nv] &vars;
9 DO &i=1 to &nv;
10 ret[&i]=(1+ret[&i])**&scale-1;
11 END;
12 _stat_="Annualized Return";
13 RUN;
14%END;
3 Bloc de code
PROC MEANS Data
Explication :
Branche de calcul pour la méthode 'LOG'. Elle utilise PROC MEANS pour obtenir la moyenne arithmétique, puis multiplie par le facteur d'échelle (r * scale) dans un Data Step.
Copié !
1/*LOG*/
2%IF %upcase(&method) = LOG %THEN %DO;
3 PROC MEANS DATA=&returns mean noprint;
4 OUTPUT out=&_temp mean=;
5 RUN;
6 
7 DATA &outData(keep=_stat_ &vars);
8 FORMAT _STAT_ $32.;
9 SET &_temp;
10 array ret[&nv] &vars;
11 DO &i=1 to &nv;
12 ret[&i]=ret[&i]*&scale;
13 END;
14 _stat_="Annualized Return";
15 RUN;
16%END;
4 Bloc de code
PROC DATASETS
Explication :
Nettoyage des tables temporaires générées durant l'exécution de la macro.
Copié !
1PROC DATASETS lib= work nolist;
2delete &_temp;
3RUN;
4QUIT;
5%mend;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2015 by The Financial Risk Group, Cary, NC, USA.


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Lors de l'utilisation de la méthode DISCRETE, assurez-vous que les rendements en entrée sont exprimés en décimales (ex: 0.05 pour 5%). Pour des données très volatiles, la différence entre l'annualisation discrète et logarithmique peut devenir significative ; la cohérence avec vos autres indicateurs de risque (comme la volatilité annualisée) est donc primordiale. »