
Remarque : cet article ne vise pas à fournir des conseils professionnels en matière de finances/d’investissement. C’est à des fins éducatives seulement.
Je passe beaucoup de temps à construire des modèles mathématiques et d’apprentissage automatique pour créer des systèmes de trading automatisés qui génèrent de l’alpha. Il s’agit d’un didacticiel adapté aux débutants et mon objectif est d’inviter les personnes novices en science des données à l’utiliser comme exercice d’apprentissage.
Aujourd’hui, nous utiliserons des variables aléatoires simulées pour prédire le prix d’Ethereum. Considérez cette approche d’un point de vue purement mathématique car des prévisions de prix extrêmement précises nécessitent des entrées plus sophistiquées dans un modèle telles que le sentiment du marché, les facteurs socio-économiques, etc.
Avant de nous lancer dans les calculs, je veux décrire quelques termes pour ceux qui sont nouveaux ici :
- Simulations de Monte-Carlo: Ce sont des modèles qui nous aident à prédire la probabilité de différents résultats lorsque l’intervention de variables aléatoires est présente. Ils permettent aux scientifiques des données de construire la distribution d’actifs trop complexes pour être modélisés analytiquement. Nous utiliserons des simulations de Monte Carlo dans notre modélisation (Voici une vidéo expliquant cela avec un exemple simple).
- Traiter (dans le contexte de la science des données !) : un processus est un événement qui évolue dans le temps pour atteindre un objectif, généralement avec une période de temps de 0 à T. Pendant ce temps, des événements peuvent se produire à différents moments du chemin qui peuvent avoir un effet sur la valeur finale du processus.
- Processus stochastique: un processus qui peut être décrit par le changement d’une variable aléatoire dans le temps, qui peut être discret ou continu.
- Marche aléatoire: Dans les marchés efficients, les prix financiers devraient afficher un schéma de marche aléatoire. Dans les termes les plus simples, une marche aléatoire est un processus stochastique qui commence par un score de 0. À chaque événement discret, il existe une probabilité p chance que vous augmentiez le score de +1 et un (1-p) chance que le score diminue de 1. L’événement se produit J fois. Dans ce cas, la valeur attendue de J est 0 + T[p(+1) + (1-p)(-1)]
- Processus de Markov: Plus précisément, les prix des marchés financiers sont supposés suivre un processus de Markov, qui est un type de processus stochastique où seule la valeur actuelle d’une variable est pertinente pour prédire l’avenir. Le passé est sans importance.
À l’aide de simulations, nous allons d’abord créer des variables synthétiques qui reflètent avec précision les facteurs de risque qui déterminent le prix d’Ethereum. Ces facteurs incluent les prix de la cryptographie, les cours des actions, les indices, les taux de change, les rendements sans risque ainsi que les prix des matières premières.
Le processus de simulation de Markov mentionné ci-dessus est développé à l’aide des composants suivants :
Le processus Wiener
Le processus de Wiener (également appelé mouvement brownien) est un processus stochastique {Wt}t≥0+ indexé par des nombres réels non négatifs t avec les propriétés suivantes :

Dans notre cas, Il décrit une variable Δz dont l’évolution est mesurée sur l’intervalle Δt telle que sa variation moyenne soit nulle et sa variance proportionnelle à Δt:

Si ε est une variable normale standard N(0, 1)cela peut s’écrire :

Celle-ci est suivie de la processus de Wiener généralisé qui décrit une variable ΔX construit à partir d’un processus de Wiener, avec en plus une tendance constante une par unité de temps et volatilité b:

Ensuite, nous avons le Ce processus qui est un processus stochastique adapté qui peut être exprimé comme la somme d’une intégrale par rapport au mouvement brownien et d’une intégrale par rapport au temps comme ceci :

Un exemple particulier du procédé Ito est le mouvement brownien géométrique (GBM)qui est décrit pour la variable S comme:

GBM est utile dans la modélisation des cours des actions au fil du temps lorsque vous estimez que les variations en pourcentage sont indépendantes et distribuées de manière identique. Par exemple, supposons que Xn est le prix de certaines actions à la fois n.m.Ensuite, il serait raisonnable de supposer que Xn/Xn−1, n ≥ 1, sont indépendants et identiquement distribués. Le processus est géométrique car les termes de tendance et de volatilité sont proportionnels à la valeur actuelle de ΔS. Ceci est généralement applicable aux prix Ethereum, dont les taux de rendement semblent être plus stationnaires que les rendements bruts en dollars, S.
C’est la majeure partie de la théorie nécessaire pour notre modèle. Avant de sauter dans le code python, je veux vous montrer un exemple de calcul.
En 2021, Ethereum a eu un retour de 404,2 %. En 2020, c’était 464,1 %, en 2019 c’était -8,0% et en 2018 c’était -82,7%. Le rendement moyen est ~194 %.
À la date de publication de cet article, le prix actuel de l’ETH est 2 708,11 $ US. Quel est le processus de changement du prix du bitcoin au cours de la semaine prochaine ?
Le processus est le suivant :

où ε est un tirage au sort d’une distribution normale standard. Si l’intervalle est d’une semaine, ou Δt = 1/52 = 0,01923, la moyenne est
µΔt = 1,94 × 0,01923 = 0,0373062
Ethereum a actuellement une volatilité moyenne de 72%, alors:
σ√Δt= 0,72 × √0,01923 = 0,09984403837
Cela nous donne :
ΔS = 2 708,11 $ x (0,0373062 + 0,09984403837 x ε)
Pour le processus, nous obtenons finalement :
ΔS = 101.029 + 270.389 × ε
Prédire le prix Ethereum en Python
Maintenant que nous avons nos équations de processus, commençons à coder. Je recommande d’avoir Python3 + pour cela. Pour notre simulation, le processus est approximé par petits pas avec une distribution normale dont la moyenne et la variance sont données par :

Pour prédire le prix futur d’Ethereum, nous partirons du prix actuel St et générerons une séquence de variables normales standard indépendantes ε, pour je = 1, 2, . . . , n.
De l’équation ci-dessus, nous obtenons St +1 comme

Pour St +n nous obtenons St qui devrait avoir une distribution logarithmique.
Nous mettons en place la dérive (µ) en pourcentage 0. En science des données, dérive fait référence aux propriétés statistiques de la variable cible qui évoluent dans le temps. Nous avons une volatilité d’environ 70 % qui sera divisée en 100 étapes.
Par conséquent, le rendement attendu local est μΔt = 0,0/100 = 0,0 et la volatilité est de 0,70 × √(1/100) = 0,07
Vous trouverez ci-dessous mon script python configuré. Après initialisation, nous allons définir 2 fonctions, la première appelée RAND() qui génère des nombres aléatoires uniformément répartis entre 0 et 1. La suivante est NORMINV, cela calcule l’inverse de la fonction de distribution normale cumulative pour x, et une distribution fournie moyenne et écart-type.
import numpy as np
import pandas as pd
from scipy.stats import norm
from numpy.random import randn
from numpy import random as rn
import scipy.stats as si
from matplotlib import pyplot as plt
from IPython.display import Image
%matplotlib inlinedef RAND():
d = rn.uniform(0, 1, 1)[0]
return (d)def NORMINV(x,mu,sigma):
d = si.norm.ppf(x, loc = mu, scale = sigma)
return (d)S0 = 2708.11M = 100
S = np.ones(M)
print (S)
Lorsque nous imprimons S, nous obtenons :

step = np.arange(0,101)
print (step)

df = pd.DataFrame(step, columns=[‘Step i’])
print (df)
Nous initialisons maintenant notre dataframe pandas qui ressemble à :

Créons maintenant la deuxième colonne, qui sera la réalisation d’une variable U(0, 1) uniforme, avec la fonction RAND() correspondante.
df[‘Uniform ui RAND(⋅)’]=0.0000
for i in range(1,len(df[‘Step i’])):
df[‘Uniform ui RAND(⋅)’][i]=RAND()
print(df)

Notre prochaine colonne transformera cette variable en une variable normale avec une moyenne de 0,0 et une volatilité de 0,07.
df[‘Normal ui NORMINV(ui,0.0,0.07)’]=0.0000
for i in range(1,len(df[‘Step i’])):
df[‘Normal ui NORMINV(ui,0.0,0.07)’][i] = NORMINV(df[‘Uniform ui RAND(⋅)’][i],0.0,0.07)
print (df)

df[‘Price St+i’]=0.000
df[‘Price St+i’][0]=S0
print(df)

Le prix St+i à l’étape 0 est notre prix Ethereum initial : 2 708,11 $. Nous allons maintenant créer le processus General Brownian Motion :
for i in range(0,100):
df[‘Price St+i’][i+1] = df[‘Price St+i’][i]+ df[‘Price St+i’][i]*df[‘Normal ui NORMINV(ui,0.0,0.07)’][i+1]
print(df)

En utilisant la base de données ci-dessus, nous pouvons simplement obtenir l’incrément de prix en multipliant la variable aléatoire par le prix précédent comme tel.
df[‘Price Increment’]=0.000
for i in range(1,100):
df[‘Price Increment’][i] = df[‘Price St+i’][i-1] * df[‘Normal ui NORMINV(ui,0.0,0.07)’][i]
df.drop([‘Price St+i’],axis=1,inplace=True)
print(df)

Enfin, nous allons construire la colonne a posteriori pour le Prix St+i.
df[‘Price St+i’] = 0.000
df[‘Price St+i’][0] = S0
for i in range(0,100):
df[‘Price St+i’][i+1] = df[‘Price St+i’][i]+ df[‘Price Increment’][i+1]
print(df)

Le processus est répété jusqu’à ce que le prix final d’Ethereum soit atteint à la 100e étape.
Cette expérience peut être répétée aussi souvent que nécessaire. Définir K comme le nombre de répétitions ou d’essais aléatoires.
import numpy as np
import pandas as pd
from scipy.stats import norm
from numpy.random import randn
from numpy import random as rn
from matplotlib import pyplot as plt
%matplotlib inlineS0 = 2708.11
mu = 0.00
sigma = 0.07
M = 10
N = 100
T = 1
h = T/N
Z = rn.randn(M,N)
S = S0*np.ones((M,N+1))
for i in range(0,N):
S[:,i+1] = S[:,i] + S[:,i]*( mu*h + sigma*np.sqrt(h)*Z[:,i] )
plt.figure(figsize=(17,10))
a = [ rn.randint(0,M) for j in range(1,20)]
for runer in a:
plt.plot(np.arange(0,T+h,h),S[runer])

Dans la figure ci-dessus, nous voyons les 10 premiers essais. Chacun conduit à une valeur finale simulée SkT. Ceci génère une distribution de prix simulés ST.
Avec une simulation atomique, la distribution est toujours normale, cependant, plus nous avons de simulations, plus la distribution tend à devenir logarithmique.
Comme vous pouvez le voir, ce modèle est idéal pour modéliser le prix futur d’Ethereum, cependant, il y a quelques problèmes avec cette approche.
Inconvénients de cette approche :
- Les simulations de Monte Carlo dépendent fortement des hypothèses faites qui incluent les paramètres, le type et la forme de la distribution et les fonctions de tarification
- Nous supposons que la dérive est nulle, ce qui n’est souvent pas le cas
- Nous n’avons pas pris en compte les vecteurs de données supplémentaires influençant le prix d’un actif, tels que les actualités, l’opinion publique, l’activité financière, etc.
Cet article a été inspiré par les travaux de Roi Polanitzer. J’espère que c’était un bon exercice d’apprentissage et qu’il a fourni de bonnes idées. Au quotidien, je suis fortement impliqué dans la recherche et le développement de la création de modèles d’apprentissage automatique et d’approches algorithmiques pour générer de l’alpha. J’ai également travaillé sur des projets web3 et De-fi dans les coulisses, alors attendez-vous à plus de contenu sur ces sujets bientôt !
Rejoignez Coinmonks Telegram Channel et Youtube Channel pour en savoir plus sur le trading et l’investissement cryptographiques