Como estão os indicadores técnicos nas bolsas de valores

Quem já se interessou por mercados de ações ou criptomoedas já viu essas linhas adicionais. E você provavelmente já ouviu opiniões de traders experientes de que eles não funcionam e como não usam nada. Mas eles ajudam muito e meu terminal de operações, que eu olho preguiçosamente uma vez por dia, se parece com a figura abaixo.

Como eles são todos iguais? E para quem isso pode ser útil? Você definitivamente deve se familiarizar com isso se:

  1. Você os usa em seu comércio
  2. Você está planejando escrever um robô de negociação
  3. Deseja implementar uma estratégia de negociação você mesmo

indicadores técnicos

Um indicador técnico geralmente é uma função de janela, peso ou recorrência de preços e volumes provenientes da troca no formato de uma matriz de velas TOHLCV (tempo unix, aberto, alto, baixo, próximo, volume). Vários filtros, mínimos máximos ou outros indicadores também podem ser usados ​​como base para cálculos subsequentes.

Média Móvel (SMA)

Ao implementar indicadores, é muito conveniente usar uma abordagem de programação funcional. Por exemplo, uma média móvel, essa é apenas a média de cada valor da função de janela móvel ao preço de fechamento

function sma($close, window) { return rolling(x => mean(x), window, $close); } 

onde a função mean () é o valor médio, o parâmetro window é o tamanho da janela, e rolling () é uma combinação da função window, que para cada célula atual na matriz produz uma matriz dos últimos n elementos e a operação que minimiza a janela para um número.

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

A média móvel é um indicador de atraso e ajuda a determinar a tendência. Ele é desenhado sobreposto no gráfico de preços e os primeiros valores geralmente são descartados.

Média Móvel (SMA)

Normalmente, um par de indicadores é considerado, e o ponto em que um indicador com uma janela curta cruza um indicador com uma janela longa é considerado como um potencial ponto de entrada por baixo e um ponto de saída por cima. Na prática, uma média móvel ponderada exponencialmente é usada com mais frequência, usando uma função de janela ponderada para reduzir o efeito de atraso.

Desvio Padrão (DESVPAD)

Se substituirmos a função mean () na versão anterior pela raiz da variação sd (), obteremos um desvio padrão móvel.

 function stdev($close, window) { return rolling(x => sd(x), window, $close); } 

A dispersão é considerada usual da maneira usual, na maioria das vezes sem correção de Bessel. A raiz da variação também é usada, uma vez que a própria variação é medida em rublos quadrados / dólares.

Bandas de Bollinger (BB)

Assim, já recebemos dois indicadores básicos que já podem ser combinados e receber novos. Por exemplo, se adicionarmos ponto a ponto a média móvel e o desvio padrão, ao multiplicar por 2, obteremos a parte superior da banda de Bollinger e subtrairemos a parte inferior.

Bandas de Bollinger (BB)

No código, ficará assim

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

onde a função pointwise não faz mais nada, mas coleta um elemento de duas matrizes usando a operação fornecida.

As bandas de Bollinger ajudam a determinar a pausa antes de um grande movimento de preços e são usadas como uma ferramenta para exibir convenientemente a volatilidade em um gráfico; o desvio padrão não pode ser exibido como uma sobreposição no mesmo gráfico que o preço, por isso é conveniente adiá-lo da média móvel.

Nota
Este indicador tem uma desvantagem - ele usa funções ponderadas exponencialmente. Como exercício, você pode tentar transformá-lo, não se esqueça de levar em consideração que o desvio padrão também precisa ser calculado exponencialmente equilibrado.


Média móvel ponderada exponencialmente (EMA)

Como o atraso médio móvel pode ser reduzido? Como no cálculo, são adicionados os últimos preços de fechamento, é possível entender que é possível adicionar com algum peso, reduzindo a contribuição dos preços antigos. Assim, chegamos à fórmula para uma função de janela ponderada.

 barx= frac sumxiN= frac sum1 cdotxi sum1 quad Rightarrow quad widetildex= frac sumxiwi sumwi


se wi=qie escolha algum tipo de constante qmenos de um, obtemos um peso infinitamente decrescente, se, ao mesmo tempo, somarmos os preços a partir dos mais novos.

funções de peso

Os cálculos podem ser bastante simplificados se a contribuição das caudas não for levada em consideração. Expandindo o tamanho da janela para todo o comprimento, você pode obter uma definição recursiva.

1+q+q2+...+qn undersetn to infty undersetq<0 approx frac11q mathrmEMAcurr= frac sumxiqi sumqi approx(1q) sumxiqi mathrmEMApróximo= fracxnext+q cdot sumxiqi1+q cdot sumqi=(1q) cdot left[xnext+q cdot sumxiqi right] mathrmEMAnext=(1q) cdotxnext+q cdot mathrmEMAcurr


Como resultado, precisamos escolher algum valor  alpha=1qcomo uma constante de suavização. Pode ser demonstrado que, se você tomar  alpha=2/(N+1)o centro de massa dos pesos EMA e SMA acima se torna o mesmo. No código, tudo parece muito mais fácil.

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

Em geral, essa é a mesma média móvel, mas mais sensível.

Média móvel ponderada exponencialmente (EMA)

A eficiência do uso depende da sua experiência e das configurações usadas. Por exemplo, neste site, os parâmetros são muito bem escolhidos.

Média convergente / divergência móvel (MACD)

Gerald Appel, em 1979, apresentou um dos osciladores mais simples e ao mesmo tempo eficazes de preços. Ele converte dois indicadores de tendência da EMA em um indicador de momento, tirando o melhor de dois mundos. Ou seja, ele, grosso modo, encontra uma derivada. Ele é desenhado em uma janela separada com duas linhas e um histograma, e não sobreposto, como os anteriores. De fato, há muito mais indicadores desenhados em uma janela separada, mas isso pode acontecer em outra época.

Média convergente / divergência móvel (MACD)

A fórmula de cálculo é bastante simples, pegue dois ema com uma janela curta e curta, por exemplo, 26 e 12 unidades e subtraia, a linha resultante será o indicador desejado. Tomando outro ema dessa diferença com um passo de 3 unidades, obtemos uma linha de sinal. O histograma que Gerald adicionou posteriormente é calculado pela diferença entre os dois resultados anteriores e é essencialmente um derivado médio ponderado.

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

Teste de indicador, erro padrão normalizado

Tendo tabelas precisas com o significado de indicadores, você pode testar qualitativamente seu cálculo. Existem várias maneiras de determinar a medida do erro entre duas funções, mas a prática mostrou que o erro quadrado médio normalizado, que é considerado como

 mathrmNRMSE= esquerda. sqrt frac sum( hatxixi)2N middle/( maxxi minxi) right.


funciona melhor para tamanhos pequenos e grandes. Por exemplo, bitcoin em dólares pode custar US $ 20.000 e a diferença de US $ 10 não é crítica, ao mesmo tempo, um altcoin pode ser calculado em vários 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)); } 

Conclusão

Portanto, em algumas linhas, você pode expressar os indicadores básicos, se planeja realizar suas análises por aprendizado de máquina e, em seguida, determinar os pontos de entrada ideais, aconselhamos a prestar atenção ao indicador ZigZag, que não é útil para negociação, mas extremamente útil como professor. Também deve-se ter em mente que, para negociação, você precisa escolher os indicadores mais diferentes e tentar alterar seus parâmetros de entrada. Você pode tentar alterá-los automaticamente ao longo do tempo, pois os parâmetros mais eficazes tendem a mudar.

Fontes utilizadas

1. StockCharts - lista de algoritmos com dados de verificação em tabelas
2. Cryptowatch - parâmetros de indicadores bem ajustados
3. Github - código fonte

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


All Articles