Comment sont les indicateurs techniques sur les marchés boursiers

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:

  1. Vous les utilisez dans votre métier
  2. Envisagez-vous d'écrire un robot de trading
  3. Voulez-vous mettre en Ɠuvre une stratĂ©gie de trading vous-mĂȘme

indicateurs techniques

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.

Moyenne mobile (SMA)

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.

Bandes de Bollinger (BB)

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.

Remarque
Cet 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.

fonctions de poids

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.

Moyenne mobile pondérée exponentiellement (EMA)

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.

Convergence / divergence moyenne mobile (MACD)

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ée

Ayant 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)); } 

Conclusion

Donc 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ées

1. 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

Source: https://habr.com/ru/post/fr419239/


All Articles