¿Cómo son los indicadores técnicos en los mercados de valores?

Cualquiera que haya estado interesado en los mercados de acciones o criptomonedas ha visto estas líneas adicionales. Y probablemente escuchó opiniones de comerciantes experimentados de que no funcionan y de cómo no usan nada. Pero ayudan mucho y mi terminal comercial, que miro perezosamente una vez al día, se parece a la imagen de abajo.

¿Cómo están todos arreglados? ¿Y para quién puede ser útil? Definitivamente debería familiarizarse con esto si:

  1. Los usas en tu comercio
  2. ¿Estás planeando escribir un robot comercial?
  3. ¿Desea implementar una estrategia comercial usted mismo?

indicadores técnicos

Un indicador técnico suele ser una función de ventana, peso o recurrencia de precios y volúmenes que provienen del intercambio en el formato de una serie de velas TOHLCV (tiempo unix, abierto, alto, bajo, cerrado, volumen). Varios filtros, máximos mínimos u otros indicadores también se pueden utilizar como base para cálculos posteriores.

Media móvil (SMA)

Al implementar indicadores, es muy conveniente utilizar un enfoque de programación funcional. Por ejemplo, un promedio móvil, este es solo el promedio de cada valor de la función de ventana móvil al precio de cierre

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

donde la función mean () es el valor promedio, el parámetro de la ventana es el tamaño de la ventana, y rolling () es una combinación de la función de la ventana, que para cada celda actual en la matriz produce una matriz de los últimos n elementos, y la operación que minimiza la ventana a un 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; } 

El promedio móvil es un indicador rezagado y ayuda a determinar la tendencia. Se dibuja una superposición en la parte superior del gráfico de precios y los primeros valores generalmente se descartan.

Media móvil (SMA)

Por lo general, se considera un par de indicadores, y el punto cuando un indicador con una ventana corta cruza un indicador con una ventana larga se considera como un punto de entrada potencial desde abajo y un punto de salida desde arriba. En la práctica, se usa con mayor frecuencia una media móvil exponencialmente ponderada, utilizando una función de ventana ponderada para reducir el efecto de retraso.

Desviación Estándar (STDEV)

Si reemplazamos la función mean () en la versión anterior con la raíz de la varianza sd (), obtendremos una desviación estándar móvil.

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

La dispersión se considera habitual de la forma habitual, con mayor frecuencia sin corrección de Bessel. También se usa la raíz de la varianza, ya que la varianza misma se mide en rublos cuadrados / dólares.

Bandas de Bollinger (BB)

Por lo tanto, ya hemos recibido dos indicadores básicos que ya se pueden combinar y recibir nuevos. Por ejemplo, si sumamos punto por punto el promedio móvil y la desviación estándar, mientras multiplicamos por 2, obtenemos la parte superior de la banda de Bollinger, y si restamos la parte inferior.

Bandas de Bollinger (BB)

En código, se verá así

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

donde la función pointwise no hace nada más que recolectar un elemento de dos matrices usando la operación que se le asigna.

Las Bandas de Bollinger ayudan a determinar la pausa antes de un gran movimiento de precios, y se usan como una herramienta para mostrar convenientemente la volatilidad en un gráfico; la desviación estándar no se puede mostrar como una superposición en un gráfico con el precio, por lo que es conveniente posponerlo del promedio móvil.

Nota
Este indicador tiene un inconveniente: utiliza funciones ponderadas exponencialmente. Como ejercicio, puede intentar transformarlo usted mismo, no olvide tener en cuenta que la desviación estándar también debe calcularse exponencialmente equilibrada.


Promedio móvil ponderado exponencialmente (EMA)

¿Cómo se puede reducir el retraso promedio móvil? Dado que al calcularlo, se suman los últimos precios de cierre, puede comprender que puede agregar con algo de peso, reduciendo la contribución de los precios anteriores. Así llegamos a la fórmula para una función de ventana ponderada.

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


si wi=qiy elegir algún tipo de constante qmenos de uno, entonces obtenemos un peso infinitamente decreciente, si al mismo tiempo sumamos los precios a partir del más nuevo.

funciones de peso

Los cálculos pueden simplificarse enormemente si no se tienen en cuenta las contribuciones de cola . Al expandir el tamaño de la ventana a toda su longitud, puede obtener una definición recursiva.

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


Como resultado, necesitamos elegir algún valor  alpha=1qcomo una constante de suavizado Se puede demostrar que si toma  alpha=2/(N+1)El centro de masa de los pesos EMA y SMA anteriores se vuelve el mismo. En el código, todo parece mucho más 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; } 

En general, este es el mismo promedio móvil, pero más sensible.

Promedio móvil ponderado exponencialmente (EMA)

La eficiencia del uso depende de su experiencia y la configuración utilizada. Por ejemplo, en este sitio los parámetros están bastante bien elegidos.

Media móvil de convergencia / divergencia (MACD)

Gerald Appel en 1979 ideó uno de los osciladores de puntos de precio más simples y al mismo tiempo efectivos. Convierte dos indicadores de tendencia EMA en un indicador de momento, tomando lo mejor de dos mundos. Es decir, él, en términos generales, encuentra una derivada. Se dibuja en una ventana separada con dos líneas y un histograma, y ​​no se superpone, como las anteriores. De hecho, hay muchos más indicadores que se dibujan en una ventana separada, pero esto puede ser en algún otro momento.

Media móvil de convergencia / divergencia (MACD)

La fórmula de cálculo es bastante simple, tome dos ema con una ventana corta y corta, por ejemplo, 26 y 12 unidades, y restando, la línea resultante será el indicador deseado. Tomando otro ema de esta diferencia con un paso de 3 unidades, obtenemos una línea de señal. El histograma que Gerald agregó más tarde se calcula por la diferencia entre los dos resultados anteriores y es esencialmente una derivada promedio ponderada.

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

Prueba de indicador, error estándar normalizado

Al tener tablas precisas con el significado de los indicadores, puede probar cualitativamente su cálculo. Hay varias formas de determinar la medida del error entre dos funciones, pero la práctica ha demostrado que el error cuadrático medio normalizado, que se considera como

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


funciona mejor para tamaños pequeños y grandes. Por ejemplo, bitcoin en dólares puede costar $ 20,000 y la diferencia de $ 10 no es crítica, al mismo tiempo, una altcoin se puede calcular en varios 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)); } 

Conclusión

En pocas líneas puede expresar los indicadores básicos, si planea llevar a cabo su análisis mediante aprendizaje automático, para determinar los puntos de entrada ideales, le aconsejo que preste atención al indicador ZigZag, que no es útil para el comercio, pero es extremadamente útil como profesor. También debe tenerse en cuenta que para operar necesita elegir los indicadores más diferentes e intentar cambiar sus parámetros de entrada. Puede intentar cambiarlos automáticamente con el tiempo, ya que los parámetros más efectivos tienden a cambiar.

Fuentes utilizadas

1. StockCharts - lista de algoritmos con datos de verificación en tablas
2. Cryptowatch - parámetros indicadores bien ajustados
3. Github - código fuente

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


All Articles