Quiconque a déjà été intéressé par les marchés boursiers ou de crypto-monnaie a vu ces lignes supplémentaires. Et vous avez probablement entendu des opinions de commerçants chevronnés selon lesquels ils ne fonctionnent pas et comment ils n'utilisent rien. Mais ils aident beaucoup et mon terminal de trading, que je regarde paresseusement une fois par jour, ressemble à l'image ci-dessous.
Comment sont-ils tous pareils? Et Ă qui cela peut-il ĂȘtre utile? Vous devriez certainement vous familiariser avec cela si:
- Vous les utilisez dans votre métier
- Envisagez-vous d'écrire un robot de trading
- Voulez-vous mettre en Ćuvre une stratĂ©gie de trading vous-mĂȘme

Un indicateur technique est le plus souvent une fonction de fenĂȘtre, de poids ou de rĂ©currence des prix et des volumes qui proviennent de l'Ă©change sous la forme d'un tableau de bougies TOHLCV (temps unix, ouvert, haut, bas, fermĂ©, volume). Divers filtres, maximum-minimum ou autres indicateurs peuvent Ă©galement ĂȘtre utilisĂ©s comme base pour les calculs ultĂ©rieurs.
Moyenne mobile (SMA)Lors de la mise en Ćuvre des indicateurs, il est trĂšs pratique d'utiliser une approche de programmation fonctionnelle. Par exemple, une moyenne mobile, c'est juste la moyenne de chaque valeur de la fonction de fenĂȘtre mobile au prix de clĂŽture
function sma($close, window) { return rolling(x => mean(x), window, $close); }
oĂč la fonction mean () est la valeur moyenne, le paramĂštre window est la taille de la fenĂȘtre, et rolling () est une combinaison de la fonction window, qui pour chaque cellule actuelle du tableau produit un tableau des n derniers Ă©lĂ©ments, et l'opĂ©ration qui minimise la fenĂȘtre Ă un certain nombre.
function rolling(operation, window, array) { let result = []; for (let i = 0; i < array.length; i++) { if (i + 1 < window) { result.push(NaN); } else { result.push(operation(array.slice(i + 1 - window, i + 1))); } } return result; }
La moyenne mobile est un indicateur en retard et permet de déterminer la tendance. Il est superposé sur le graphique des prix et les premiÚres valeurs sont généralement ignorées.

Habituellement, une paire d'indicateurs est prise en compte et le point oĂč un indicateur Ă fenĂȘtre courte croise un indicateur Ă fenĂȘtre longue est considĂ©rĂ© comme un point d'entrĂ©e potentiel par le bas et un point de sortie par le haut. En pratique, une moyenne mobile exponentiellement pondĂ©rĂ©e est plus souvent utilisĂ©e, en utilisant une fonction de fenĂȘtre pondĂ©rĂ©e pour rĂ©duire l'effet de retard.
Ăcart type (STDEV)Si nous remplaçons la fonction mean () dans la version prĂ©cĂ©dente par la racine de la variance sd (), nous obtiendrons un Ă©cart-type mobile.
function stdev($close, window) { return rolling(x => sd(x), window, $close); }
La dispersion est considĂ©rĂ©e comme habituelle de la maniĂšre habituelle, le plus souvent sans correction de Bessel. La racine de la variance est Ă©galement utilisĂ©e, car la variance elle-mĂȘme est mesurĂ©e en roubles carrĂ©s / dollars.
Bandes de Bollinger (BB)Ainsi, nous avons dĂ©jĂ reçu deux indicateurs de base qui peuvent dĂ©jĂ ĂȘtre combinĂ©s et en recevoir de nouveaux. Par exemple, si nous ajoutons point par point la moyenne mobile et l'Ă©cart type, tout en multipliant par 2, nous obtenons la partie supĂ©rieure de la bande de Bollinger, et si nous soustrayons la partie infĂ©rieure.

En code, cela ressemblera Ă ceci
function bb($close, window, mult) { let middle = sma($close, window); let upper = pointwise((a, b) => a + b * mult, middle, stdev($close, window)); let lower = pointwise((a, b) => a - b * mult, middle, stdev($close, window)); return { lower : lower, upper : upper}; }
oĂč la fonction point par point ne fait rien d'autre que recueille un Ă©lĂ©ment Ă partir de deux tableaux en utilisant l'opĂ©ration qui lui est donnĂ©e.
Les bandes de Bollinger aident Ă dĂ©terminer l'accalmie avant un mouvement de prix important et sont utilisĂ©es comme un outil pour afficher facilement la volatilitĂ© sur un graphique; l'Ă©cart-type ne peut pas ĂȘtre affichĂ© en superposition sur un graphique avec le prix, il est donc pratique de la reporter de la moyenne mobile.
RemarqueCet indicateur a un inconvĂ©nient - il utilise des fonctions pondĂ©rĂ©es de façon exponentielle. En tant qu'exercice, vous pouvez essayer de le transformer vous-mĂȘme, n'oubliez pas de tenir compte du fait que l'Ă©cart-type doit Ă©galement ĂȘtre calculĂ© de maniĂšre exponentielle Ă©quilibrĂ©e.
Moyenne mobile pondĂ©rĂ©e exponentiellement (EMA)Comment rĂ©duire le dĂ©calage de la moyenne mobile? Ătant donnĂ© que lors du calcul, n derniers prix de clĂŽture sont additionnĂ©s, vous pouvez comprendre que vous pouvez ajouter avec un certain poids, rĂ©duisant la contribution des anciens prix. Nous arrivons ainsi Ă la formule d'une fonction de fenĂȘtre pondĂ©rĂ©e.
barx= frac sumxiN= frac sum1 cdotxi sum1 quad Rightarrow quad widetildex= frac sumxiwi sumwi
si
wi=qi et choisissez une sorte de constante
q moins d'un, alors nous obtenons un poids infiniment dĂ©croissant, si en mĂȘme temps nous additionnons les prix Ă partir du plus rĂ©cent.

Les calculs peuvent ĂȘtre grandement simplifiĂ©s si la contribution des
queues n'est pas prise en compte. En Ă©tendant la taille de la fenĂȘtre sur toute sa longueur, vous pouvez obtenir une dĂ©finition rĂ©cursive.
1+q+q2+...+qn undersetn to infty undersetq<0 approx frac11âq mathrmEMAcurr= frac sumxiqi sumqi approx(1âq) sumxiqi mathrmEMAnext= fracxsuivant+q cdot sumxiqi1+q cdot sumqi=(1âq) cdot left[xsuivant+q cdot sumxiqi right] mathrmEMAnext=(1âq) cdotxnext+q cdot mathrmEMAcurr
En conséquence, nous devons choisir une valeur
alpha=1âq comme constante de lissage.
On peut montrer que si vous prenez
alpha=2/(N+1) le centre de masse des poids EMA et SMA ci-dessus devient le mĂȘme. Dans le code, tout semble beaucoup plus facile.
function ema($close, window, weight = null) { weight = weight ? weight : 2 / (window + 1); let ema = [ mean($close.slice(0, window)) ]; for (let i = 1; i < $close.length; i++) { ema.push($close[i] * weight + ema[i - 1] * (1 - weight)); }; return ema; }
En gĂ©nĂ©ral, il s'agit de la mĂȘme moyenne mobile, mais plus sensible.

L'efficacité de l'utilisation dépend de votre expérience et des paramÚtres utilisés. Par exemple, sur
ce site les paramĂštres sont assez bien choisis.
Convergence / divergence moyenne mobile (MACD)En 1979, Gerald Appel a proposĂ© l'un des oscillateurs de prix les plus simples et les plus efficaces. Il convertit deux indicateurs de tendance EMA en un indicateur de moment, tirant le meilleur de deux mondes. Autrement dit, il, en gros, trouve un dĂ©rivĂ©. Il est dessinĂ© dans une fenĂȘtre sĂ©parĂ©e avec deux lignes et un histogramme, et non superposĂ©, comme les prĂ©cĂ©dents. En fait, il y a beaucoup plus d'indicateurs qui sont dessinĂ©s dans une fenĂȘtre distincte, mais cela peut ĂȘtre Ă un autre moment.

La formule de calcul est assez simple, prenez deux ema avec une fenĂȘtre courte et courte, par exemple, 26 et 12 unitĂ©s, et soustrait, la ligne rĂ©sultante sera l'indicateur souhaitĂ©. En prenant un autre ema de cette diffĂ©rence avec un pas de 3 unitĂ©s, nous obtenons une ligne de signal. L'histogramme que Gerald a ajoutĂ© plus tard est calculĂ© par la diffĂ©rence entre les deux rĂ©sultats prĂ©cĂ©dents et est essentiellement une dĂ©rivĂ©e moyenne pondĂ©rĂ©e.
function macd($close, wshort, wlong, wsig) { let line = pointwise((a, b) => a - b, ema($close, wshort), ema($close, wlong)); let signal = ema(line, wsig); let hist = pointwise((a, b) => a - b, line, signal); return { line : line, signal : signal, hist : hist }; }
Test d'indicateur, erreur standard normaliséeAyant des tableaux précis avec la signification des indicateurs, vous pouvez tester qualitativement votre calcul. Il existe différentes maniÚres de déterminer la mesure d'erreur entre deux fonctions, mais la pratique a montré que l'erreur quadratique moyenne normalisée, qui est considérée comme
mathrmNRMSE= gauche. sqrt frac sum( hatxiâxi)2N middle/( maxxiâ minxi) right.
fonctionne mieux pour les petites et grandes tailles. Par exemple, le bitcoin en dollars peut coĂ»ter 20 000 $ et la diffĂ©rence de 10 $ n'est pas critique, en mĂȘme temps, un altcoin peut ĂȘtre calculĂ© en plusieurs satoshi.
function nrmse(f, g) { let sqrDiff = pointwise((a, b) => (a - b) * (a - b), f, g); return Math.sqrt(mean(sqrDiff)) / (Math.max(...f) - Math.min(...f)); }
ConclusionDonc en quelques lignes vous pouvez exprimer les indicateurs de base, si vous prĂ©voyez d'effectuer leur analyse par machine learning, puis pour dĂ©terminer les points d'entrĂ©e idĂ©aux, je vous conseille de faire attention Ă l'indicateur ZigZag, qui n'est pas utile pour le trading, mais extrĂȘmement utile en tant qu'enseignant. Il convient Ă©galement de garder Ă l'esprit que pour le trading, vous devez choisir les indicateurs les plus diffĂ©rents et essayer de modifier leurs paramĂštres d'entrĂ©e. Vous pouvez essayer de les modifier automatiquement au fil du temps, car les paramĂštres les plus efficaces ont tendance Ă changer.
Sources utilisées1.
StockCharts - liste d'algorithmes avec des données de vérification dans des tableaux
2.
Cryptowatch - paramÚtres d'indicateur bien réglés
3.
Github - code source