Prédire les crises financières avec Python

Au 9 mars 2020, nous observons une forte baisse des marchés américains, à commencer par un sommet historique au 20 février 2020, qui se situe actuellement à environ -16%. La nouvelle était pleine de gros titres sur la récession imminente due au coronavirus, la Russie s'est retirée de l'accord Opec +, qui a touché les prix du pétrole (-20% par jour) et demain (10 mars 2020), le marché du MICEX devrait également baisser de 20%, à en juger par cotations de nos actions sur les marchés occidentaux.


Une récession mondiale nous attendra-t-elle? Dans cet article, nous allons essayer de comprendre comment vous pouvez voir à l'avance les signaux du début de la récession en utilisant Python.

Pour répondre à cette question, nous allons essayer d'utiliser le rendement des obligations, des actions et l'analyse technique. Nous utiliserons les données historiques du marché financier américain comme le premier plus grand marché boursier au monde. En fait, si une récession commence aux États-Unis, elle commencera partout dans le monde (comme ce fut le cas en 2008). De plus, il est pratique pour nous qu'il existe des données sur le marché américain depuis des décennies, ce qui nous permettra d'analyser sur une période historique importante.

Nous prendrons les données historiques de Yahoo Finance en utilisant la bibliothèque yfinance , sur le site de la Fed. Réserve américaine utilisant la bibliothèque fredapi et du site Quandl avec diverses informations financières via pandas_datareader. Veuillez noter que pour Fed et Quandl, vous devez vous inscrire pour recevoir une clé API (c'est gratuit).

Toutes les crises financières aux États-Unis seront marquées dans les zones grises directement sur les graphiques.

Importer des bibliothèques
from fredapi import Fred
import pandas as pd
import os
import pandas_datareader.data as web
import pandas_datareader as pdr
%matplotlib inline
from matplotlib import pyplot as plt
from datetime import date
import yfinance
import numpy as np

api = 'YOUR API HERE'
os.environ["QUANDL_API_KEY"] = 'YOUR API HERE'
os.environ["TIINGO_API_KEY"] = 'YOUR API HERE'

fred = Fred(api_key=api)


Nous obtenons des données historiques pour le S & P500 avec Yahoo, les écarts de rendement des obligations avec FRED et l'indice de rendement cumulé pour les obligations avec FRED:

GSPC_h = yfinance.download("^GSPC", start="1962-01-01", end="2020-03-09") #SNP500
T10YFF = fred.get_series('T10YFF', observation_start='1962-01-01', observation_end='2020-03-09') #10YB-FFR
T10Y2Y = fred.get_series('T10Y2Y', observation_start='1976-06-01', observation_end='2020-03-09') #10YB-2YB
# ICE BofA US Corp 10-15yr Total Return Index Value
BAMLCC7A01015YTRIV = fred.get_series('BAMLCC7A01015YTRIV', observation_start='1962-01-01', observation_end='2020-03-09')

Prime de risque


La prime de risque est un indicateur qui reflète la rentabilité supplémentaire qu'un investisseur recevra en assumant un risque accru.

C'est ainsi que fonctionnent les marchés financiers - plus le retour sur investissement est élevé, plus le risque est élevé.

Pour calculer la prime de risque, il est nécessaire de soustraire du rendement attendu de l'actif risqué le taux de rendement sans risque.

Pour le marché américain, le taux de rendement sans risque est le taux de réserve de la Fed américaine (un analogue de notre taux directeur) - FED.

La prime de risque pour les actions et les obligations est considérée différemment.
Pour les obligations: rendement des obligations (rendement) moins FED.
Pour les actions: indicateur Bénéfice / Prix (E / P) moins FED,
où le bénéfice est le bénéfice de l'entreprise pour l'année, le prix est le prix de l'action au moment où l'indicateur est calculé.

Pour calculer la rentabilité d'une action, nous ne prenons pas les dividendes versés comme rentabilité, mais le profit reçu par l'entreprise, car les dividendes ne sont qu'une partie du bénéfice que l'entreprise verse aux actionnaires. Devenir propriétaire de la société par l'achat de ses actions, en fait, le revenu final pour nous sera précisément le bénéfice qui sera intégralement réparti entre les actionnaires au moment de la liquidation de la société.

Nous obtenons E / P pour S & P500 (SP500_EARNINGS_YIELD_MONTH), le taux sans risque (FED Funds Rate) et le rendement des obligations de sociétés d'un large marché (Baa Bonds Yield):

# E/P
symbol = 'MULTPL/SP500_EARNINGS_YIELD_MONTH'
SP500_EARNINGS_YIELD_MONTH = web.DataReader(symbol, 'quandl', '1962-01-01', '2020-03-09')
# FED Funds Rate
FEDFUNDS = fred.get_series('FEDFUNDS', observation_start='1962-01-01', observation_end='2020-03-09')
# Baa Bonds Yield
BAA = fred.get_series('BAA', observation_start='1962-01-01', observation_end='2020-03-09')

Nous calculons la prime de risque en tant que bénéfice moins le taux sans risque:

#     
risk_premium = pd.concat([SP500_EARNINGS_YIELD_MONTH, FEDFUNDS],axis=1).fillna(method='bfill')
risk_premium['premium'] = risk_premium['Value'] - risk_premium[0]

#     
risk_premium_b = pd.concat([BAA, FEDFUNDS],axis=1).fillna(method='bfill')
risk_premium_b.columns = ['BAA', 'FEDFUNDS']
risk_premium_b['premium_b'] = risk_premium_b['BAA'] - risk_premium_b['FEDFUNDS']

Voyons ce qui s'est passé séparément pour les actions et les obligations.

Pour les actions:

Code graphique
fig, ax = plt.subplots(figsize=(17,6))

line1, = ax.plot(risk_premium['premium'],linewidth=1)
line1.set_label('risk_premium_stocks')

line2, = ax.plot(SP500_EARNINGS_YIELD_MONTH,linewidth=1)
line2.set_label('SP500_EARNINGS_YIELD_MONTH')
ax.legend(loc='upper left')

par1 = ax.twinx()
line3, = par1.plot(np.log(GSPC_h['Close']),linewidth=0.7, color='red')
line3.set_label('S&P500')
par1.legend(loc='upper left', bbox_to_anchor=(0, 0, 1, 0.88))

plt.xlim(left=date(1962, 1, 1), right=date(2020, 3, 9))
ax.axhline(linewidth=2, color='black', alpha=0.7)
ax.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1981, 7, 1), date(1982, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1980, 1, 1), date(1980, 7, 1), alpha=0.3, color='grey')
ax.axvspan(date(1973, 12, 1), date(1975, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1969, 12, 1), date(1970, 11, 1), alpha=0.3, color='grey')

ax.set_xlabel('')
ax.set_ylabel('  , %')
par1.set_ylabel('Log  S&P500')

plt.show()



Pour les obligations:

Code graphique
fig, ax = plt.subplots(figsize=(17,6))

line1, = ax.plot(risk_premium_b['premium_b'][date(1987, 12, 1):],linewidth=1, color='k')
line1.set_label('risk_premium_bonds')
ax.legend(loc='upper left', bbox_to_anchor=(0, 0, 1, 0.95))

par1 = ax.twinx()
line2, = par1.plot(np.log(BAMLCC7A01015YTRIV),linewidth=0.7, color='green')
line2.set_label('Log ICE BofA US Corp 10-15yr Total Return Index Value')
par1.legend(loc='upper left')
plt.xlim(left=date(1987, 12, 1), right=date(2020, 3, 9))

ax.axhline(y=1.5, linewidth=2, color='red', ls='--', alpha=0.7)

ax.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax.axhline(linewidth=2, color='black', alpha=0.7)

ax.set_xlabel('')
ax.set_ylabel('  , %')
par1.set_ylabel('Log  BofA')

plt.show()




Comme nous pouvons le voir, les périodes antérieures à la crise sont des domaines où la prime de risque est négative pour les actions et la prime de risque est réduite pour les obligations.

Dans le même temps, pour les obligations, pas toujours une prime de risque réduite n'est un signal pour le début d'une crise sur le marché obligataire (l'indice BofA n'a baissé qu'en 2008), mais une prime réduite sur le marché boursier est presque toujours (sauf pour la période après la crise au début des années 1980, lorsque une prime négative était détenue depuis longtemps) entraîne une baisse de la valeur des actions.

Que signifie une prime de risque négative pour les actions?

Lors de l'achat d'une action, nous obtenons un rendement inférieur au taux sans risque du marché. Dans le même temps, prendre l'entière responsabilité des risques de fluctuations du cours de l'action et des pertes potentielles. Ce n'est pas une situation standard, les investisseurs comprennent que la prime de risque ne peut pas être négative, de sorte que les marchés se rendent compte que la valeur actuelle des actions est trop élevée et que les ventes commencent. La chute s'intensifie après que les investisseurs d'un large éventail (les gens ordinaires, pas les investisseurs institutionnels) ont commencé à paniquer, vendant leurs portefeuilles et exacerbant la chute. Ainsi, la réaction des marchés est rapide et forte.
Il convient de noter que la baisse du marché ne revient pas au niveau précédent de la prime de risque, mais se produit toujours beaucoup plus fort, ce qui augmente considérablement la prime de risque et renforce à nouveau l'attrait des titres pour les investisseurs.

De plus, si nous regardons les primes de risque pour les actions et les obligations sur un graphique, nous verrons que la prime de risque pour les obligations a traditionnellement été plus élevée que pour les actions, cependant, au cours des 5 dernières années, elles se sont synchronisées et toutes deux tendent progressivement vers zéro:

Code graphique
fig, ax = plt.subplots(figsize=(17,6))

line1, = ax.plot(risk_premium['premium'],linewidth=1)
line1.set_label('risk_premium_stocks')

par1 = ax.twinx()
line3, = par1.plot(np.log(GSPC_h['Close']),linewidth=0.7, color='red')
line3.set_label('S&P500')
par1.legend(loc='upper left', bbox_to_anchor=(0, 0, 1, 0.88))

line2, = ax.plot(risk_premium_b['premium_b'],linewidth=1, color='k')
line2.set_label('risk_premium_bonds')
ax.legend(loc='upper left')
plt.xlim(left=date(1968, 1, 1), right=date(2020, 3, 9))

ax.axhline(linewidth=2, color='black', alpha=0.7)
ax.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1981, 7, 1), date(1982, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1980, 1, 1), date(1980, 7, 1), alpha=0.3, color='grey')
ax.axvspan(date(1973, 12, 1), date(1975, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1969, 12, 1), date(1970, 11, 1), alpha=0.3, color='grey')

ax.set_xlabel('')
ax.set_ylabel('  , %')
par1.set_ylabel('Log  S&P500')

plt.show()




Au 9 mars 2020, malgré une forte et forte baisse du marché boursier américain, les rendements boursiers sont encore loin de la zone négative, ce qui donne un signal encourageant.

Écart des rendements du Trésor


Un autre indicateur de la situation du marché d'avant la crise est la différence entre les rendements des bons du Trésor à long terme et à court terme.

Le moins bruyant et le plus pratique est l'écart entre les rendements des bons du Trésor à 10 ans et à 2 ans:

Code graphique
fig, ax = plt.subplots(figsize=(17,6))
par1 = ax.twinx()
line, = ax.plot(pd.DataFrame(T10Y2Y),linewidth=0.4)
line.set_label('10YB-2YB')
ax.legend(loc='best', bbox_to_anchor=(0.5, 0., 0.5, 0.1))

line1, = par1.plot(np.log(GSPC_h['Close']),linewidth=0.7, color='red')
line1.set_label('S&P500')
par1.legend(loc='best', bbox_to_anchor=(0.5, 0., 0.5, 0.18))
plt.xlim(left=date(1976, 1, 1), right=date(2020, 3, 9))
plt.ylim(bottom=4)
ax.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1981, 7, 1), date(1982, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1980, 1, 1), date(1980, 7, 1), alpha=0.3, color='grey')
ax.axvspan(date(1973, 12, 1), date(1975, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1969, 10, 1), date(1970, 11, 1), alpha=0.3, color='grey')
ax.axhline(linewidth=2, color='black', alpha=0.7)
plt.scatter(date(2019, 9, 1), 6., color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(2007, 1, 1), 6., color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(2000, 1, 1), 5.9, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1998, 8, 1), 5.9, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1989, 4, 1), 5.8, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1981, 1, 1), 5.9, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1978, 11, 1), 5.9, color='orange', s=500, marker='o', alpha=0.5)

ax.set_xlabel('')
ax.set_ylabel('  , %')
par1.set_ylabel('Log  S&P500')

plt.show()




Cet indicateur est le plus véridique d'un point de vue historique et prédit les 7 dernières crises financières.

L'écart entre les rendements obligataires dans ce cas reflète l'humeur des investisseurs - s'ils croient que l'économie va bientôt se détériorer, ils commencent à transférer de l'argent des obligations à court terme (avec une maturité de 2 ans) vers des instruments à long terme (avec une maturité de 10 ans) avec un rendement fixe L'émetteur le plus fiable est le Trésor américain.

L'achat d'obligations à long terme affecte leur rendement, car l'achat d'obligations pour des montants importants en espèces entraîne une augmentation du coût de l'obligation. Lorsque le coupon est à valeur fixe, l'appréciation du corps de l'obligation entraîne une baisse de son rendement.
Pour les obligations à court terme, qui sont vendues dans ce cas, la situation est inverse - le corps commence à devenir moins cher, dans un coupon fixe, respectivement, le rendement commence à augmenter.

Cependant, FRED ne fournit pas d'informations sur cet écart au-delà de 1976, par conséquent, à des fins d'illustration, nous pouvons prendre le rendement des obligations du Trésor à 10 ans moins le taux FED (au lieu des obligations à court terme à 2 ans) pour voir ce qui s'est passé depuis 1962 et couvrir 2 crises supplémentaires. :

Code graphique
fig, ax = plt.subplots(figsize=(17,6))
par1 = ax.twinx()
line, = ax.plot(pd.DataFrame(T10YFF),linewidth=0.4)
line.set_label('10-Year Treasury Constant Maturity Minus Federal Funds Rate')
ax.legend(loc='best', bbox_to_anchor=(0.5, 0., 0.5, 0.1))

line1, = par1.plot(np.log(GSPC_h['Close']),linewidth=0.7, color='red')
line1.set_label('S&P500')
par1.legend(loc='best', bbox_to_anchor=(0.5, 0., 0.5, 0.18))
plt.xlim(left=date(1962, 1, 1), right=date(2020, 3, 9))
plt.ylim(bottom=4)
ax.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1981, 7, 1), date(1982, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1980, 1, 1), date(1980, 7, 1), alpha=0.3, color='grey')
ax.axvspan(date(1973, 12, 1), date(1975, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1969, 12, 1), date(1970, 11, 1), alpha=0.3, color='grey')
ax.axhline(linewidth=2, color='black', alpha=0.7)
plt.scatter(date(2019, 9, 1), 6.7, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(2007, 1, 1), 6.7, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(2000, 11, 1), 6.7, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1998, 11, 1), 6.6, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1989, 6, 1), 6.4, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1973, 6, 1), 6.6, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1981, 3, 1), 6.3, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1979, 3, 1), 6.6, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1969, 3, 1), 6.6, color='orange', s=500, marker='o', alpha=0.5)
plt.scatter(date(1967, 1, 1), 6.6, color='orange', s=500, marker='o', alpha=0.5)

ax.set_xlabel('')
ax.set_ylabel('  , %')
par1.set_ylabel('Log  S&P500')

plt.show()




Malgré le bruit général de cet écart (à comparer à l'écart de 10 ans - 2 ans), les crises de 73 et 69 ont également été mises en œuvre en réduisant l'écart à la zone négative.

Quoi en ce moment?
Les choses ne sont pas très importantes - l'indicateur montrait déjà une zone négative en 2019.
Les investisseurs institutionnels s'attendent à ce que dans un avenir proche, de graves chocs nous attendent et, pour cette raison, ils soient transférés vers des instruments à revenu fixe à long terme.

Combien reste-t-il avant la crise?
Comme le montre le tableau de répartition, le rendement inversé anticipe les crises pendant un an ou deux.
Étant donné que l'inversion s'est produite fin 2019 et que les marchés américains ont déjà commencé à baisser en raison de l'anticipation d'une future récession due au virus COVID-19, la crise approche à l'heure actuelle.

Au 9 mars 2020, le rendement des bons du Trésor américain à 10 ans est tombé à 0,318% - la valeur la plus basse jamais enregistrée!
Il semble que quelque chose de grand nous attend et cela a déjà commencé.

valeur actuelle T10YFF: -0,17
valeur actuelle T10Y2Y: 0,25

Les prix passés ne prédisent pas la crise


Pour un exemple de l'impuissance de l'analyse technique dans ce numéro, nous prenons l'indicateur RSI.
RSI - l'indice de force relative montre en théorie le marché de la "surachat" et de la "survente"
Marché de surachat - c'est l'état où les prix doivent s'abaisser, c'est-à-dire une crise du marché boursier.

Lien vers le Wiki avec une description de l'indicateur

Nous pouvons calculer cet indicateur en Python, pour le calcul nous prenons la période - 244 séances de trading (1 année civile):

SP500_returns = GSPC_h['Close'].pct_change()
delta = GSPC_h['Close'].diff()
window_length = 500

# Make the positive gains (up) and negative gains (down) Series
up, down = delta.copy(), delta.copy()
up[up < 0] = 0
down[down > 0] = 0

# Calculate the EWMA
roll_up1 = up.ewm(span=window_length).mean()
roll_down1 = down.abs().ewm(span=window_length).mean()

# Calculate the RSI based on EWMA
RS1 = roll_up1 / roll_down1
RSI1 = 100.0 - (100.0 / (1.0 + RS1))

Code graphique
# Compare graphically
fig, ax = plt.subplots(figsize=(20,4))
plt.xlim(left=date(1968, 1, 1), right=date(2020, 3, 9))
line, = ax.plot(np.log(GSPC_h['Close']),linewidth=0.7, color='red')

line.set_label('SNP500')
ax.legend(loc='upper left')

fig1, ax1 = plt.subplots(figsize=(20,4))
plt.xlim(left=date(1968, 1, 1), right=date(2020, 3, 9))
line1, = ax1.plot(RSI1[80:],linewidth=1)

line1.set_label('RSI (1Y)')
ax1.legend(loc='upper left')

ax.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')
ax1.axhline(y=57, linewidth=2, color='black', alpha=0.7)
ax1.axhline(y=45, linewidth=2, color='black', alpha=0.7)

ax.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1981, 7, 1), date(1982, 11, 1), alpha=0.3, color='grey')
ax.axvspan(date(1980, 1, 1), date(1980, 7, 1), alpha=0.3, color='grey')
ax.axvspan(date(1973, 12, 1), date(1975, 2, 1), alpha=0.3, color='grey')
ax.axvspan(date(1969, 12, 1), date(1970, 11, 1), alpha=0.3, color='grey')

ax1.axvspan(date(1990, 8, 1), date(1991, 2, 1), alpha=0.3, color='grey')
ax1.axvspan(date(1981, 7, 1), date(1982, 11, 1), alpha=0.3, color='grey')
ax1.axvspan(date(1980, 1, 1), date(1980, 7, 1), alpha=0.3, color='grey')
ax1.axvspan(date(1973, 12, 1), date(1975, 2, 1), alpha=0.3, color='grey')
ax1.axvspan(date(1969, 12, 1), date(1970, 11, 1), alpha=0.3, color='grey')
ax1.axvspan(date(2007, 12, 1), date(2009, 6, 1), alpha=0.3, color='grey')
ax1.axvspan(date(2001, 3, 1), date(2001, 11, 1), alpha=0.3, color='grey')

ax1.set_xlabel('')
ax.set_xlabel('')
ax1.set_ylabel(' RSI')
ax.set_ylabel('Log  S&P500')

plt.show()




Que voyons-nous sur le graphique RSI?

De nombreuses zones de «surachat», qui pourraient signaler trop de marché, qu'il est temps d'ajuster à la baisse. Mais il a continué d'augmenter (par exemple, une longue période depuis 1995, l'indicateur montre une «surachat», mais avant le début de la crise de 2001, il revient à sa zone habituelle et ne signale pas de «surachat», qui, cependant, se termine avec la crise).

En d'autres termes, l'utilisation d'oscillateurs pour prédire une crise est un exercice très controversé.

Avant les crises, le marché se développe en douceur, sans montrer de forte volatilité à la hausse, contrairement aux chutes - elles sont toujours fortes et rapides. Nous le voyons juste à côté du bord inférieur de l'oscillateur - son intersection a presque toujours montré exactement quand la crise est survenue et que le bas de la chute était proche. Acheter du signal?

résultats


Pour le moment, la situation semble alarmante; il existe des indicateurs directs montrant une possible récession. En plus de ceux examinés, il existe également un indice de production industrielle (il est en tête pour les crises économiques (et non financières!)). On pourrait également se plonger dans les statistiques macroéconomiques et ajouter la balance des paiements, le PIB et autres à l'analyse, cependant, les investisseurs institutionnels l'ont déjà fait pour nous - leur réaction se reflète dans l'écart de rendement des obligations à long terme et à court terme. Il ne reste plus qu'à se détendre et regarder le spectacle, si vous n'avez pas d'investissements financiers. Et s'il y en a - pensez à une couverture possible de vos positions ou allez à la cache jusqu'à des temps meilleurs.

All Articles